From ccb26b21c92786cce737bc6a161ff129442b2929 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:04:29 -0400 Subject: [PATCH 001/182] Fix Silver Crate Name (#1218) # Description One word change; silver was named incorrectly. --- Resources/Prototypes/Catalog/Fills/Crates/materials.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/Fills/Crates/materials.yml b/Resources/Prototypes/Catalog/Fills/Crates/materials.yml index 0300830e3bf..92721208f71 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/materials.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/materials.yml @@ -150,7 +150,7 @@ - type: entity id: CrateMaterialSilver - name: gold crate + name: silver crate parent: CrateGenericSteel components: - type: StorageFill From 6b2ec0087bd3ebf1a26fec703968ed4a866bb345 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:05:45 -0400 Subject: [PATCH 002/182] Auto Voting System (#1213) # Description Contains a single system, under the server-sided AutoVote folder, that handles automatic voting of maps and presets, both of which are configurable via a CVar. By automatic voting system, I mean that it creates a vote for map and preset the moment players return to lobby. If the server just started and there are no players, it will run the vote when a player joins to lobby. As of now, the best use case for this is for your players to play the modes they want, at all times. Relevant CVars: `vote.autovote_enabled - Is the autovote system enabled at all? (Default is false)` `vote.map_autovote_enabled - If it is applicable, is automatic map voting enabled? (Default is true)` `vote.preset_autovote_enabled - If it is applicable, is automatic preset voting enabled? (Default is true)` --- # TODO - [x] Base system - [x] CVars - [x] Set default CVar value to false, as it is not something you might want by default. --- # Changelog :cl: - add: Added the automatic voting system. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: VMSolidus --- Content.Server/AutoVote/AutoVoteSystem.cs | 54 +++++++++++++++++++++++ Content.Shared/CCVar/CCVars.cs | 18 ++++++++ 2 files changed, 72 insertions(+) create mode 100644 Content.Server/AutoVote/AutoVoteSystem.cs diff --git a/Content.Server/AutoVote/AutoVoteSystem.cs b/Content.Server/AutoVote/AutoVoteSystem.cs new file mode 100644 index 00000000000..7fb053b2f82 --- /dev/null +++ b/Content.Server/AutoVote/AutoVoteSystem.cs @@ -0,0 +1,54 @@ +using Robust.Shared.Configuration; +using Content.Server.Voting.Managers; +using Content.Shared.GameTicking; +using Content.Shared.Voting; +using Content.Shared.CCVar; +using Robust.Server.Player; +using Content.Server.GameTicking; + +namespace Content.Server.AutoVote; + +public sealed class AutoVoteSystem : EntitySystem +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] public readonly IVoteManager _voteManager = default!; + [Dependency] public readonly IPlayerManager _playerManager = default!; + + public bool _shouldVoteNextJoin = false; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnReturnedToLobby); + SubscribeLocalEvent(OnPlayerJoinedLobby); + } + + public void OnReturnedToLobby(RoundRestartCleanupEvent ev) => CallAutovote(); + + public void OnPlayerJoinedLobby(PlayerJoinedLobbyEvent ev) + { + if (!_shouldVoteNextJoin) + return; + + CallAutovote(); + _shouldVoteNextJoin = false; + } + + private void CallAutovote() + { + if (!_cfg.GetCVar(CCVars.AutoVoteEnabled)) + return; + + if (_playerManager.PlayerCount == 0) + { + _shouldVoteNextJoin = true; + return; + } + + if (_cfg.GetCVar(CCVars.MapAutoVoteEnabled)) + _voteManager.CreateStandardVote(null, StandardVoteType.Map); + if (_cfg.GetCVar(CCVars.PresetAutoVoteEnabled)) + _voteManager.CreateStandardVote(null, StandardVoteType.Preset); + } +} diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index ccef09000f3..60dceea897e 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2640,5 +2640,23 @@ public static readonly CVarDef /// public static readonly CVarDef DebugPow3rDisableParallel = CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); + + /* + * AUTOVOTE SYSTEM + */ + + /// Enables the automatic voting system. + public static readonly CVarDef AutoVoteEnabled = + CVarDef.Create("vote.autovote_enabled", false, CVar.SERVERONLY); + + /// Automatically starts a map vote when returning to the lobby. + /// Requires auto voting to be enabled. + public static readonly CVarDef MapAutoVoteEnabled = + CVarDef.Create("vote.map_autovote_enabled", true, CVar.SERVERONLY); + + /// Automatically starts a gamemode vote when returning to the lobby. + /// Requires auto voting to be enabled. + public static readonly CVarDef PresetAutoVoteEnabled = + CVarDef.Create("vote.preset_autovote_enabled", true, CVar.SERVERONLY); } } From 8385fb1b51f28079c0f5af44406dd29e1da3110a Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 14 Nov 2024 02:06:11 +0000 Subject: [PATCH 003/182] Automatic Changelog Update (#1213) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ff7dce36c26..034cfb4991b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7885,3 +7885,10 @@ Entries: id: 6518 time: '2024-11-13T23:27:00.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1188 +- author: sleepyyapril + changes: + - type: Add + message: Added the automatic voting system. + id: 6519 + time: '2024-11-14T02:05:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1213 From 3c317713ecca08b4b1a696174490c6788221673f Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:02:02 -0800 Subject: [PATCH 004/182] Fix Trait Component Removal (#1221) Caused a debug assert due to the component not being real. --- Content.Server/Traits/TraitSystem.Functions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Traits/TraitSystem.Functions.cs b/Content.Server/Traits/TraitSystem.Functions.cs index 528cb4f9183..07794903d3e 100644 --- a/Content.Server/Traits/TraitSystem.Functions.cs +++ b/Content.Server/Traits/TraitSystem.Functions.cs @@ -74,7 +74,7 @@ public override void OnPlayerSpawn(EntityUid uid, ISerializationManager serializationManager) { foreach (var (name, _) in Components) - entityManager.RemoveComponent(uid, (Component) factory.GetComponent(name)); + entityManager.RemoveComponentDeferred(uid, factory.GetComponent(name).GetType()); } } From 387a362ae9658b60f72db390b420998aea7bf8b0 Mon Sep 17 00:00:00 2001 From: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> Date: Thu, 14 Nov 2024 23:03:33 +0300 Subject: [PATCH 005/182] Some Language Fixes (#1223) # Description 1. Adds languages to... penguins, cockroaches, snakes, mmis, pdas, mail packages. Positronic brains now only speak/understand the borg language. 2. Adds an explicitly defined universal language to revenants and wisps 3. Makes polymorphs copy over a list of components defined in the polymorph proto, thus copying languages and grammar of the original entity to its polymorphed version.

Media

![image](https://github.com/user-attachments/assets/111c3f91-f077-431f-bcd9-f60fa7a1ba26) ![image](https://github.com/user-attachments/assets/80f939d3-b615-4235-a511-82238758788e) ![image](https://github.com/user-attachments/assets/dce99b55-c8b1-4cbe-8769-b82151b3d404) ![image](https://github.com/user-attachments/assets/6b9b962d-c73c-42b9-b240-aa07601de879)

# Changelog :cl: - tweak: Added languages to certain entities that lacked them, including MMIs and positronic brains. - add: Polymorphing into another entity now preserves your languages and grammar. --- Content.Server/Chat/Systems/ChatSystem.cs | 2 +- .../Polymorph/Systems/PolymorphSystem.cs | 15 +++++++++++++++ Content.Shared/Polymorph/PolymorphPrototype.cs | 11 +++++++++++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 9 +++++++++ .../Entities/Mobs/NPCs/glimmer_creatures.yml | 3 +++ .../Prototypes/Entities/Mobs/NPCs/revenant.yml | 2 ++ .../Prototypes/Entities/Objects/Devices/pda.yml | 4 ++++ .../Entities/Objects/Specific/Robotics/mmi.yml | 8 ++++++++ Resources/Prototypes/Language/animal.yml | 13 +++++++++++++ .../Entities/Objects/Specific/Mail/base_mail.yml | 4 ++++ 10 files changed, 70 insertions(+), 1 deletion(-) diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index d743a83ef40..bbca6f4d153 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -43,7 +43,7 @@ namespace Content.Server.Chat.Systems; // Dear contributor. When I was introducing changes to this system only god and I knew what I was doing. // Now only god knows. Please don't touch this code ever again. If you do have to, increment this counter as a warning for others: -// TOTAL_HOURS_WASTED_HERE_EE = 17 +// TOTAL_HOURS_WASTED_HERE_EE = 18 // TODO refactor whatever active warzone this class and chatmanager have become /// diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index e6ba1d02afd..5c970b1a748 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -20,6 +20,7 @@ using Robust.Server.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -31,6 +32,7 @@ public sealed partial class PolymorphSystem : EntitySystem [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly SharedBuckleSystem _buckle = default!; @@ -201,6 +203,19 @@ private void OnDestruction(Entity ent, ref Destructi var child = Spawn(configuration.Entity, _transform.GetMapCoordinates(uid, targetTransformComp), rotation: _transform.GetWorldRotation(uid)); + // Copy specified components over + foreach (var compName in configuration.CopiedComponents) + { + if (!_compFact.TryGetRegistration(compName, out var reg) + || !EntityManager.TryGetComponent(uid, reg.Idx, out var comp)) + continue; + + var copy = _serialization.CreateCopy(comp, notNullableOverride: true); + copy.Owner = child; + AddComp(child, copy, true); + } + + // Ensure the resulting entity is sentient (why? this sucks) MakeSentientCommand.MakeSentient(child, EntityManager); var polymorphedComp = _compFact.GetComponent(); diff --git a/Content.Shared/Polymorph/PolymorphPrototype.cs b/Content.Shared/Polymorph/PolymorphPrototype.cs index 6d010711d2e..e1bc3b0ba03 100644 --- a/Content.Shared/Polymorph/PolymorphPrototype.cs +++ b/Content.Shared/Polymorph/PolymorphPrototype.cs @@ -115,6 +115,17 @@ public sealed partial record PolymorphConfiguration [DataField(serverOnly: true)] [ViewVariables(VVAccess.ReadWrite)] public TimeSpan Cooldown = TimeSpan.Zero; + + /// + /// The exact names of components to copy over when this polymorph is applied. + /// + [DataField(serverOnly: true)] + public HashSet CopiedComponents = new() + { + "LanguageKnowledge", + "LanguageSpeaker", + "Grammar" + }; } public enum PolymorphInventoryChange : byte diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 8dd348f47ec..d192794ea95 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -399,6 +399,9 @@ behaviors: - !type:GibBehavior { } - type: NonSpreaderZombie + - type: LanguageKnowledge + speaks: [Hissing] + understands: [Hissing] - type: entity name: glockroach @@ -2104,6 +2107,9 @@ - type: RandomBark barkType: penguin barkMultiplier: 0.6 + - type: LanguageKnowledge + speaks: [Penguin] + understands: [Penguin] - type: entity name: grenade penguin @@ -2224,6 +2230,9 @@ minTime: 10 maxTime: 50 # It's a sssnake... barkType: hissing + - type: LanguageKnowledge + speaks: [Hissing] + understands: [Hissing] # Code unique spider prototypes or combine them all into one spider and get a # random sprite state when you spawn it. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml index 33e4ecee260..c2219d7fae3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/glimmer_creatures.yml @@ -161,3 +161,6 @@ - type: NPCRetaliation attackMemoryLength: 10 - type: NPCRangedCombat + # other + - type: LanguageSpeaker + - type: UniversalLanguageSpeaker # Should it speak unversal or some other language? diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index c16816b5e44..d466a34383d 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -107,3 +107,5 @@ powersToAdd: - XenoglossyPower - TelepathyPower + - type: LanguageSpeaker + - type: UniversalLanguageSpeaker diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index bad1a8099ec..e32271f4cd9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -104,6 +104,10 @@ - DoorBumpOpener - type: Input context: "human" + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic, RobotTalk] + understands: [TauCetiBasic, RobotTalk] - type: entity parent: BasePDA diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml index 85333e98df5..ac125d36bd1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml @@ -48,6 +48,10 @@ - type: GuideHelp guides: - Cyborgs + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic, RobotTalk] + understands: [TauCetiBasic, RobotTalk] - type: entity parent: MMI @@ -124,3 +128,7 @@ guides: - Cyborgs - type: Organ # Estacao Pirata - IPCs + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [RobotTalk] + understands: [RobotTalk] diff --git a/Resources/Prototypes/Language/animal.yml b/Resources/Prototypes/Language/animal.yml index 46178200011..82f4d627497 100644 --- a/Resources/Prototypes/Language/animal.yml +++ b/Resources/Prototypes/Language/animal.yml @@ -184,3 +184,16 @@ - iss - ss - is + +- type: language + id: Penguin + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 + maxSyllables: 3 + replacement: # I'm out of ideas + - pen + - peng + - won + - wonk + - wong diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml index bee514917a3..75007db11ca 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml @@ -103,6 +103,10 @@ reagents: - ReagentId: Nothing Quantity: 1 + - type: LanguageSpeaker + - type: LanguageKnowledge + speaks: [TauCetiBasic] # So that them foreigners can't understand what the broken mail is saying + understands: [] # This empty parcel is allowed to exist and evade the tests for the admin # mailto command. From 873909685081153aa2fda98dc48f8c0e1297aa28 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 14 Nov 2024 20:03:58 +0000 Subject: [PATCH 006/182] Automatic Changelog Update (#1223) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 034cfb4991b..3e56d6acfb5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7892,3 +7892,16 @@ Entries: id: 6519 time: '2024-11-14T02:05:45.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1213 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + Added languages to certain entities that lacked them, including MMIs and + positronic brains. + - type: Add + message: >- + Polymorphing into another entity now preserves your languages and + grammar. + id: 6520 + time: '2024-11-14T20:03:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1223 From 3423e93a92e4715ae2364df6dd96c4a968ac12ce Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Fri, 15 Nov 2024 06:08:04 -0800 Subject: [PATCH 007/182] The Return of Spray Paint (#1222) # Description Fixes some issues described in https://github.com/space-wizards/space-station-14/issues/26257 and does some other things. This PR's changes are licensed under MIT. --- # Changelog :cl: - add: Added spray-painting back --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: VMSolidus --- .editorconfig | 2 +- Content.Client/Paint/PaintVisualizerSystem.cs | 101 ++++++ Content.Server/Paint/PaintSystem.cs | 202 ++++++++++++ .../EntitySystems/SpawnItemsOnUseSystem.cs | 1 + Content.Shared/Clothing/ClothingEvents.cs | 45 +-- Content.Shared/Paint/PaintComponent.cs | 46 +++ Content.Shared/Paint/PaintDoAfterEvent.cs | 7 + Content.Shared/Paint/PaintRemoverComponent.cs | 17 + .../Paint/PaintRemoverDoAfterEvent.cs | 7 + Content.Shared/Paint/PaintRemoverSystem.cs | 96 ++++++ Content.Shared/Paint/PaintedComponent.cs | 29 ++ Content.Shared/Paint/SharedPaintSystem.cs | 6 + .../SprayPainter/SharedSprayPainterSystem.cs | 3 + Resources/Locale/en-US/paint/paint.ftl | 8 + .../Prototypes/Catalog/Cargo/cargo_fun.yml | 10 + .../Prototypes/Catalog/Fills/Crates/fun.yml | 48 ++- .../Prototypes/Catalog/Fills/Lockers/misc.yml | 4 + .../Markers/Spawners/Random/crates.yml | 1 + .../Markers/Spawners/Random/maintenance.yml | 5 + .../Prototypes/Entities/Mobs/NPCs/carp.yml | 1 + .../Entities/Mobs/NPCs/revenant.yml | 3 + .../Entities/Mobs/Player/guardian.yml | 2 + .../Entities/Objects/Fun/spray_paint.yml | 292 ++++++++++++++++++ .../Objects/Materials/Sheets/glass.yml | 1 + .../Objects/Materials/Sheets/metal.yml | 1 + .../Objects/Materials/Sheets/other.yml | 3 + .../Entities/Objects/Materials/materials.yml | 1 + .../Entities/Objects/Misc/tiles.yml | 3 + .../Objects/Specific/Janitorial/soap.yml | 1 + .../Objects/Weapons/Melee/e_sword.yml | 4 + .../Structures/Decoration/bonfire.yml | 3 + .../Structures/Holographic/projections.yml | 3 + .../Entities/Structures/hydro_tray.yml | 3 + Resources/Prototypes/tags.yml | 3 + .../Textures/Interface/VerbIcons/paint.svg | 39 +++ .../Interface/VerbIcons/paint.svg.192dpi.png | Bin 0 -> 15653 bytes .../VerbIcons/paint.svg.192dpi.png.yml | 2 + .../Fun/spraycans.rsi/clown-inhand-left.png | Bin 0 -> 20773 bytes .../Fun/spraycans.rsi/clown-inhand-right.png | Bin 0 -> 20783 bytes .../Objects/Fun/spraycans.rsi/meta.json | 19 +- .../Fun/spraycans.rsi/spray-inhand-left.png | Bin 0 -> 21199 bytes .../Fun/spraycans.rsi/spray-inhand-right.png | Bin 0 -> 21213 bytes .../Objects/Fun/spraycans.rsi/spray_cap.png | Bin 246 -> 0 bytes SpaceStation14.sln.DotSettings | 60 +++- 44 files changed, 1030 insertions(+), 52 deletions(-) create mode 100644 Content.Client/Paint/PaintVisualizerSystem.cs create mode 100644 Content.Server/Paint/PaintSystem.cs create mode 100644 Content.Shared/Paint/PaintComponent.cs create mode 100644 Content.Shared/Paint/PaintDoAfterEvent.cs create mode 100644 Content.Shared/Paint/PaintRemoverComponent.cs create mode 100644 Content.Shared/Paint/PaintRemoverDoAfterEvent.cs create mode 100644 Content.Shared/Paint/PaintRemoverSystem.cs create mode 100644 Content.Shared/Paint/PaintedComponent.cs create mode 100644 Content.Shared/Paint/SharedPaintSystem.cs create mode 100644 Resources/Locale/en-US/paint/paint.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png create mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png diff --git a/.editorconfig b/.editorconfig index 3e44d1a2811..370c3f9dee6 100644 --- a/.editorconfig +++ b/.editorconfig @@ -72,7 +72,7 @@ csharp_style_expression_bodied_constructors = false:suggestion #csharp_style_expression_bodied_indexers = true:silent #csharp_style_expression_bodied_lambdas = true:silent #csharp_style_expression_bodied_local_functions = false:silent -csharp_style_expression_bodied_methods = false:suggestion +csharp_style_expression_bodied_methods = true:suggestion #csharp_style_expression_bodied_operators = false:silent csharp_style_expression_bodied_properties = true:suggestion diff --git a/Content.Client/Paint/PaintVisualizerSystem.cs b/Content.Client/Paint/PaintVisualizerSystem.cs new file mode 100644 index 00000000000..a00314cd684 --- /dev/null +++ b/Content.Client/Paint/PaintVisualizerSystem.cs @@ -0,0 +1,101 @@ +using Robust.Client.GameObjects; +using static Robust.Client.GameObjects.SpriteComponent; +using Content.Shared.Clothing; +using Content.Shared.Hands; +using Content.Shared.Paint; +using Robust.Client.Graphics; +using Robust.Shared.Prototypes; + +namespace Content.Client.Paint; + +public sealed class PaintedVisualizerSystem : VisualizerSystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHeldVisualsUpdated); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnEquipmentVisualsUpdated); + } + + + protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null + || !_appearance.TryGetData(uid, PaintVisuals.Painted, out bool isPainted)) + return; + + var shader = _protoMan.Index(component.ShaderName).Instance(); + foreach (var spriteLayer in args.Sprite.AllLayers) + { + if (spriteLayer is not Layer layer) + continue; + + if (layer.Shader == null || layer.Shader == shader) + { + layer.Shader = shader; + layer.Color = component.Color; + } + } + } + + private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args) + { + if (!TryComp(uid, out SpriteComponent? sprite)) + return; + component.BeforeColor = sprite.Color; + + if (Terminating(uid)) + return; + + foreach (var spriteLayer in sprite.AllLayers) + { + if (spriteLayer is not Layer layer + || layer.Shader != _protoMan.Index(component.ShaderName).Instance()) + continue; + + layer.Shader = null; + if (layer.Color == component.Color) + layer.Color = component.BeforeColor; + } + } + + private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args) => + UpdateVisuals(component, args); + private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args) => + UpdateVisuals(component, args); + private void UpdateVisuals(PaintedComponent component, EntityEventArgs args) + { + var layers = new HashSet(); + var entity = EntityUid.Invalid; + + switch (args) + { + case HeldVisualsUpdatedEvent hgs: + layers = hgs.RevealedLayers; + entity = hgs.User; + break; + case EquipmentVisualsUpdatedEvent eqs: + layers = eqs.RevealedLayers; + entity = eqs.Equipee; + break; + } + + if (layers.Count == 0 || !TryComp(entity, out SpriteComponent? sprite)) + return; + + foreach (var revealed in layers) + { + if (!sprite.LayerMapTryGet(revealed, out var layer)) + continue; + + sprite.LayerSetShader(layer, component.ShaderName); + sprite.LayerSetColor(layer, component.Color); + } + } +} diff --git a/Content.Server/Paint/PaintSystem.cs b/Content.Server/Paint/PaintSystem.cs new file mode 100644 index 00000000000..bdda9ed8873 --- /dev/null +++ b/Content.Server/Paint/PaintSystem.cs @@ -0,0 +1,202 @@ +using Content.Shared.Popups; +using Content.Shared.Paint; +using Content.Shared.Sprite; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Server.Chemistry.Containers.EntitySystems; +using Robust.Shared.Audio.Systems; +using Content.Shared.Humanoid; +using Robust.Shared.Utility; +using Content.Shared.Verbs; +using Content.Shared.SubFloor; +using Content.Server.Nutrition.Components; +using Content.Shared.Inventory; +using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Whitelist; +using Robust.Shared.Audio; + +namespace Content.Server.Paint; + +/// +/// Colors target and consumes reagent on each color success. +/// +public sealed class PaintSystem : SharedPaintSystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnPaint); + SubscribeLocalEvent>(OnPaintVerb); + } + + + private void OnInteract(EntityUid uid, PaintComponent component, AfterInteractEvent args) + { + if (!args.CanReach + || args.Target is not { Valid: true } target) + return; + + PrepPaint(uid, component, target, args.User); + } + + private void OnPaintVerb(EntityUid uid, PaintComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var paintText = Loc.GetString("paint-verb"); + + var verb = new UtilityVerb() + { + Act = () => + { + PrepPaint(uid, component, args.Target, args.User); + }, + + Text = paintText, + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/paint.svg.192dpi.png")) + }; + args.Verbs.Add(verb); + } + + private void PrepPaint(EntityUid uid, PaintComponent component, EntityUid target, EntityUid user) => + _doAfterSystem.TryStartDoAfter( + new DoAfterArgs( + EntityManager, + user, + component.Delay, + new PaintDoAfterEvent(), + uid, + target: target, + used: uid) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + NeedHand = true, + BreakOnHandChange = true, + }); + + private void OnPaint(Entity entity, ref PaintDoAfterEvent args) + { + if (args.Target == null || args.Used == null || args.Handled || args.Cancelled || args.Target is not { Valid: true } target) + return; + + Paint(entity, target, args.User); + args.Handled = true; + } + + public void Paint(Entity entity, EntityUid target, EntityUid user) + { + if (!_openable.IsOpen(entity)) + { + _popup.PopupEntity(Loc.GetString("paint-closed", ("used", entity)), user, user, PopupType.Medium); + return; + } + + if (HasComp(target) || HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("paint-failure-painted", ("target", target)), user, user, PopupType.Medium); + return; + } + + if (!entity.Comp.Whitelist?.IsValid(target, EntityManager) == true + || !entity.Comp.Blacklist?.IsValid(target, EntityManager) == false + || HasComp(target) || HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("paint-failure", ("target", target)), user, user, PopupType.Medium); + return; + } + + if (CanPaint(entity, target)) + { + EnsureComp(target, out var paint); + EnsureComp(target); + + paint.Color = entity.Comp.Color; + _audio.PlayPvs(entity.Comp.Spray, entity); + paint.Enabled = true; + + // Paint any clothing the target is wearing + if (HasComp(target) + && _inventory.TryGetSlots(target, out var slotDefinitions)) + foreach (var slot in slotDefinitions) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt) + || HasComp(slotEnt.Value) + || !entity.Comp.Whitelist?.IsValid(slotEnt.Value, EntityManager) != true + || !entity.Comp.Blacklist?.IsValid(slotEnt.Value, EntityManager) != false + || HasComp(slotEnt.Value) + || HasComp(slotEnt.Value)) + continue; + + EnsureComp(slotEnt.Value, out var slotToPaint); + EnsureComp(slotEnt.Value); + slotToPaint.Color = entity.Comp.Color; + _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); + Dirty(slotEnt.Value, slotToPaint); + } + + _popup.PopupEntity(Loc.GetString("paint-success", ("target", target)), user, user, PopupType.Medium); + _appearanceSystem.SetData(target, PaintVisuals.Painted, true); + Dirty(target, paint); + return; + } + + if (!CanPaint(entity, target)) + _popup.PopupEntity(Loc.GetString("paint-empty", ("used", entity)), user, user, PopupType.Medium); + } + + public void Paint(EntityWhitelist whitelist, EntityWhitelist blacklist, EntityUid target, Color color) + { + if (!whitelist.IsValid(target, EntityManager) + || blacklist.IsValid(target, EntityManager)) + return; + + EnsureComp(target, out var paint); + EnsureComp(target); + + paint.Color = color; + paint.Enabled = true; + + if (HasComp(target) + && _inventory.TryGetSlots(target, out var slotDefinitions)) + foreach (var slot in slotDefinitions) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt) + || !whitelist.IsValid(slotEnt.Value, EntityManager) + || blacklist.IsValid(slotEnt.Value, EntityManager)) + continue; + + EnsureComp(slotEnt.Value, out var slotToPaint); + EnsureComp(slotEnt.Value); + slotToPaint.Color = color; + _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); + Dirty(slotEnt.Value, slotToPaint); + } + + _appearanceSystem.SetData(target, PaintVisuals.Painted, true); + Dirty(target, paint); + } + + private bool CanPaint(Entity reagent, EntityUid target) + { + if (HasComp(target) + || HasComp(target) + || !_solutionContainer.TryGetSolution(reagent.Owner, reagent.Comp.Solution, out _, out var solution)) + return false; + var quantity = solution.RemoveReagent(reagent.Comp.Reagent, reagent.Comp.ConsumptionUnit); + return (quantity > 0); + } +} diff --git a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs index 4c533ede3ad..3549587aa56 100644 --- a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs +++ b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs @@ -99,6 +99,7 @@ private void OnUseInHand(EntityUid uid, SpawnItemsOnUseComponent component, UseI if (entityToPlaceInHands != null) { _hands.PickupOrDrop(args.User, entityToPlaceInHands.Value); + _audio.PlayPvs(component.Sound, entityToPlaceInHands.Value); } } } diff --git a/Content.Shared/Clothing/ClothingEvents.cs b/Content.Shared/Clothing/ClothingEvents.cs index 83afea45973..1e74b4b56c7 100644 --- a/Content.Shared/Clothing/ClothingEvents.cs +++ b/Content.Shared/Clothing/ClothingEvents.cs @@ -4,18 +4,11 @@ namespace Content.Shared.Clothing; -/// -/// Raised directed at a piece of clothing to get the set of layers to show on the wearer's sprite -/// -public sealed class GetEquipmentVisualsEvent : EntityEventArgs +/// Raised directed at a piece of clothing to get the set of layers to show on the wearer's sprite +public sealed class GetEquipmentVisualsEvent(EntityUid equipee, string slot) : EntityEventArgs { - /// - /// Entity that is wearing the item. - /// - public readonly EntityUid Equipee; - - public readonly string Slot; - + public readonly EntityUid Equipee = equipee; + public readonly string Slot = slot; /// /// The layers that will be added to the entity that is wearing this item. /// @@ -23,12 +16,6 @@ public sealed class GetEquipmentVisualsEvent : EntityEventArgs /// Note that the actual ordering of the layers depends on the order in which they are added to this list; /// public List<(string, PrototypeLayerData)> Layers = new(); - - public GetEquipmentVisualsEvent(EntityUid equipee, string slot) - { - Equipee = equipee; - Slot = slot; - } } /// @@ -37,26 +24,12 @@ public GetEquipmentVisualsEvent(EntityUid equipee, string slot) /// /// Useful for systems/components that modify the visual layers that an item adds to a player. (e.g. RGB memes) /// -public sealed class EquipmentVisualsUpdatedEvent : EntityEventArgs +public sealed class EquipmentVisualsUpdatedEvent(EntityUid equipee, string slot, HashSet revealedLayers) : EntityEventArgs { - /// - /// Entity that is wearing the item. - /// - public readonly EntityUid Equipee; - - public readonly string Slot; - - /// - /// The layers that this item is now revealing. - /// - public HashSet RevealedLayers; - - public EquipmentVisualsUpdatedEvent(EntityUid equipee, string slot, HashSet revealedLayers) - { - Equipee = equipee; - Slot = slot; - RevealedLayers = revealedLayers; - } + public readonly EntityUid Equipee = equipee; + public readonly string Slot = slot; + /// The layers that this item is now revealing. + public HashSet RevealedLayers = revealedLayers; } public sealed partial class ToggleMaskEvent : InstantActionEvent { } diff --git a/Content.Shared/Paint/PaintComponent.cs b/Content.Shared/Paint/PaintComponent.cs new file mode 100644 index 00000000000..dc35b8fd438 --- /dev/null +++ b/Content.Shared/Paint/PaintComponent.cs @@ -0,0 +1,46 @@ +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Audio; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; + +namespace Content.Shared.Paint; + +/// Entity when used on another entity will paint target entity +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedPaintSystem))] +public sealed partial class PaintComponent : Component +{ + /// Noise made when paint gets applied + [DataField] + public SoundSpecifier Spray = new SoundPathSpecifier("/Audio/Effects/spray2.ogg"); + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? Whitelist; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? Blacklist; + + /// How long the doafter will take + [DataField] + public int Delay = 2; + + [DataField, AutoNetworkedField] + public Color Color = Color.FromHex("#c62121"); + + /// Solution on the entity that contains the paint + [DataField] + public string Solution = "drink"; + + /// Reagent that will be used as paint + [DataField, AutoNetworkedField] + public ProtoId Reagent = "SpaceGlue"; + + /// Reagent consumption per use + [DataField] + public FixedPoint2 ConsumptionUnit = FixedPoint2.New(5); + + [DataField] + public TimeSpan DurationPerUnit = TimeSpan.FromSeconds(6); +} diff --git a/Content.Shared/Paint/PaintDoAfterEvent.cs b/Content.Shared/Paint/PaintDoAfterEvent.cs new file mode 100644 index 00000000000..a6f7b951ec4 --- /dev/null +++ b/Content.Shared/Paint/PaintDoAfterEvent.cs @@ -0,0 +1,7 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +[Serializable, NetSerializable] +public sealed partial class PaintDoAfterEvent : SimpleDoAfterEvent; diff --git a/Content.Shared/Paint/PaintRemoverComponent.cs b/Content.Shared/Paint/PaintRemoverComponent.cs new file mode 100644 index 00000000000..9fee3c90cb7 --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Audio; + +namespace Content.Shared.Paint; + +/// Removes paint from an entity that was painted with spray paint +[RegisterComponent, NetworkedComponent] +[Access(typeof(PaintRemoverSystem))] +public sealed partial class PaintRemoverComponent : Component +{ + /// Sound played when target is cleaned + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg"); + + [DataField] + public float CleanDelay = 2f; +} diff --git a/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs b/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs new file mode 100644 index 00000000000..ec2a2e0324a --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs @@ -0,0 +1,7 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +[Serializable, NetSerializable] +public sealed partial class PaintRemoverDoAfterEvent : SimpleDoAfterEvent; diff --git a/Content.Shared/Paint/PaintRemoverSystem.cs b/Content.Shared/Paint/PaintRemoverSystem.cs new file mode 100644 index 00000000000..e2565e0f220 --- /dev/null +++ b/Content.Shared/Paint/PaintRemoverSystem.cs @@ -0,0 +1,96 @@ +using Content.Shared.Popups; +using Content.Shared.Interaction; +using Content.Shared.DoAfter; +using Content.Shared.Verbs; +using Content.Shared.Sprite; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; + +namespace Content.Shared.Paint; + +public sealed class PaintRemoverSystem : SharedPaintSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent>(OnPaintRemoveVerb); + } + + + private void OnInteract(EntityUid uid, PaintRemoverComponent component, AfterInteractEvent args) + { + if (args.Handled + || !args.CanReach + || args.Target is not { Valid: true } target + || !HasComp(target)) + return; + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + BreakOnDamage = true, + MovementThreshold = 1.0f, + }); + args.Handled = true; + } + + private void OnDoAfter(EntityUid uid, PaintRemoverComponent component, DoAfterEvent args) + { + if (args.Cancelled + || args.Handled + || args.Args.Target == null + || args.Target is not { Valid: true } target + || !TryComp(target, out PaintedComponent? paint)) + return; + + paint.Enabled = false; + _audio.PlayPredicted(component.Sound, target, args.User); + _popup.PopupClient(Loc.GetString("paint-removed", ("target", target)), args.User, args.User, PopupType.Medium); + _appearanceSystem.SetData(target, PaintVisuals.Painted, false); + RemComp(target); + Dirty(target, paint); + + args.Handled = true; + } + + private void OnPaintRemoveVerb(EntityUid uid, PaintRemoverComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var verb = new UtilityVerb() + { + Text = Loc.GetString("paint-remove-verb"), + Act = () => + { + _doAfter.TryStartDoAfter( + new DoAfterArgs( + EntityManager, + args.User, + component.CleanDelay, + new PaintRemoverDoAfterEvent(), + uid, + args.Target, + uid) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + BreakOnDamage = true, + MovementThreshold = 1.0f, + }); + }, + }; + + args.Verbs.Add(verb); + } +} diff --git a/Content.Shared/Paint/PaintedComponent.cs b/Content.Shared/Paint/PaintedComponent.cs new file mode 100644 index 00000000000..3d2deee45e3 --- /dev/null +++ b/Content.Shared/Paint/PaintedComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Paint; + +/// Component applied to target entity when painted +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class PaintedComponent : Component +{ + [DataField, AutoNetworkedField] + public Color Color = Color.FromHex("#2cdbd5"); + + /// Used to remove the color when the component is removed + [DataField, AutoNetworkedField] + public Color BeforeColor; + + [DataField, AutoNetworkedField] + public bool Enabled; + + // Not using ProtoId because ShaderPrototype is in Robust.Client + [DataField, AutoNetworkedField] + public string ShaderName = "Greyscale"; +} + +[Serializable, NetSerializable] +public enum PaintVisuals : byte +{ + Painted, +} diff --git a/Content.Shared/Paint/SharedPaintSystem.cs b/Content.Shared/Paint/SharedPaintSystem.cs new file mode 100644 index 00000000000..4707e942777 --- /dev/null +++ b/Content.Shared/Paint/SharedPaintSystem.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.Paint; + +public abstract class SharedPaintSystem : EntitySystem +{ + public virtual void UpdateAppearance(EntityUid uid, PaintedComponent? component = null) { } +} diff --git a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs index 529e321f8da..fa04a50f8b0 100644 --- a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs +++ b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Doors.Components; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Paint; using Content.Shared.SprayPainter.Components; using Content.Shared.SprayPainter.Prototypes; using Robust.Shared.Audio.Systems; @@ -129,6 +130,8 @@ private void OnAirlockInteract(Entity ent, ref Intera return; } + RemComp(ent); + var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.AirlockSprayTime, new SprayPainterDoorDoAfterEvent(sprite, style.Department), args.Used, target: ent, used: args.Used) { BreakOnTargetMove = true, diff --git a/Resources/Locale/en-US/paint/paint.ftl b/Resources/Locale/en-US/paint/paint.ftl new file mode 100644 index 00000000000..200b1f6e3f3 --- /dev/null +++ b/Resources/Locale/en-US/paint/paint.ftl @@ -0,0 +1,8 @@ +paint-success = {THE($target)} has been covered in paint! +paint-failure = Can't cover {THE($target)} in paint! +paint-failure-painted = {THE($target)} is already covered in paint! +paint-empty = {THE($used)} is empty! +paint-removed = You clean off the paint! +paint-closed = You must open {THE($used)} first! +paint-verb = Paint +paint-remove-verb = Remove Paint diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index 68bb4a6b849..771c05db0df 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -68,6 +68,16 @@ category: cargoproduct-category-name-fun group: market +- type: cargoProduct + id: FunSprayPaints + icon: + sprite: Objects/Fun/spraycans.rsi + state: death2_cap + product: CrateFunSprayPaints + cost: 2000 + category: Fun + group: market + - type: cargoProduct id: FunParty icon: diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index b55bdd48322..a6f12bc727e 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -248,14 +248,21 @@ contents: - id: SnapPopBox - id: CrazyGlue - amount: 2 - id: PlasticBanana + - id: FunnyPaint + orGroup: Paint + prob: 0.5 + - id: FunnyPaintYellow + orGroup: Paint + prob: 0.5 - id: WhoopieCushion - id: ToyHammer - id: MrChips - orGroup: GiftPool + prob: 0.5 + orGroup: Dummy - id: MrDips - orGroup: Giftpool + prob: 0.5 + orGroup: Dummy - id: RevolverCapGun - id: BalloonNT - id: ClothingShoesClownLarge @@ -288,6 +295,41 @@ amount: 15 prob: 0.05 +- type: entity + id: CrateFunSprayPaints + name: spray paint crate + description: a crate filled with spray paint. + parent: CratePlastic + suffix: Spray Paint + components: + - type: StorageFill + contents: + - id: SprayPaintBlue + amount: 2 + prob: 0.33 + - id: SprayPaintRed + amount: 2 + prob: 0.33 + - id: SprayPaintOrange + amount: 2 + prob: 0.33 + - id: SprayPaintBlack + amount: 2 + prob: 0.33 + - id: SprayPaintGreen + amount: 2 + prob: 0.33 + - id: SprayPaintPurple + amount: 2 + prob: 0.33 + - id: SprayPaintWhite + amount: 2 + prob: 0.33 + - id: DeathPaint + amount: 2 + - id: DeathPaintTwo + amount: 2 + - type: entity name: dartboard box set description: A box with everything you need for a fun game of darts. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index eaf35667ef9..feaedd924a0 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -157,6 +157,10 @@ prob: 0.25 - id: StrangePill prob: 0.20 + - id: DeathPaint + prob: 0.05 + - id: DeathPaintTwo + prob: 0.05 - id: DrinkMopwataBottleRandom prob: 0.20 - id: ModularReceiver diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml index ae7e5bcf762..883182aae8d 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml @@ -44,6 +44,7 @@ - CrateMaterialPlastic - CrateMaterialWood - CrateMaterialPlasteel + - CrateFunSprayPaints - CrateFunArtSupplies - CrateEngineeringCableLV - CrateEngineeringCableMV diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 4c820998ea2..32594392587 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -176,7 +176,12 @@ - MaterialCloth10 - MaterialWoodPlank10 - ResearchDisk + - DeathPaint - Plunger + - SprayPaintBlue + - SprayPaintRed + - SprayPaintGreen + - SprayPaintOrange - TechnologyDisk - PowerCellMedium - PowerCellSmall diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 2778bf12788..6138bc6e96f 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -71,6 +71,7 @@ tags: - Carp - DoorBumpOpener + - NoPaint - type: ReplacementAccent accent: genericAggressive - type: Speech diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index d466a34383d..c3706cea2a5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -109,3 +109,6 @@ - TelepathyPower - type: LanguageSpeaker - type: UniversalLanguageSpeaker + - type: Tag + tags: + - NoPaint diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index 6d90ac3ffee..7bb8547cfab 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -104,6 +104,7 @@ - type: Tag tags: - CannotSuicide + - NoPaint # From the uplink injector - type: entity @@ -223,6 +224,7 @@ tags: - CannotSuicide - FootstepSound + - NoPaint - type: Inventory templateId: holoclown - type: Hands diff --git a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml new file mode 100644 index 00000000000..1b417f6cde0 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml @@ -0,0 +1,292 @@ +# Base Paints +- type: entity + parent: BaseItem + id: PaintBase + name: spray paint + description: A tin of spray paint. + noSpawn: true + components: + - type: Appearance + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: clown_cap + layers: + - state: clown_cap + map: ["enum.OpenableVisuals.Layer"] + - type: Paint + consumptionUnit: 10 + blacklist: + tags: + - NoPaint + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: SolutionContainerManager + solutions: + drink: + maxVol: 50 + reagents: + - ReagentId: SpaceGlue + Quantity: 50 + - type: TrashOnSolutionEmpty + solution: drink + - type: Sealable + - type: Openable + sound: + path: /Audio/Effects/pop_high.ogg + closeable: true + closeSound: + path: /Audio/Effects/pop_high.ogg + +# Paints + +# funnypaint +- type: entity + parent: PaintBase + id: FunnyPaint + name: funny paint + description: A tin of funny paint, manufactured by Honk! Co. + components: + - type: Paint + color: "#fa74df" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: clown + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "clown"} + False: {state: "clown_cap"} + +- type: entity + parent: PaintBase + id: FunnyPaintYellow + name: funny paint + description: A tin of funny paint, manufactured by Honk! Co. + components: + - type: Paint + color: "#d5e028" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: clown + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: clown2_cap + layers: + - state: clown2_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "clown2"} + False: {state: "clown2_cap"} + +#death paint +- type: entity + parent: PaintBase + id: DeathPaint + components: + - type: Paint + color: "#ff20c8" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: death_cap + layers: + - state: death_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "death"} + False: {state: "death_cap"} + +- type: entity + parent: PaintBase + id: DeathPaintTwo + components: + - type: Paint + color: "#ff2020" + - type: Item + sprite: Objects/Fun/spraycans.rsi + heldPrefix: spray + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + state: death2_cap + layers: + - state: death2_cap + map: ["enum.OpenableVisuals.Layer"] + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "death2"} + False: {state: "death2_cap"} + +#Sprays + +#Blue +- type: entity + parent: PaintBase + id: SprayPaintBlue + suffix: Blue + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#5890f7" + - type: Paint + color: "#5890f7" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#5890f7"} + False: {state: "spray_cap_colors" , color: "#5890f7"} + +#Red +- type: entity + parent: PaintBase + id: SprayPaintRed + suffix: Red + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#ff3b3b" + - type: Paint + color: "#ff3b3b" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#ff3b3b"} + False: {state: "spray_cap_colors" , color: "#ff3b3b"} + +#Green +- type: entity + parent: PaintBase + id: SprayPaintGreen + suffix: Green + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#73f170" + - type: Paint + color: "#73f170" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#73f170"} + False: {state: "spray_cap_colors" , color: "#73f170"} + +#Black +- type: entity + parent: PaintBase + id: SprayPaintBlack + suffix: Black + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#3a3a3a" + - type: Paint + color: "#3a3a3a" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#3a3a3a"} + False: {state: "spray_cap_colors" , color: "#3a3a3a"} + +#Orange +- type: entity + parent: PaintBase + id: SprayPaintOrange + suffix: Orange + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#f6a44b" + - type: Paint + color: "#f6a44b" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#f6a44b"} + False: {state: "spray_cap_colors" , color: "#f6a44b"} + +#Purple +- type: entity + parent: PaintBase + id: SprayPaintPurple + suffix: Purple + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#c063f5" + - type: Paint + color: "#c063f5" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#c063f5"} + False: {state: "spray_cap_colors" , color: "#c063f5"} + +#White +- type: entity + parent: PaintBase + id: SprayPaintWhite + suffix: White + components: + - type: Sprite + sprite: Objects/Fun/spraycans.rsi + layers: + - state: spray + map: ["Base"] + - state: spray_cap_colors + map: ["enum.OpenableVisuals.Layer"] + color: "#f2f2f2" + - type: Paint + color: "#f2f2f2" + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: {state: "spray_colors" , color: "#f2f2f2"} + False: {state: "spray_cap_colors" , color: "#f2f2f2"} diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index e318d7b188d..388ed24ae7a 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -15,6 +15,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: Material - type: Damageable damageContainer: Inorganic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index f486125ff68..95ecd3fe324 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -15,6 +15,7 @@ tags: - Sheet - Metal + - NoPaint - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index ae6770d631d..c0d686e2999 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -12,6 +12,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible @@ -110,6 +111,7 @@ - type: Tag tags: - Sheet + - NoPaint - type: UserInterface interfaces: enum.RadialSelectorUiKey.Key: @@ -145,6 +147,7 @@ tags: - Plastic - Sheet + - NoPaint - type: Material - type: PhysicalComposition materialComposition: diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index c72e503b498..fde9aa692d6 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -12,6 +12,7 @@ - type: Tag tags: - RawMaterial + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 78bbd32f174..99f9ccaa874 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -17,6 +17,9 @@ sound: /Audio/Weapons/star_hit.ogg - type: Stack count: 1 + - type: Tag + tags: + - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 5fe88f8d0cf..a5e08e9f542 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -65,6 +65,7 @@ solution: soap - type: DeleteOnSolutionEmpty solution: soap + - type: PaintRemover - type: FlavorProfile flavors: - clean diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 37b2b03d9e7..72b43296af7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -80,6 +80,9 @@ enabled: false reflectProb: 0.5 minReflectProb: 0.25 + - type: Tag + tags: + - NoPaint - type: IgnitionSource temperature: 700 @@ -171,6 +174,7 @@ - type: Tag tags: - Write + - NoPaint - type: DisarmMalus malus: 0 diff --git a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml index cc69a6304d1..0876502e675 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml @@ -31,6 +31,9 @@ sound: path: /Audio/Ambience/Objects/fireplace.ogg - type: AlwaysHot + - type: Tag + tags: + - NoPaint - type: entity id: LegionnaireBonfire diff --git a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml index f9bf81695e9..7d5870bb019 100644 --- a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml +++ b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml @@ -25,6 +25,9 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Tag + tags: + - NoPaint - type: entity id: HoloFan diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 68a0cbd38e4..82a19211fcf 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -91,6 +91,9 @@ - type: GuideHelp guides: - Botany + - type: Tag + tags: + - NoPaint - type: entity parent: hydroponicsTray diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 6cb813ba800..e7f20f8f47b 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -946,6 +946,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoPaint + - type: Tag id: NozzleBackTank diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg b/Resources/Textures/Interface/VerbIcons/paint.svg new file mode 100644 index 00000000000..78a56e3570a --- /dev/null +++ b/Resources/Textures/Interface/VerbIcons/paint.svg @@ -0,0 +1,39 @@ + + + + + + diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bd88245f2ab069dbf5a39850a866af0c5dc174 GIT binary patch literal 15653 zcmeI3Ym6J!6@c$%At6fwD^Z{%uuL393Tejkve)auHrd!ob^#~b&7$l^6=XbfZ4a?$ zoSE^icLQO0mqGyXgEvtlDvC%zAkn5$c`8a@KR`fGMTH1e8(?XniJ&}$1l*bN^RD+2 zK_vcM%O3mObI&>Ve&?R!`7^f-ZQQW9Ye^RXVDaEUY8ZX5aX+WcN7pCx9q*v8g{6Tp z8-NRLbw3?<9X$>KxOkO5GU|+`FPBxb7*sSf1A~=f3C#u|c1fkAsN12#WMED=;(`DD z@x=h6Yw^IAaGFn-k}$6iOj&UA)W#8YYP%ZM0+%GZVig%VC_+bJD#e0f%awS*^DCp@ z?l2c%yeZE1c%a`6$c(0kn51bzCLHW#RlYaEM4~|<9EpS?s~M3O!W=Jg63>c~9OC7W z$W&i}L>KxMv$U){oLXNEhopEQ?>Hry<0d91f)i5Ev~rvfjYc_Mg|JMlok4OD+s_f;&_0~vOe9iqrploBTdd9Iz2rq*pr zWvk#VO;b5ofJJCHHnJ1i+LiLAW7>Ihj*xZroPkkJhV@+DvFq{MuG#YDv|R%7kWQ1W zi^aBugabg z<-_PbBJ|3l^fO+NdA`YmKMiw`HZ?svS#uC#dC_&i^Kv*OhoW13^QK9-IjTHOag^_J z&^)clg{I0`(<&-XLN6*g$d!y-jB5hvH6m++G<$_}5;(-dQ z!K_j)IDtem$umRcOhH$flvz}CgGoV6R~4^5tLI5|^Q4bMRC+}d9SOJEOP-D9nQ&9k zGQAYXIJcw=dg~he(blDTdz-b5SiQ{Tq**X6L>nfg7}svNiAcTl%>G|h4MqM=|}ffstSqQ-{9s>Eth6fBd;s;r=9#7L-5vzZbuw8|-Se054j$BE zT+3)#&A8*Rs9&9t~OehxY&!OXSB8|`Y+G>Wo zZ(n&QB@4DP{=;%`VkPxGa?qwn|9Ba2S^Lq|JnFKj3vsoBTN^mBr1`0At*Ba+&aS|i z`?oBk>P3gi>)Ht+#?2aQME2*8x>Z;xdsQYxMIOC4!M#>(oAtQu*mu}A>v7wL=@o|V zB*bbsY`DqFy?gNg3pS%$WtivVor!L$??281k9Tx33&mg2&IkVT4%%m>p_To@3tNO6(*U|Na`140%lE;1iXOL1X9 z$Rfo>=7VV|E({1+q`1g@FfGM}0U?VN7nu*HrMNI4WRc<`^TD(f7Y2kZQe0#{n3m$g zfRIIsi_8bpQd}4ivPf}}`CwX#3j;zHDK0V}OiOWLK*%D+MdpKPDJ~2MS){ngd@wD= zg#jUp6c?Efrlq(rAY_r^BJ;tt6c+}BEK*!#KA4u`!hn!PBCf8+1F+CQPrXi{$6Mb! zmwOC78q25y!)XAfRsb-4BLH81gT7|~DDwb(xD5dLegMuj@44#GdH_1ggQ@`d;nH-J03Zr|Ct&;EP&wwn%Znb)2De;!;OJaeCP>1qFb`z&qb zg)8@-^X`%LZ){q!ck-1BpXgZqbmESl&P`|DK7V@ADIfoI-Z{G~r|l^uJHXQD`dFJrr zYaZS8?4R>VcFlroKUneXvSrhEzG~gOYt5<*A7mc6YOA>XZxXv~Xw}p^pRE1e-k*Ri zrS~5^-uH*Y_pQ)xy78qiuK-iITc3L1-+S`XlSgL0{?D<$Ja+2N$%Dtaf!HnY9TInZ z)bZ|<2bV7FeDvz;xy2v6_Sfs5(R#+um`?6F@bIGFb{so;PtTRY>VL&{pML1-rJp4h p2EWO5KELuJFpt6C3+_AuIgtw=ow{Om$WDZhO1a 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 Lg-7S^{K9_#hzGN8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..27b68e2cfe5d2b364b379707b887bdfcb115eeb8 GIT binary patch literal 20783 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json index 0f883ee2801..f34820cec45 100644 --- a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json @@ -58,9 +58,6 @@ { "name": "spray" }, - { - "name": "spray_cap" - }, { "name": "spray_cap_colors" }, @@ -70,6 +67,22 @@ { "name": "equipped-BELT", "directions": 4 + }, + { + "name": "clown-inhand-right", + "directions": 4 + }, + { + "name": "clown-inhand-left", + "directions": 4 + }, + { + "name": "spray-inhand-right", + "directions": 4 + }, + { + "name": "spray-inhand-left", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3ad959de4138922ea09c84316ad9369fedf403 GIT binary patch literal 21199 zcmeI4eT*bU6~G%61ILFZ5K;bdTr`SUJN3~YRm1GS-tL`u35)0667CKYuDYsvuVr_7 zn3=oXJBb1O!)S=2Mx!SZC4MAEi5mFBaK=P}e+c}c5s4o$l3-MVL5+!GqWF4xW~ygy z_O6-RC?q|}?$&m{_p18$>f^mPllj=b8{d1$jw^RKj&sT0J&Vim_xkkbg4e_EZ^pO( z7XDn=+H)H5wvKAci@W>X!GCizN4nisty(^2iX)s2&8CABNV z6sw!ERVA~yI!Q^Zp-$^)d#yJ#t*U0ttea-H1A1hlUh7EGO*%)CExH`u-m+ux$7;) zVJE$_B?Pk>Z=sgn$<%stDsy!mpw$-IMs}0-N|LNKvgx{S;ET$_LT`Fj-gR@_)X7HY z>Uwot#ZDY+%`D2UX;2Jvkzj=B3h`>ptC8RuOllbCjAW8yHkJ|{N5=;?7$Ou=u|oVB zp*6w}W$HPhadlXOT6X2x4CKXfCbX(WNqb#(8}YhaHPu#gwO+LsbCSbJSzAcfk~WOU zG+4bl>GDLa#Y7!VSH*l&nGU$1lXDF?sJHHS%GJ@UgBxpcgY4!zcM6Z~a+%;e7sx!_ zIq!SEhv(;oPj~ZrHC^E#XnXJby?;I1wsfLmU9+RcK9`=N24NF&M2Im+a_S=?IK@n0 z#)LbqX{Ds0U`zQN<_0kug&2M*-(Vt`%dt>Xnq~nDa3lmWzKSx_TzMW+t}vWN+NU&} z(zGk7#*s8gxIm>hY929)A`(hXv1>4%7Kq0~!hMR730!x3M;&OUSx6+9R$iaA0X{0= zfuuB&jL<282(664J_Xh$*xpeKqgfP!)zFBrZ`u%o!a&2bP$nX8S~n`J^x zp;j(3A=1B#?)T*)<$2$}XMFp=>+;Y!2; z+22&*6u?MuDLmM4xsiIx84^)K8HX9-`T)GQsY)CHp9mX|F-3!LYSSKtg9^4M7+`;) zzx+|J#t<82M`N!ETaV<@_Yw2_2)UsP2O{PSaiWcc(~`UV?1umZPqP{hThDi;;=&-G z1tDU-3rDPy9@21@D3?eTndq!s2gbq>he}5T$;b$#JvV}*Is_;AAsFMX;lwL!Eb@pJ zF7^=(xkR3XQwdH_j(qAXjTKjc5XFs24l$r2$OknTUOGnum!ODY8YxTxC&WvWf|Ts) zXz-Jdtj-iVrE%!eQf+Uu)0Gfe?Okl7q+-Ah@r&{`48`|!fUtB!Bp6jFfOs+T!yr)F z??soR>Nb4pn;!HIrnd;8VE5#a2ABALZw7*Yg@!nX7&r6{_&WlM**J5?PV4A>?HCeM zxt5a|cs)?y4CQGQ1rbaf=6Wb}!Syh$m`j*zL?8!UOfYj=S9{_#1U)_)EA~Rr{pR-3 zt2PAfrI0Pz?wB+|nwuG9NW+{ni#PjGXD`vJNtGs_4V9)H2A259RXePqW<3*#Pj_cA z1gEKQ-N(ie(>zn!l9}pBZEd8JMBNS9HuI|x+84>FGOMF%@c> zU_KX~z!8SpNVzD7fk9RvTZ_*j2svk`u|RPG6(&R#WL!LiKwd~6PC*rTjC)}erM0rD zoR(HS-L&e-+!~|hPP&ad=~*_ml2&EFnZJ$Po-{Oxg7t9es1?l$24qTXP}F6Xq;x0$ndL-)f+D@?=pJO;(b@yp{H z`{GTrc3?4vcSAdAama_Dsi!l3W1`~0trT-N`ij}I$$bc-=a}p&e8d7i-BBHWyd&o` zyHjp^%RbSzo3;kaPArQ8trAxONLHl8WmyzxmADE(vLYoe%c4N5#8m*26)AC976n=* zt^$y(NQuj`D9|c#6@X+#N?evjfmVsD03<6?;<79Xv`SnBAX$+Tmt|3)RpKfD$%>S? zEQ)qoTJ!ro;&O~wa+`w70IV>eQY<#zOZ+3er5Al&;RnfmpqCu zUi|6)d*4Fux$?-Tp*^Ug1S?#}!7{0M*M3s<-6 zm)Aji^mTaopZYrfLI}hLeU!MjguK)l5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..353e47c56fa71b948a6443d4a3a850de2edcb5c0 GIT binary patch literal 21213 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 diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 156e5d27014..cc2301558aa 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -1,6 +1,14 @@  False False + HINT + SUGGESTION + SUGGESTION + SUGGESTION + SUGGESTION + SUGGESTION + WARNING + WARNING WARNING WARNING WARNING @@ -34,24 +42,58 @@ WARNING WARNING WARNING - SUGGESTION - Required - Required - Required - Required - RequiredForMultiline - Required - Required - Required + WARNING + NotRequired + NotRequired + NotRequired + NotRequired + NotRequiredForBoth + NotRequired + NotRequired + NotRequired + ExpressionBody + Join + ExpressionBody + TargetTyped + True + False NEXT_LINE NEXT_LINE + False + False NEXT_LINE + 2 + 2 + 2 + 1 NEXT_LINE + TOGETHER_SAME_LINE + True + True + True + True + True + True + USUAL_INDENT + USUAL_INDENT INDENT NEXT_LINE NEXT_LINE + False + False + True + False + True NEXT_LINE + IF_OWNER_IS_SINGLE_LINE + NEVER + False NEXT_LINE + True + True + True + True + False AABB AL BB From cfdc273a900c04590b0005d9bd4cf46bab5768d9 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Fri, 15 Nov 2024 10:08:16 -0400 Subject: [PATCH 008/182] Bounties Localization Fix (#1219) # Description The grammar and spelling police came... they took your mistakes (some). --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: VMSolidus Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- Resources/Locale/en-US/cargo/bounties.ftl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Resources/Locale/en-US/cargo/bounties.ftl b/Resources/Locale/en-US/cargo/bounties.ftl index b332517c70d..966fb271b40 100644 --- a/Resources/Locale/en-US/cargo/bounties.ftl +++ b/Resources/Locale/en-US/cargo/bounties.ftl @@ -86,7 +86,7 @@ bounty-description-flower = Commander Zot really wants to sweep Security Officer bounty-description-galaxythistle = After a particularly nasty foam backpressure from a scrubber, a high-ranking officer got badly poisoned. Send us some galaxythistle so we can prepare him a homeopathic remedy. bounty-description-handcuffs = A large influx of escaped convicts have arrived at Central Command. Now is the perfect time to ship out spare handcuffs (or restraints). bounty-description-instrument = The hottest new band in the galaxy, Cindy Kate and the Saboteurs, lost their gear in a cargo shuttle collision. Send them a new set of instruments so they can play their show. -bounty-description-knife = One of our top commanders recently won a brand new set of knives on an official Nanotrasen gameshow. Unforunately, we don't have a set on hand. Send us a bunch of sharp things so we can throw something together, +bounty-description-knife = One of our top commanders recently won a brand new set of knives on an official Nanotrasen gameshow, but, unforunately, we don't have a set on hand. Send us a bunch of sharp things so we can throw something together. bounty-description-lemon = Dr Jones's kid is starting up a lemonade stand. Small issue: lemons don't get shipped to this sector. Fix that for a nice reward. bounty-description-lime = After a heavy drinking session, Admiral Pastich developed a strong addiction to fresh lime wedges. Send us some limes so we can prepare him his new favorite snack. bounty-description-lung = The pro-smoking league has been fighting to keep cigarettes on our stations for millennia. Unfortunately, they're lungs aren't fighting so hard anymore. Send them some new ones. @@ -118,17 +118,17 @@ bounty-description-lasergun = The Salvage Caravan requests a large shipment of l bounty-description-food = After the rat king invasion, a neighboring unathi station was left completely without food. A large meat food shipment is needed. bounty-description-fruit = A heroic monkey helped the chaplain catch a troublemaker hiding in the chapel, and the crew wants to reward him for his good work. bounty-description-vegetable = The new chef is a vegetarian, and botany can't keep up with their demands. We need some additional veggies to help keep things stocked. -bounty-description-chili = Today's the Centcomm Chili Cookoff, and, well, a few of us forgot to make some. Please help cover for us. +bounty-description-chili = Today's the CentComm Chili Cookoff, and, well, a few of us forgot to make some. Please help cover for us. bounty-description-rollerskates = CentComm Security is proposing a new strategy for helping officers win foot pursuits. Send them a couple so they cna learn how bad an idea this is. bounty-description-bedsheet = Someone in Atmos keeps turning down the heater, and we're all shivering in our beds. Please send us some extra sheets to stay warm. bounty-description-bandana = Bzzzt... Transmission from prison planet OC-1001: We're... reorganizing our command structure. Send us some bandanas so we can tell gan- I mean, departments apart. bounty-description-steak = The vegetarian cook is refusing to make us anything with meat, and the lizards are getting restless. Can you smuggle us a few steaks to keep them happy? bounty-description-banana = Hi station! Botany won't gimme any more. They said slipping the HoS out an open airlock wasn't funny! Can you believe it? Help me out! HONK. bounty-description-beer = Some nefarious agent has stolen every single drink in the bar. Yes, everything. Help tide us over until we can find them. -bounty-description-hi-viz-vest = The clown stole the AME controller and won't back. It's pretty dark in here. Some hi-viz vests would make seeing each other in the dark a little mroe bearable. +bounty-description-hi-viz-vest = The clown stole the AME controller and won't bring it back. It's pretty dark in here. Some hi-viz vests would make seeing each other in the dark a little more bearable. bounty-description-torch = The chef made all the monkeys and kobolds at once, and they rebelled and took over the cargo shuttle. They're demanding supplies and free passage to a jungle planet, and we're giving in to their demands. All they need now is a few torches. bounty-description-medkit-box = CentComm is putting on a play set in a hospital, and needs some props. Just send us some empty medkit boxes, and the show will go on! bounty-description-cardobard-box = "The Cardborgs Cometh" is a new play premiering tomorrow, and the costuming team is woefully unprepared. Send us some boxes to work with. -bounty-description-wine = The new librarian and the Quartermaster are falling head over heels for each other after she caught him disassembling the bookshelves for wood. Send a couple bottles of wine (Or cans, if you must) to help make the date go well. +bounty-description-wine = The new cataloger and the Logistics Officer are falling head over heels for each other after she caught him disassembling the bookshelves for wood. Send a couple bottles of wine (Or cans, if you must) to help make the date go well. bounty-description-cotton-boll = A massive swarm of mothroaches ate all the paper and cloth on the station. Send us some cotton to help keep our winged crewmembers fed. bounty-description-microwave-machine-board = Mr. Giggles thought it'd be funny to stick forks in all the kitchen microwaves. Help us replace them before the chefs start making clown burgers. From 45fdd0c055e5da8773d6b8f1ef569495910bc420 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 15 Nov 2024 14:08:39 +0000 Subject: [PATCH 009/182] Automatic Changelog Update (#1222) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3e56d6acfb5..cfc812ba197 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7905,3 +7905,10 @@ Entries: id: 6520 time: '2024-11-14T20:03:33.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1223 +- author: DEATHB4DEFEAT + changes: + - type: Add + message: Added spray-painting back + id: 6521 + time: '2024-11-15T14:08:04.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1222 From a505ed782c2c9e868eea70b44ec24aa4d2b18698 Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Fri, 15 Nov 2024 19:03:15 -0800 Subject: [PATCH 010/182] Change some Code Style Settings (#1226) From 71185a7e7ff12d91b30f1b319107786b4e77ac8d Mon Sep 17 00:00:00 2001 From: zelezniciar1 <39102800+zelezniciar1@users.noreply.github.com> Date: Sat, 16 Nov 2024 17:41:37 -0500 Subject: [PATCH 011/182] Give Penguins Cold Resistance (#1229) # Description This PR is intended to fix the issue of pengiuns dying to cold damage on planetary maps like Glacier. It adds a atmosTemperatureTransferEfficiency modifier to the pengiun mod YAML. Reported on Grimbly, fix from [Floof](https://github.com/Fansana/floofstation1/pull/302/files) --- # TODO n/a ---

Media

n/a

--- # Changelog :cl: zelezniciar - fix: Fixed pengiun cold resistance --- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index d192794ea95..2a29ca1b77b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -2094,6 +2094,7 @@ factions: - Passive - type: Temperature + atmosTemperatureTransferEfficiency: 0.04 heatDamageThreshold: 335 coldDamageThreshold: 230 currentTemperature: 310.15 From 1c202993ed0986f72205c31a14176f4fbb8e1420 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 16 Nov 2024 22:42:02 +0000 Subject: [PATCH 012/182] Automatic Changelog Update (#1229) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index cfc812ba197..5a868f558fb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7912,3 +7912,10 @@ Entries: id: 6521 time: '2024-11-15T14:08:04.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1222 +- author: zelezniciar + changes: + - type: Fix + message: Fixed pengiun cold resistance + id: 6522 + time: '2024-11-16T22:41:37.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1229 From 029b7631c7f0f4093cd8721ac120990ca0610f83 Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:32:30 -0400 Subject: [PATCH 013/182] Shitmed: Implementing Existing Newmed Code Into SS14 (#1159) # Description ## The mythical surgery system. Heard whispered in hushed tones in the corners of [REDACTED], it has been real since 2 years ago. If you listen very carefully you might be able to hear the sound of arachne crashing the server. Jokes aside. Lets set some expectations, ideally this will not mess too much with existing body code, besides trying to not die from all the fucking test fails, all the while introducing needed systems for handling wounds, surgery, part/organ manipulation, and displaying all of those to the players. The PR in its current state **is** working properly, you can pick it up and get surgery on your server today, though of course its buggy due to the unhandled issues it has right now. If you do pick it up, give me a heads up and I'll see if I can help you out. This PR is mostly intended as a public roasting ground for my shitcode, so that other contribs/maints can pitch in to help improve it as well. --- # TODO - [ ] FIX MY FUCKING SHITCODE AAAAAAAAAAAAAAAAAAAAAAAAAA - [x] Have fun :) --- # Demo/Walkthrough

[![Surgery Demo](https://i.ytimg.com/vi/UhxS5b3LC-A/maxresdefault.jpg)](https://www.youtube.com/watch?v=UhxS5b3LC-A "Surgery Demo")

--- # Tasks currently being worked on: - [x] Porting an upgraded body doll that is less shit to use. - [x] Add a completely innocuous felinization/defelinization surgery. (Highly sought after feature :D ) - [x] Implement pizza limb sprites and add em as a surgery (soon :tm:) - [ ] Add CyberneticsSystem - [ ] Add a series of cybernetic limbs with special properties, and different susceptibilities to EMPs - [ ] Add the associated surgeries to cybernetic implants and their associated maintenance. - [ ] Tweak Cybernetics Traits to use CyberneticsSystem, and overwrite the entity's limbs on spawn (I LOVE SHITCODE) - [ ] Add Cybernetic Limbs to Research - [x] Start adding a shitload of Shitmed comments on wherever I made changes, since we're getting fairly close to what I could call a stable v1 - [ ] Refactor SurgeryBUI to be slightly less shitcodey, and properly use BUI states instead of a half-assed BUIMessage. - [ ] Separate harpy wings into two distinct wings rather than a single layer. --- # Reported bugs that I haven't been able to replicate - Apparently returning to the body kicks you back to the body instead of the entity that the brain is attached to? - Disconnecting and reconnecting after a brain/head transplant makes the client crash. Seems to be related to identity. - Transplanting a head sometimes makes it so that you cannot strip other entities. --- # Changelog :cl: Mocho - add: A week has passed. Surgery is here. --------- Signed-off-by: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: goet <6637097+goet@users.noreply.github.com> Co-authored-by: Saphire Lattice --- .../Body/Components/BrainComponent.cs | 3 + .../Body/Components/LungComponent.cs | 3 + .../Body/Components/StomachComponent.cs | 3 + Content.Client/Body/Systems/BodySystem.cs | 65 ++ Content.Client/Hands/Systems/HandsSystem.cs | 35 +- .../UI/HealthAnalyzerBoundUserInterface.cs | 7 + .../UI/HealthAnalyzerWindow.xaml | 220 ++++- .../UI/HealthAnalyzerWindow.xaml.cs | 126 ++- .../Humanoid/HumanoidAppearanceSystem.cs | 8 +- Content.Client/Input/ContentContexts.cs | 6 + .../Inventory/ClientInventorySystem.cs | 13 +- .../Inventory/InventorySlotsComponent.cs | 2 +- Content.Client/Medical/Surgery/SurgeryBui.cs | 358 +++++++++ .../Medical/Surgery/SurgeryStepButton.xaml | 4 + .../Medical/Surgery/SurgeryStepButton.xaml.cs | 16 + .../Medical/Surgery/SurgerySystem.cs | 11 + .../Medical/Surgery/SurgeryWindow.xaml | 23 + .../Medical/Surgery/SurgeryWindow.xaml.cs | 14 + .../Options/UI/Tabs/KeyRebindTab.xaml.cs | 8 + Content.Client/Stylesheets/StyleNano.cs | 54 ++ Content.Client/Targeting/TargetingSystem.cs | 102 +++ .../Screens/OverlayChatGameScreen.xaml | 2 + .../Screens/OverlayChatGameScreen.xaml.cs | 1 + .../Screens/SeparatedChatGameScreen.xaml | 2 + .../Screens/SeparatedChatGameScreen.xaml.cs | 1 + .../Systems/Alerts/Widgets/AlertsUI.xaml | 10 +- .../Inventory/InventoryUIController.cs | 4 +- .../PartStatus/PartStatusUIController.cs | 82 ++ .../PartStatus/Widgets/PartStatusControl.xaml | 57 ++ .../Widgets/PartStatusControl.xaml.cs | 50 ++ .../Targeting/TargetingUIController.cs | 82 ++ .../Targeting/Widgets/TargetingControl.xaml | 216 +++++ .../Widgets/TargetingControl.xaml.cs | 58 ++ .../Xenonids/UI/XenoChoiceControl.xaml | 17 + .../Xenonids/UI/XenoChoiceControl.xaml.cs | 26 + .../Tests/Shitmed/Body/SpeciesBUiTest.cs | 63 ++ .../Atmos/EntitySystems/BarotraumaSystem.cs | 4 +- Content.Server/Bed/Sleep/SleepingSystem.cs | 7 +- Content.Server/Body/Systems/BodySystem.cs | 57 +- Content.Server/Body/Systems/BrainSystem.cs | 24 +- .../Body/Systems/RespiratorSystem.cs | 3 +- .../Chemistry/ReagentEffects/HealthChange.cs | 8 +- .../Thresholds/Behaviors/GibBehavior.cs | 5 +- .../Thresholds/Behaviors/GibPartBehavior.cs | 19 + Content.Server/Execution/ExecutionSystem.cs | 4 +- Content.Server/Hands/Systems/HandsSystem.cs | 51 +- .../Components/HealthAnalyzerComponent.cs | 6 + Content.Server/Medical/CryoPodSystem.cs | 1 + Content.Server/Medical/HealingSystem.cs | 28 +- .../Medical/HealthAnalyzerSystem.cs | 71 +- .../Medical/Surgery/SurgerySystem.cs | 189 +++++ Content.Server/Targeting/TargetingSystem.cs | 54 ++ .../Traits/Assorted/LightweightDrunkSystem.cs | 2 +- .../Body/Events/AmputateAttemptEvent.cs | 7 + .../Body/Organ/DebrainedComponent.cs | 7 + Content.Shared/Body/Organ/EarsComponent.cs | 6 + Content.Shared/Body/Organ/EyesComponent.cs | 6 + Content.Shared/Body/Organ/HeartComponent.cs | 6 + Content.Shared/Body/Organ/LiverComponent.cs | 6 + .../Body/Organ/MarkingContainerComponent.cs | 15 + Content.Shared/Body/Organ/OrganComponent.cs | 20 +- Content.Shared/Body/Organ/TailComponent.cs | 6 + .../Body/Part/BodyPartAppearanceComponent.cs | 45 ++ Content.Shared/Body/Part/BodyPartComponent.cs | 111 ++- Content.Shared/Body/Part/BodyPartEvents.cs | 20 + .../Body/Systems/SharedBodySystem.Body.cs | 99 ++- .../Body/Systems/SharedBodySystem.Organs.cs | 11 + .../SharedBodySystem.PartAppearance.cs | 198 +++++ .../Body/Systems/SharedBodySystem.Parts.cs | 270 ++++++- .../Systems/SharedBodySystem.Targeting.cs | 503 ++++++++++++ .../Body/Systems/SharedBodySystem.cs | 5 +- Content.Shared/CCVar/CCVars.cs | 6 + .../Damage/Systems/DamageableSystem.cs | 54 +- .../Hands/Components/HandsComponent.cs | 1 + .../Hands/EntitySystems/SharedHandsSystem.cs | 2 + .../Events/ProfileLoadFinishedEvent.cs | 7 + .../Humanoid/HumanoidVisualLayersExtension.cs | 12 + .../SharedHumanoidAppearanceSystem.cs | 2 + Content.Shared/Input/ContentKeyFunctions.cs | 6 + .../Inventory/InventoryComponent.cs | 1 + .../Inventory/InventorySystem.Slots.cs | 52 +- .../Inventory/InventoryTemplatePrototype.cs | 5 + .../SurgeryCloseIncisionConditionComponent.cs | 6 + .../SurgeryLarvaConditionComponent.cs | 6 + .../SurgeryMarkingConditionComponent.cs | 27 + ...SurgeryOperatingTableConditionComponent.cs | 6 + .../SurgeryOrganConditionComponent.cs | 18 + .../SurgeryPartConditionComponent.cs | 17 + .../Conditions/SurgeryPartPresentCondition.cs | 6 + .../SurgeryPartRemovedConditionComponent.cs | 14 + .../Surgery/Conditions/SurgeryValidEvent.cs | 9 + .../SurgeryWoundedConditionComponent.cs | 7 + .../Effects/Complete/SurgeryCompletedEvent.cs | 7 + .../Complete/SurgeryRemoveLarvaComponent.cs | 6 + .../SurgeryDamageChangeEffectComponent.cs | 17 + ...rgerySpecialDamageChangeEffectComponent.cs | 14 + .../Step/SurgeryStepCavityEffectComponent.cs | 10 + .../Step/SurgeryStepEmoteEffectComponent.cs | 12 + .../Effects/Step/SurgeryStepSpawnEffect.cs | 13 + .../Step/SurgeryTendWoundsEffectComponent.cs | 20 + .../Surgery/OperatingTableComponent.cs | 6 + .../Surgery/SharedSurgerySystem.Steps.cs | 755 ++++++++++++++++++ .../Medical/Surgery/SharedSurgerySystem.cs | 283 +++++++ .../Medical/Surgery/StepInvalidReason.cs | 10 + .../Steps/Parts/BleedersClampedComponent.cs | 6 + .../Parts/BodyPartReattachedComponent.cs | 6 + .../Steps/Parts/BodyPartSawedComponent.cs | 6 + .../Steps/Parts/IncisionOpenComponent.cs | 6 + .../Parts/InternalBleedersClampedComponent.cs | 6 + .../Steps/Parts/OrganReattachedComponent.cs | 6 + .../Steps/Parts/PartRemovedComponent.cs | 6 + .../Steps/Parts/RibcageOpenComponent.cs | 6 + .../Steps/Parts/RibcageSawedComponent.cs | 6 + .../Steps/Parts/SkinRetractedComponent.cs | 6 + .../Steps/SurgeryAddMarkingStepComponent.cs | 34 + .../Steps/SurgeryAddOrganStepComponent.cs | 6 + .../Steps/SurgeryAddPartStepComponent.cs | 6 + .../Steps/SurgeryAffixOrganStepComponent.cs | 6 + .../Steps/SurgeryAffixPartStepComponent.cs | 6 + .../Steps/SurgeryCanPerformStepEvent.cs | 14 + .../SurgeryCutLarvaRootsStepComponent.cs | 6 + .../SurgeryRemoveMarkingStepComponent.cs | 29 + .../Steps/SurgeryRemoveOrganStepComponent.cs | 6 + .../Steps/SurgeryRemovePartStepComponent.cs | 6 + .../Steps/SurgeryRepeatableStepComponent.cs | 6 + .../Steps/SurgeryStepCompleteCheckEvent.cs | 4 + .../Surgery/Steps/SurgeryStepComponent.cs | 22 + .../Medical/Surgery/SurgeryComponent.cs | 18 + .../Medical/Surgery/SurgeryDoAfterEvent.cs | 18 + .../Surgery/SurgerySpeedModifierComponent.cs | 11 + .../Medical/Surgery/SurgeryStepDamageEvent.cs | 9 + .../Medical/Surgery/SurgeryStepEvent.cs | 7 + .../Medical/Surgery/SurgeryTargetComponent.cs | 10 + Content.Shared/Medical/Surgery/SurgeryUI.cs | 32 + .../Medical/Surgery/SurgeryUiRefreshEvent.cs | 14 + .../Medical/Surgery/Tools/BoneGelComponent.cs | 11 + .../Medical/Surgery/Tools/BoneSawComponent.cs | 10 + .../Surgery/Tools/BoneSetterComponent.cs | 6 + .../Medical/Surgery/Tools/CauteryComponent.cs | 10 + .../Surgery/Tools/HemostatComponent.cs | 10 + .../Surgery/Tools/ISurgeryToolComponent.cs | 11 + .../Surgery/Tools/RetractorComponent.cs | 10 + .../Medical/Surgery/Tools/ScalpelComponent.cs | 10 + .../Surgery/Tools/SurgeryToolComponent.cs | 16 + .../Surgery/Tools/SurgicalDrillComponent.cs | 10 + .../HealthAnalyzerScannedUserMessage.cs | 16 +- .../Systems/MobStateSystem.StateMachine.cs | 4 + .../Standing/SharedLayingDownSystem.cs | 6 +- Content.Shared/Targeting/Events.cs | 38 + .../Targeting/SharedTargetingSystem.cs | 26 + Content.Shared/Targeting/TargetBodyPart.cs | 31 + Content.Shared/Targeting/TargetIntegrity.cs | 13 + .../Targeting/TargetingComponent.cs | 59 ++ .../Weapons/Melee/MeleeWeaponComponent.cs | 12 + .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 4 +- .../Audio/Medical/Surgery/attributions.yml | 49 ++ Resources/Audio/Medical/Surgery/cautery1.ogg | Bin 0 -> 34770 bytes Resources/Audio/Medical/Surgery/cautery2.ogg | Bin 0 -> 16854 bytes Resources/Audio/Medical/Surgery/hemostat1.ogg | Bin 0 -> 15729 bytes Resources/Audio/Medical/Surgery/organ1.ogg | Bin 0 -> 18912 bytes Resources/Audio/Medical/Surgery/organ2.ogg | Bin 0 -> 18946 bytes .../Audio/Medical/Surgery/retractor1.ogg | Bin 0 -> 11537 bytes .../Audio/Medical/Surgery/retractor2.ogg | Bin 0 -> 9915 bytes Resources/Audio/Medical/Surgery/saw.ogg | Bin 0 -> 46750 bytes Resources/Audio/Medical/Surgery/scalpel1.ogg | Bin 0 -> 13736 bytes Resources/Audio/Medical/Surgery/scalpel2.ogg | Bin 0 -> 13098 bytes .../en-US/escape-menu/ui/options-menu.ftl | 8 + Resources/Locale/en-US/guidebook/guides.ftl | 4 + .../components/health-analyzer-component.ftl | 1 + Resources/Locale/en-US/mood/mood.ftl | 2 + Resources/Locale/en-US/surgery/surgery-ui.ftl | 12 + Resources/Prototypes/Body/Organs/felinid.yml | 24 + Resources/Prototypes/Body/Organs/human.yml | 15 + Resources/Prototypes/Body/Parts/animal.yml | 2 +- Resources/Prototypes/Body/Parts/base.yml | 55 +- Resources/Prototypes/Body/Parts/harpy.yml | 51 +- Resources/Prototypes/Body/Parts/shadowkin.yml | 2 +- Resources/Prototypes/Body/Parts/skeleton.yml | 31 +- Resources/Prototypes/Body/Parts/vox.yml | 2 +- .../Prototypes/Body/Prototypes/a_ghost.yml | 16 +- .../Prototypes/Body/Prototypes/human.yml | 32 +- .../Catalog/Fills/Backpacks/duffelbag.yml | 2 + .../Catalog/Fills/Crates/medical.yml | 4 +- .../Catalog/Fills/Lockers/heads.yml | 2 + Resources/Prototypes/Damage/containers.yml | 8 + Resources/Prototypes/Damage/modifier_sets.yml | 11 + .../DeltaV/Roles/Jobs/Security/brigmedic.yml | 2 + .../Entities/Clothing/Belt/belts.yml | 2 +- .../Entities/Debugging/debug_sweps.yml | 48 ++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 8 +- .../Entities/Mobs/Player/silicon_base.yml | 6 +- .../Prototypes/Entities/Mobs/Species/base.yml | 4 + .../Entities/Mobs/Species/skeleton.yml | 3 +- .../Entities/Mobs/Species/slime.yml | 2 + .../Circuitboards/Machine/production.yml | 14 + .../Objects/Specific/Medical/surgery.yml | 188 ++++- .../Furniture/Tables/operating_table.yml | 3 +- .../Entities/Structures/Machines/lathe.yml | 48 ++ .../Prototypes/Entities/Surgery/surgeries.yml | 539 +++++++++++++ .../Entities/Surgery/surgery_steps.yml | 563 +++++++++++++ .../Prototypes/EntityLists/Tools/surgery.yml | 8 +- Resources/Prototypes/Guidebook/medical.yml | 29 + Resources/Prototypes/Mood/genericNeeds.yml | 2 +- .../Mood/genericNegativeEffects.yml | 6 + Resources/Prototypes/Reagents/gases.yml | 16 +- .../Prototypes/Recipes/Lathes/medical.yml | 8 + .../Recipes/Lathes/rehydrateable.yml | 98 +++ .../Prototypes/Roles/Jobs/Medical/chemist.yml | 2 + .../Jobs/Medical/chief_medical_officer.yml | 2 + .../Roles/Jobs/Medical/medical_doctor.yml | 2 + .../Roles/Jobs/Medical/medical_intern.yml | 2 + .../Roles/Jobs/Medical/paramedic.yml | 2 + .../Roles/Jobs/Medical/senior_physician.yml | 2 + Resources/Prototypes/Species/misc.yml | 12 + .../Guidebook/Medical/OrganManipulation.xml | 51 ++ .../Guidebook/Medical/PartManipulation.xml | 51 ++ .../ServerInfo/Guidebook/Medical/Surgery.xml | 40 + .../Guidebook/Medical/UtilitySurgeries.xml | 24 + .../Textures/Interface/Ashen/target_doll.png | Bin 0 -> 422 bytes .../Interface/Clockwork/target_doll.png | Bin 0 -> 1219 bytes .../Interface/Default/target_doll.png | Bin 0 -> 422 bytes .../Interface/Minimalist/target_doll.png | Bin 0 -> 422 bytes .../Interface/Plasmafire/target_doll.png | Bin 0 -> 462 bytes .../Textures/Interface/Retro/target_doll.png | Bin 0 -> 383 bytes .../Interface/Slimecore/target_doll.png | Bin 0 -> 422 bytes .../Interface/Targeting/Doll/eyes.png | Bin 0 -> 5227 bytes .../Interface/Targeting/Doll/eyes_hover.png | Bin 0 -> 6856 bytes .../Interface/Targeting/Doll/groin.png | Bin 0 -> 5485 bytes .../Interface/Targeting/Doll/groin_hover.png | Bin 0 -> 6452 bytes .../Interface/Targeting/Doll/head.png | Bin 0 -> 5663 bytes .../Interface/Targeting/Doll/head_hover.png | Bin 0 -> 7153 bytes .../Interface/Targeting/Doll/leftarm.png | Bin 0 -> 5779 bytes .../Targeting/Doll/leftarm_hover.png | Bin 0 -> 6652 bytes .../Interface/Targeting/Doll/leftfoot.png | Bin 0 -> 5462 bytes .../Targeting/Doll/leftfoot_hover.png | Bin 0 -> 5476 bytes .../Interface/Targeting/Doll/lefthand.png | Bin 0 -> 5462 bytes .../Targeting/Doll/lefthand_hover.png | Bin 0 -> 6174 bytes .../Interface/Targeting/Doll/leftleg.png | Bin 0 -> 5488 bytes .../Targeting/Doll/leftleg_hover.png | Bin 0 -> 6185 bytes .../Interface/Targeting/Doll/mouth.png | Bin 0 -> 5219 bytes .../Interface/Targeting/Doll/mouth_hover.png | Bin 0 -> 5208 bytes .../Interface/Targeting/Doll/rightarm.png | Bin 0 -> 5773 bytes .../Targeting/Doll/rightarm_hover.png | Bin 0 -> 6592 bytes .../Interface/Targeting/Doll/rightfoot.png | Bin 0 -> 5454 bytes .../Targeting/Doll/rightfoot_hover.png | Bin 0 -> 5465 bytes .../Interface/Targeting/Doll/righthand.png | Bin 0 -> 5467 bytes .../Targeting/Doll/righthand_hover.png | Bin 0 -> 6207 bytes .../Interface/Targeting/Doll/rightleg.png | Bin 0 -> 5473 bytes .../Targeting/Doll/rightleg_hover.png | Bin 0 -> 5908 bytes .../Interface/Targeting/Doll/torso.png | Bin 0 -> 5284 bytes .../Interface/Targeting/Doll/torso_hover.png | Bin 0 -> 5672 bytes .../Targeting/Status/groin.rsi/groin_0.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_1.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_2.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_3.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_4.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_5.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_6.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_7.png | Bin 0 -> 157 bytes .../Targeting/Status/groin.rsi/groin_8.png | Bin 0 -> 178 bytes .../Targeting/Status/groin.rsi/meta.json | 38 + .../Targeting/Status/head.rsi/head_0.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_1.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_2.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_3.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_4.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_5.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_6.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_7.png | Bin 0 -> 140 bytes .../Targeting/Status/head.rsi/head_8.png | Bin 0 -> 155 bytes .../Targeting/Status/head.rsi/meta.json | 38 + .../Status/leftarm.rsi/leftarm_0.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_1.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_2.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_3.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_4.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_5.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_6.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_7.png | Bin 0 -> 144 bytes .../Status/leftarm.rsi/leftarm_8.png | Bin 0 -> 154 bytes .../Targeting/Status/leftarm.rsi/meta.json | 38 + .../Status/leftfoot.rsi/leftfoot_0.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_1.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_2.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_3.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_4.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_5.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_6.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_7.png | Bin 0 -> 145 bytes .../Status/leftfoot.rsi/leftfoot_8.png | Bin 0 -> 166 bytes .../Targeting/Status/leftfoot.rsi/meta.json | 38 + .../Status/lefthand.rsi/lefthand_0.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_1.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_2.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_3.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_4.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_5.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_6.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_7.png | Bin 0 -> 136 bytes .../Status/lefthand.rsi/lefthand_8.png | Bin 0 -> 152 bytes .../Targeting/Status/lefthand.rsi/meta.json | 38 + .../Status/leftleg.rsi/leftleg_0.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_1.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_2.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_3.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_4.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_5.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_6.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_7.png | Bin 0 -> 141 bytes .../Status/leftleg.rsi/leftleg_8.png | Bin 0 -> 170 bytes .../Targeting/Status/leftleg.rsi/meta.json | 38 + .../Targeting/Status/rightarm.rsi/meta.json | 38 + .../Status/rightarm.rsi/rightarm_0.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_1.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_2.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_3.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_4.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_5.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_6.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_7.png | Bin 0 -> 147 bytes .../Status/rightarm.rsi/rightarm_8.png | Bin 0 -> 158 bytes .../Targeting/Status/rightfoot.rsi/meta.json | 38 + .../Status/rightfoot.rsi/rightfoot_0.png | Bin 0 -> 176 bytes .../Status/rightfoot.rsi/rightfoot_1.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_2.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_3.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_4.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_5.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_6.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_7.png | Bin 0 -> 144 bytes .../Status/rightfoot.rsi/rightfoot_8.png | Bin 0 -> 161 bytes .../Targeting/Status/righthand.rsi/meta.json | 38 + .../Status/righthand.rsi/righthand_0.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_1.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_2.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_3.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_4.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_5.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_6.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_7.png | Bin 0 -> 138 bytes .../Status/righthand.rsi/righthand_8.png | Bin 0 -> 152 bytes .../Targeting/Status/rightleg.rsi/meta.json | 38 + .../Status/rightleg.rsi/rightleg_0.png | Bin 0 -> 178 bytes .../Status/rightleg.rsi/rightleg_1.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_2.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_3.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_4.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_5.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_6.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_7.png | Bin 0 -> 141 bytes .../Status/rightleg.rsi/rightleg_8.png | Bin 0 -> 166 bytes .../Targeting/Status/torso.rsi/meta.json | 38 + .../Targeting/Status/torso.rsi/torso_0.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_1.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_2.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_3.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_4.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_5.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_6.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_7.png | Bin 0 -> 160 bytes .../Targeting/Status/torso.rsi/torso_8.png | Bin 0 -> 186 bytes .../Species/Misc/Pizza/parts.rsi/l_arm.png | Bin 0 -> 572 bytes .../Species/Misc/Pizza/parts.rsi/meta.json | 19 + .../Species/Misc/Pizza/parts.rsi/r_arm.png | Bin 0 -> 608 bytes .../Medical/Surgery/bone_gel.rsi/bone-gel.png | Bin 0 -> 432 bytes .../Surgery/bone_gel.rsi/bone-gel_0.png | Bin 0 -> 391 bytes .../Surgery/bone_gel.rsi/bone-gel_25.png | Bin 0 -> 444 bytes .../Surgery/bone_gel.rsi/bone-gel_50.png | Bin 0 -> 456 bytes .../Surgery/bone_gel.rsi/bone-gel_75.png | Bin 0 -> 444 bytes .../Medical/Surgery/bone_gel.rsi/meta.json | 29 + .../bone_gel.rsi/predator_bone-gel.png | Bin 0 -> 585 bytes .../Surgery/bonesetter.rsi/bonesetter.png | Bin 0 -> 581 bytes .../Medical/Surgery/bonesetter.rsi/meta.json | 17 + .../bonesetter.rsi/predator_bonesetter.png | Bin 0 -> 489 bytes .../Surgery/manipulation.rsi/insertion.png | Bin 0 -> 379 bytes .../Surgery/manipulation.rsi/meta.json | 14 + .../limbgrower.rsi/limbgrower_fill.png | Bin 0 -> 9056 bytes .../limbgrower.rsi/limbgrower_idleoff.png | Bin 0 -> 3320 bytes .../limbgrower.rsi/limbgrower_idleon.png | Bin 0 -> 11102 bytes .../limbgrower.rsi/limbgrower_openpanel.png | Bin 0 -> 3981 bytes .../limbgrower.rsi/limbgrower_panelopen.png | Bin 0 -> 2273 bytes .../limbgrower.rsi/limbgrower_unfill.png | Bin 0 -> 9104 bytes .../Machines/limbgrower.rsi/meta.json | 85 ++ Resources/keybinds.yml | 25 + 384 files changed, 8214 insertions(+), 199 deletions(-) create mode 100644 Content.Client/Body/Components/BrainComponent.cs create mode 100644 Content.Client/Body/Components/LungComponent.cs create mode 100644 Content.Client/Body/Components/StomachComponent.cs create mode 100644 Content.Client/Medical/Surgery/SurgeryBui.cs create mode 100644 Content.Client/Medical/Surgery/SurgeryStepButton.xaml create mode 100644 Content.Client/Medical/Surgery/SurgeryStepButton.xaml.cs create mode 100644 Content.Client/Medical/Surgery/SurgerySystem.cs create mode 100644 Content.Client/Medical/Surgery/SurgeryWindow.xaml create mode 100644 Content.Client/Medical/Surgery/SurgeryWindow.xaml.cs create mode 100644 Content.Client/Targeting/TargetingSystem.cs create mode 100644 Content.Client/UserInterface/Systems/PartStatus/PartStatusUIController.cs create mode 100644 Content.Client/UserInterface/Systems/PartStatus/Widgets/PartStatusControl.xaml create mode 100644 Content.Client/UserInterface/Systems/PartStatus/Widgets/PartStatusControl.xaml.cs create mode 100644 Content.Client/UserInterface/Systems/Targeting/TargetingUIController.cs create mode 100644 Content.Client/UserInterface/Systems/Targeting/Widgets/TargetingControl.xaml create mode 100644 Content.Client/UserInterface/Systems/Targeting/Widgets/TargetingControl.xaml.cs create mode 100644 Content.Client/Xenonids/UI/XenoChoiceControl.xaml create mode 100644 Content.Client/Xenonids/UI/XenoChoiceControl.xaml.cs create mode 100644 Content.IntegrationTests/Tests/Shitmed/Body/SpeciesBUiTest.cs create mode 100644 Content.Server/Destructible/Thresholds/Behaviors/GibPartBehavior.cs create mode 100644 Content.Server/Medical/Surgery/SurgerySystem.cs create mode 100644 Content.Server/Targeting/TargetingSystem.cs create mode 100644 Content.Shared/Body/Events/AmputateAttemptEvent.cs create mode 100644 Content.Shared/Body/Organ/DebrainedComponent.cs create mode 100644 Content.Shared/Body/Organ/EarsComponent.cs create mode 100644 Content.Shared/Body/Organ/EyesComponent.cs create mode 100644 Content.Shared/Body/Organ/HeartComponent.cs create mode 100644 Content.Shared/Body/Organ/LiverComponent.cs create mode 100644 Content.Shared/Body/Organ/MarkingContainerComponent.cs create mode 100644 Content.Shared/Body/Organ/TailComponent.cs create mode 100644 Content.Shared/Body/Part/BodyPartAppearanceComponent.cs create mode 100644 Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs create mode 100644 Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs create mode 100644 Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryCloseIncisionConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryLarvaConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryMarkingConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryOperatingTableConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryOrganConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryPartConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryPartPresentCondition.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryValidEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Conditions/SurgeryWoundedConditionComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Complete/SurgeryCompletedEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Complete/SurgeryRemoveLarvaComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgerySpecialDamageChangeEffectComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepCavityEffectComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepEmoteEffectComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepSpawnEffect.cs create mode 100644 Content.Shared/Medical/Surgery/Effects/Step/SurgeryTendWoundsEffectComponent.cs create mode 100644 Content.Shared/Medical/Surgery/OperatingTableComponent.cs create mode 100644 Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs create mode 100644 Content.Shared/Medical/Surgery/SharedSurgerySystem.cs create mode 100644 Content.Shared/Medical/Surgery/StepInvalidReason.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/BleedersClampedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/BodyPartReattachedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/BodyPartSawedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/IncisionOpenComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/InternalBleedersClampedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/OrganReattachedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/PartRemovedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/RibcageOpenComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/RibcageSawedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/Parts/SkinRetractedComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryAddMarkingStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryAddOrganStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryAddPartStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryAffixOrganStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryAffixPartStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryCanPerformStepEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryCutLarvaRootsStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryRemoveOrganStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryRemovePartStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryRepeatableStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryStepCompleteCheckEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Steps/SurgeryStepComponent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryComponent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryDoAfterEvent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgerySpeedModifierComponent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryStepDamageEvent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryStepEvent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryTargetComponent.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryUI.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryUiRefreshEvent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/BoneGelComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/BoneSawComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/BoneSetterComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/CauteryComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/HemostatComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/ISurgeryToolComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/RetractorComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/ScalpelComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/SurgeryToolComponent.cs create mode 100644 Content.Shared/Medical/Surgery/Tools/SurgicalDrillComponent.cs create mode 100644 Content.Shared/Targeting/Events.cs create mode 100644 Content.Shared/Targeting/SharedTargetingSystem.cs create mode 100644 Content.Shared/Targeting/TargetBodyPart.cs create mode 100644 Content.Shared/Targeting/TargetIntegrity.cs create mode 100644 Content.Shared/Targeting/TargetingComponent.cs create mode 100644 Resources/Audio/Medical/Surgery/attributions.yml create mode 100644 Resources/Audio/Medical/Surgery/cautery1.ogg create mode 100644 Resources/Audio/Medical/Surgery/cautery2.ogg create mode 100644 Resources/Audio/Medical/Surgery/hemostat1.ogg create mode 100644 Resources/Audio/Medical/Surgery/organ1.ogg create mode 100644 Resources/Audio/Medical/Surgery/organ2.ogg create mode 100644 Resources/Audio/Medical/Surgery/retractor1.ogg create mode 100644 Resources/Audio/Medical/Surgery/retractor2.ogg create mode 100644 Resources/Audio/Medical/Surgery/saw.ogg create mode 100644 Resources/Audio/Medical/Surgery/scalpel1.ogg create mode 100644 Resources/Audio/Medical/Surgery/scalpel2.ogg create mode 100644 Resources/Locale/en-US/surgery/surgery-ui.ftl create mode 100644 Resources/Prototypes/Body/Organs/felinid.yml create mode 100644 Resources/Prototypes/Entities/Surgery/surgeries.yml create mode 100644 Resources/Prototypes/Entities/Surgery/surgery_steps.yml create mode 100644 Resources/Prototypes/Species/misc.yml create mode 100644 Resources/ServerInfo/Guidebook/Medical/OrganManipulation.xml create mode 100644 Resources/ServerInfo/Guidebook/Medical/PartManipulation.xml create mode 100644 Resources/ServerInfo/Guidebook/Medical/Surgery.xml create mode 100644 Resources/ServerInfo/Guidebook/Medical/UtilitySurgeries.xml create mode 100644 Resources/Textures/Interface/Ashen/target_doll.png create mode 100644 Resources/Textures/Interface/Clockwork/target_doll.png create mode 100644 Resources/Textures/Interface/Default/target_doll.png create mode 100644 Resources/Textures/Interface/Minimalist/target_doll.png create mode 100644 Resources/Textures/Interface/Plasmafire/target_doll.png create mode 100644 Resources/Textures/Interface/Retro/target_doll.png create mode 100644 Resources/Textures/Interface/Slimecore/target_doll.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/eyes.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/eyes_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/groin.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/groin_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/head.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/head_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftarm.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftarm_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftfoot.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftfoot_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/lefthand.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/lefthand_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftleg.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/leftleg_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/mouth.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/mouth_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightarm.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightarm_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightfoot.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightfoot_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/righthand.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/righthand_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightleg.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/rightleg_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/torso.png create mode 100644 Resources/Textures/Interface/Targeting/Doll/torso_hover.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/groin.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/head_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/head.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftarm.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/lefthand.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/leftleg.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_8.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/meta.json create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_0.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_1.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_2.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_3.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_4.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_5.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_6.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_7.png create mode 100644 Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_8.png create mode 100644 Resources/Textures/Mobs/Species/Misc/Pizza/parts.rsi/l_arm.png create mode 100644 Resources/Textures/Mobs/Species/Misc/Pizza/parts.rsi/meta.json create mode 100644 Resources/Textures/Mobs/Species/Misc/Pizza/parts.rsi/r_arm.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_0.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_25.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_50.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel_75.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/predator_bone-gel.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/bonesetter.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/bonesetter.rsi/predator_bonesetter.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/manipulation.rsi/insertion.png create mode 100644 Resources/Textures/Objects/Specific/Medical/Surgery/manipulation.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_fill.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_idleoff.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_idleon.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_openpanel.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_panelopen.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_unfill.png create mode 100644 Resources/Textures/Structures/Machines/limbgrower.rsi/meta.json diff --git a/Content.Client/Body/Components/BrainComponent.cs b/Content.Client/Body/Components/BrainComponent.cs new file mode 100644 index 00000000000..5ef9cea9901 --- /dev/null +++ b/Content.Client/Body/Components/BrainComponent.cs @@ -0,0 +1,3 @@ +namespace Content.Client.Body.Components; +[RegisterComponent] +public sealed partial class BrainComponent : Component { } diff --git a/Content.Client/Body/Components/LungComponent.cs b/Content.Client/Body/Components/LungComponent.cs new file mode 100644 index 00000000000..71a19323b87 --- /dev/null +++ b/Content.Client/Body/Components/LungComponent.cs @@ -0,0 +1,3 @@ +namespace Content.Client.Body.Components; +[RegisterComponent] +public sealed partial class LungComponent : Component { } diff --git a/Content.Client/Body/Components/StomachComponent.cs b/Content.Client/Body/Components/StomachComponent.cs new file mode 100644 index 00000000000..fbc06ac7d75 --- /dev/null +++ b/Content.Client/Body/Components/StomachComponent.cs @@ -0,0 +1,3 @@ +namespace Content.Client.Body.Components; +[RegisterComponent] +public sealed partial class StomachComponent : Component { } diff --git a/Content.Client/Body/Systems/BodySystem.cs b/Content.Client/Body/Systems/BodySystem.cs index bab785525b0..10dc057a8fd 100644 --- a/Content.Client/Body/Systems/BodySystem.cs +++ b/Content.Client/Body/Systems/BodySystem.cs @@ -1,7 +1,72 @@ using Content.Shared.Body.Systems; +using Content.Shared.Body.Part; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Robust.Client.GameObjects; +using Robust.Shared.Utility; +using Content.Shared.Body.Components; namespace Content.Client.Body.Systems; public sealed class BodySystem : SharedBodySystem { + [Dependency] private readonly MarkingManager _markingManager = default!; + + private void ApplyMarkingToPart(MarkingPrototype markingPrototype, + IReadOnlyList? colors, + bool visible, + SpriteComponent sprite) + { + for (var j = 0; j < markingPrototype.Sprites.Count; j++) + { + var markingSprite = markingPrototype.Sprites[j]; + + if (markingSprite is not SpriteSpecifier.Rsi rsi) + continue; + + var layerId = $"{markingPrototype.ID}-{rsi.RsiState}"; + + if (!sprite.LayerMapTryGet(layerId, out _)) + { + var layer = sprite.AddLayer(markingSprite, j + 1); + sprite.LayerMapSet(layerId, layer); + sprite.LayerSetSprite(layerId, rsi); + } + + sprite.LayerSetVisible(layerId, visible); + + if (!visible) + continue; + + // Okay so if the marking prototype is modified but we load old marking data this may no longer be valid + // and we need to check the index is correct. So if that happens just default to white? + if (colors != null && j < colors.Count) + sprite.LayerSetColor(layerId, colors[j]); + else + sprite.LayerSetColor(layerId, Color.White); + } + } + + protected override void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component) + { + if (!TryComp(target, out SpriteComponent? sprite)) + return; + + if (component.Color != null) + sprite.Color = component.Color.Value; + + foreach (var (visualLayer, markingList) in component.Markings) + foreach (var marking in markingList) + { + if (!_markingManager.TryGetMarking(marking, out var markingPrototype)) + continue; + + ApplyMarkingToPart(markingPrototype, marking.MarkingColors, marking.Visible, sprite); + } + } + + protected override void RemoveBodyMarkings(EntityUid target, BodyPartAppearanceComponent partAppearance, HumanoidAppearanceComponent bodyAppearance) + { + return; + } } diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index 7319b97b42b..7ea3b69de57 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -3,6 +3,7 @@ using Content.Client.Examine; using Content.Client.Strip; using Content.Client.Verbs.UI; +using Content.Shared.Body.Part; using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; @@ -38,7 +39,6 @@ public sealed class HandsSystem : SharedHandsSystem public event Action? OnPlayerItemRemoved; public event Action? OnPlayerHandBlocked; public event Action? OnPlayerHandUnblocked; - public override void Initialize() { base.Initialize(); @@ -49,6 +49,8 @@ public override void Initialize() SubscribeLocalEvent(OnHandsShutdown); SubscribeLocalEvent(HandleComponentState); SubscribeLocalEvent(OnVisualsChanged); + SubscribeLocalEvent(HandleBodyPartRemoved); + SubscribeLocalEvent(HandleBodyPartDisabled); OnHandSetActive += OnHandActivated; } @@ -236,8 +238,38 @@ public void UIHandAltActivateItem(string handName) RaisePredictiveEvent(new RequestHandAltInteractEvent(handName)); } + #region pulling + + #endregion + #region visuals + private void HideLayers(EntityUid uid, HandsComponent component, Entity part, SpriteComponent? sprite = null) + { + if (part.Comp.PartType != BodyPartType.Hand || !Resolve(uid, ref sprite, logMissing: false)) + return; + + var location = part.Comp.Symmetry switch + { + BodyPartSymmetry.None => HandLocation.Middle, + BodyPartSymmetry.Left => HandLocation.Left, + BodyPartSymmetry.Right => HandLocation.Right, + _ => throw new ArgumentOutOfRangeException(nameof(part.Comp.Symmetry)) + }; + + if (component.RevealedLayers.TryGetValue(location, out var revealedLayers)) + { + foreach (var key in revealedLayers) + sprite.RemoveLayer(key); + + revealedLayers.Clear(); + } + } + + private void HandleBodyPartRemoved(EntityUid uid, HandsComponent component, ref BodyPartRemovedEvent args) => HideLayers(uid, component, args.Part); + + private void HandleBodyPartDisabled(EntityUid uid, HandsComponent component, ref BodyPartDisabledEvent args) => HideLayers(uid, component, args.Part); + protected override void HandleEntityInserted(EntityUid uid, HandsComponent hands, EntInsertedIntoContainerMessage args) { base.HandleEntityInserted(uid, hands, args); @@ -262,6 +294,7 @@ protected override void HandleEntityRemoved(EntityUid uid, HandsComponent hands, if (!hands.Hands.TryGetValue(args.Container.ID, out var hand)) return; + UpdateHandVisuals(uid, args.Entity, hand); _stripSys.UpdateUi(uid); diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs index dc0a3e9fccd..39bb52d72c0 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs @@ -1,4 +1,5 @@ using Content.Shared.MedicalScanner; +using Content.Shared.Targeting; using JetBrains.Annotations; using Robust.Client.GameObjects; @@ -22,6 +23,7 @@ protected override void Open() Title = EntMan.GetComponent(Owner).EntityName, }; _window.OnClose += Close; + _window.OnBodyPartSelected += SendBodyPartMessage; _window.OpenCentered(); } @@ -36,6 +38,8 @@ protected override void ReceiveMessage(BoundUserInterfaceMessage message) _window.Populate(cast); } + private void SendBodyPartMessage(TargetBodyPart? part, EntityUid target) => SendMessage(new HealthAnalyzerPartMessage(EntMan.GetNetEntity(target), part ?? null)); + protected override void Dispose(bool disposing) { base.Dispose(disposing); @@ -43,7 +47,10 @@ protected override void Dispose(bool disposing) return; if (_window != null) + { _window.OnClose -= Close; + _window.OnBodyPartSelected -= SendBodyPartMessage; + } _window?.Dispose(); } diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index e070af95d82..0a0b5ac89e7 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -2,7 +2,7 @@ xmlns="https://spacestation14.io" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" MaxHeight="525" - MinWidth="300"> + MinWidth="350">
/// The health analyzer that should receive the updates /// The entity to start analyzing - private void BeginAnalyzingEntity(Entity healthAnalyzer, EntityUid target) + private void BeginAnalyzingEntity(Entity healthAnalyzer, EntityUid target, EntityUid? part = null) { //Link the health analyzer to the scanned entity healthAnalyzer.Comp.ScannedEntity = target; - + healthAnalyzer.Comp.CurrentBodyPart = part; _cell.SetPowerCellDrawEnabled(healthAnalyzer, true); - UpdateScannedUser(healthAnalyzer, target, true); + UpdateScannedUser(healthAnalyzer, target, true, part); } /// @@ -161,26 +185,50 @@ private void StopAnalyzingEntity(Entity healthAnalyzer, { //Unlink the analyzer healthAnalyzer.Comp.ScannedEntity = null; + healthAnalyzer.Comp.CurrentBodyPart = null; _cell.SetPowerCellDrawEnabled(target, false); UpdateScannedUser(healthAnalyzer, target, false); } + // Start-Shitmed + /// + /// Handle the selection of a body part on the health analyzer + /// + /// The health analyzer that's receiving the updates + /// The message containing the selected part + private void OnHealthAnalyzerPartSelected(Entity healthAnalyzer, ref HealthAnalyzerPartMessage args) + { + if (!TryGetEntity(args.Owner, out var owner)) + return; + + if (args.BodyPart == null) + { + BeginAnalyzingEntity(healthAnalyzer, owner.Value, null); + } + else + { + var (targetType, targetSymmetry) = _bodySystem.ConvertTargetBodyPart(args.BodyPart.Value); + if (_bodySystem.GetBodyChildrenOfType(owner.Value, targetType, symmetry: targetSymmetry) is { } part) + BeginAnalyzingEntity(healthAnalyzer, owner.Value, part.FirstOrDefault().Id); + } + } +// End-Shitmed + /// /// Send an update for the target to the healthAnalyzer /// /// The health analyzer /// The entity being scanned /// True makes the UI show ACTIVE, False makes the UI show INACTIVE - public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool scanMode) + public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool scanMode, EntityUid? part = null) { if (!_uiSystem.HasUi(healthAnalyzer, HealthAnalyzerUiKey.Key)) return; if (!HasComp(target)) return; - var bodyTemperature = float.NaN; if (TryComp(target, out var temp)) @@ -201,13 +249,22 @@ public void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool s /*if (HasComp(target)) Somehow we dont have unrevivable??? unrevivable = true; */ + + // Start-Shitmed + Dictionary? body = null; + if (HasComp(target)) + body = _bodySystem.GetBodyPartStatus(target); + // End-Shitmed + _uiSystem.ServerSendUiMessage(healthAnalyzer, HealthAnalyzerUiKey.Key, new HealthAnalyzerScannedUserMessage( GetNetEntity(target), bodyTemperature, bloodAmount, scanMode, bleeding, - unrevivable + unrevivable, + body, // Shitmed + part != null ? GetNetEntity(part) : null // Shitmed )); } } diff --git a/Content.Server/Medical/Surgery/SurgerySystem.cs b/Content.Server/Medical/Surgery/SurgerySystem.cs new file mode 100644 index 00000000000..615166390a3 --- /dev/null +++ b/Content.Server/Medical/Surgery/SurgerySystem.cs @@ -0,0 +1,189 @@ +using Content.Server.Atmos.Rotting; +using Content.Server.Body.Systems; +using Content.Server.Chat.Systems; +using Content.Shared.Body.Organ; +using Content.Shared.Body.Part; +using Content.Server.Popups; +using Content.Shared.Bed.Sleep; +using Content.Shared.CCVar; +using Content.Shared.Damage; +using Content.Shared.Eye.Blinding.Components; +using Content.Shared.Eye.Blinding.Systems; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Medical.Surgery; +using Content.Shared.Medical.Surgery.Conditions; +using Content.Shared.Medical.Surgery.Effects.Step; +using Content.Shared.Medical.Surgery.Steps; +using Content.Shared.Medical.Surgery.Steps.Parts; +using Content.Shared.Medical.Surgery.Tools; +using Content.Shared.Mood; +using Content.Shared.Prototypes; +using Robust.Server.GameObjects; +using Robust.Shared.Configuration; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; +using System.Linq; + +namespace Content.Server.Medical.Surgery; + +public sealed class SurgerySystem : SharedSurgerySystem +{ + [Dependency] private readonly BodySystem _body = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + [Dependency] private readonly RottingSystem _rot = default!; + [Dependency] private readonly BlindableSystem _blindableSystem = default!; + + private readonly List _surgeries = new(); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnToolAfterInteract); + SubscribeLocalEvent(OnSurgeryStepDamage); + SubscribeLocalEvent(OnSurgeryDamageChange); + SubscribeLocalEvent(OnSurgerySpecialDamageChange); + SubscribeLocalEvent(OnStepScreamComplete); + SubscribeLocalEvent(OnStepSpawnComplete); + SubscribeLocalEvent(OnPrototypesReloaded); + LoadPrototypes(); + } + + protected override void RefreshUI(EntityUid body) + { + var surgeries = new Dictionary>(); + foreach (var surgery in _surgeries) + { + if (GetSingleton(surgery) is not { } surgeryEnt) + continue; + + foreach (var part in _body.GetBodyChildren(body)) + { + var ev = new SurgeryValidEvent(body, part.Id); + RaiseLocalEvent(surgeryEnt, ref ev); + + if (ev.Cancelled) + continue; + + surgeries.GetOrNew(GetNetEntity(part.Id)).Add(surgery); + } + + } + _ui.SetUiState(body, SurgeryUIKey.Key, new SurgeryBuiState(surgeries)); + /* + Reason we do this is because when applying a BUI State, it rolls back the state on the entity temporarily, + which just so happens to occur right as we're checking for step completion, so we end up with the UI + not updating at all until you change tools or reopen the window. I love shitcode. + */ + _ui.ServerSendUiMessage(body, SurgeryUIKey.Key, new SurgeryBuiRefreshMessage()); + } + private void SetDamage(EntityUid body, + DamageSpecifier damage, + float partMultiplier, + EntityUid user, + EntityUid part) + { + if (!TryComp(part, out var partComp)) + return; + + _damageable.TryChangeDamage(body, + damage, + true, + origin: user, + canSever: false, + partMultiplier: partMultiplier, + targetPart: _body.GetTargetBodyPart(partComp)); + } + + private void OnToolAfterInteract(Entity ent, ref AfterInteractEvent args) + { + var user = args.User; + if (args.Handled + || !args.CanReach + || args.Target == null + || !HasComp(args.Target) + || !TryComp(args.User, out var surgery) + || !surgery.CanOperate + || !IsLyingDown(args.Target.Value, args.User)) + { + return; + } + + if (user == args.Target && !_config.GetCVar(CCVars.CanOperateOnSelf)) + { + _popup.PopupEntity(Loc.GetString("surgery-error-self-surgery"), user, user); + return; + } + + args.Handled = true; + _ui.OpenUi(args.Target.Value, SurgeryUIKey.Key, user); + RefreshUI(args.Target.Value); + } + + private void OnSurgeryStepDamage(Entity ent, ref SurgeryStepDamageEvent args) => + SetDamage(args.Body, args.Damage, args.PartMultiplier, args.User, args.Part); + + private void OnSurgeryDamageChange(Entity ent, ref SurgeryStepEvent args) + { + // This unintentionally punishes the user if they have an organ in another hand that is already used. + // Imo surgery shouldn't let you automatically pick tools on both hands anyway, it should only use the one you've got in your selected hand. + if (ent.Comp.IsConsumable + && args.Tools.Where(tool => TryComp(tool, out var organComp) + && !_body.TrySetOrganUsed(tool, true, organComp)).Any()) + return; + + var damageChange = ent.Comp.Damage; + if (HasComp(args.Body)) + damageChange = damageChange * ent.Comp.SleepModifier; + + SetDamage(args.Body, damageChange, 0.5f, args.User, args.Part); + } + + private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepEvent args) + { + if (ent.Comp.IsConsumable + && args.Tools.Where(tool => TryComp(tool, out var organComp) + && !_body.TrySetOrganUsed(tool, true, organComp)).Any()) + return; + + if (ent.Comp.DamageType == "Rot") + _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) + else if (ent.Comp.DamageType == "Eye" + && TryComp(args.Body, out BlindableComponent? blindComp) + && blindComp.EyeDamage > 0) + _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage); + } + + private void OnStepScreamComplete(Entity ent, ref SurgeryStepEvent args) + { + if (HasComp(args.Body)) + return; + + _chat.TryEmoteWithChat(args.Body, ent.Comp.Emote); + } + private void OnStepSpawnComplete(Entity ent, ref SurgeryStepEvent args) => + SpawnAtPosition(ent.Comp.Entity, Transform(args.Body).Coordinates); + + private void OnPrototypesReloaded(PrototypesReloadedEventArgs args) + { + if (!args.WasModified()) + return; + + LoadPrototypes(); + } + + private void LoadPrototypes() + { + _surgeries.Clear(); + foreach (var entity in _prototypes.EnumeratePrototypes()) + if (entity.HasComponent()) + _surgeries.Add(new EntProtoId(entity.ID)); + } +} diff --git a/Content.Server/Targeting/TargetingSystem.cs b/Content.Server/Targeting/TargetingSystem.cs new file mode 100644 index 00000000000..3fc8ea59640 --- /dev/null +++ b/Content.Server/Targeting/TargetingSystem.cs @@ -0,0 +1,54 @@ +using Content.Shared.Body.Systems; +using Content.Shared.Mobs; +using Content.Shared.Targeting; +using Content.Shared.Targeting.Events; + +namespace Content.Server.Targeting; +public sealed class TargetingSystem : SharedTargetingSystem +{ + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeNetworkEvent(OnTargetChange); + SubscribeLocalEvent(OnMobStateChange); + } + + private void OnTargetChange(TargetChangeEvent message, EntitySessionEventArgs args) + { + if (!TryComp(GetEntity(message.Uid), out var target)) + return; + + target.Target = message.BodyPart; + Dirty(GetEntity(message.Uid), target); + } + + private void OnMobStateChange(EntityUid uid, TargetingComponent component, MobStateChangedEvent args) + { + // Revival is handled by the server, so we're keeping all of this here. + var changed = false; + + if (args.NewMobState == MobState.Dead) + { + foreach (var part in GetValidParts()) + { + component.BodyStatus[part] = TargetIntegrity.Dead; + changed = true; + } + // I love groin shitcode. + component.BodyStatus[TargetBodyPart.Groin] = TargetIntegrity.Dead; + } + else if (args.OldMobState == MobState.Dead && (args.NewMobState == MobState.Alive || args.NewMobState == MobState.Critical)) + { + component.BodyStatus = _bodySystem.GetBodyPartStatus(uid); + changed = true; + } + + if (changed) + { + Dirty(uid, component); + RaiseNetworkEvent(new TargetIntegrityChangeEvent(GetNetEntity(uid)), uid); + } + } +} diff --git a/Content.Server/Traits/Assorted/LightweightDrunkSystem.cs b/Content.Server/Traits/Assorted/LightweightDrunkSystem.cs index b5e9b877764..f974fe75607 100644 --- a/Content.Server/Traits/Assorted/LightweightDrunkSystem.cs +++ b/Content.Server/Traits/Assorted/LightweightDrunkSystem.cs @@ -13,7 +13,7 @@ public override void Initialize() private void OnTryMetabolizeReagent(EntityUid uid, LightweightDrunkComponent comp, ref TryMetabolizeReagent args) { - Log.Debug(args.Prototype.ID); + //Log.Debug(args.Prototype.ID); if (args.Prototype.ID != "Ethanol") return; diff --git a/Content.Shared/Body/Events/AmputateAttemptEvent.cs b/Content.Shared/Body/Events/AmputateAttemptEvent.cs new file mode 100644 index 00000000000..b71a0407bf2 --- /dev/null +++ b/Content.Shared/Body/Events/AmputateAttemptEvent.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Body.Events; + +/// +/// Raised on an entity when attempting to remove a body part. +/// +[ByRefEvent] +public readonly record struct AmputateAttemptEvent(EntityUid Part); diff --git a/Content.Shared/Body/Organ/DebrainedComponent.cs b/Content.Shared/Body/Organ/DebrainedComponent.cs new file mode 100644 index 00000000000..12574bddcc3 --- /dev/null +++ b/Content.Shared/Body/Organ/DebrainedComponent.cs @@ -0,0 +1,7 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class DebrainedComponent : Component; +// TODO: Add a timer to kill the entity if they don't get a new brain in time. diff --git a/Content.Shared/Body/Organ/EarsComponent.cs b/Content.Shared/Body/Organ/EarsComponent.cs new file mode 100644 index 00000000000..80414387292 --- /dev/null +++ b/Content.Shared/Body/Organ/EarsComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class EarsComponent : Component; diff --git a/Content.Shared/Body/Organ/EyesComponent.cs b/Content.Shared/Body/Organ/EyesComponent.cs new file mode 100644 index 00000000000..55be5f1a9c4 --- /dev/null +++ b/Content.Shared/Body/Organ/EyesComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class EyesComponent : Component; diff --git a/Content.Shared/Body/Organ/HeartComponent.cs b/Content.Shared/Body/Organ/HeartComponent.cs new file mode 100644 index 00000000000..fc4def945eb --- /dev/null +++ b/Content.Shared/Body/Organ/HeartComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class HeartComponent : Component; diff --git a/Content.Shared/Body/Organ/LiverComponent.cs b/Content.Shared/Body/Organ/LiverComponent.cs new file mode 100644 index 00000000000..23021bea319 --- /dev/null +++ b/Content.Shared/Body/Organ/LiverComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class LiverComponent : Component; diff --git a/Content.Shared/Body/Organ/MarkingContainerComponent.cs b/Content.Shared/Body/Organ/MarkingContainerComponent.cs new file mode 100644 index 00000000000..0583258dc20 --- /dev/null +++ b/Content.Shared/Body/Organ/MarkingContainerComponent.cs @@ -0,0 +1,15 @@ +// This is a uh, very shitty copout to not wanting to modify the prototypes for felinids, and entities at large so they have ears. +// I will do that at some point, for now I just want the funny surgery to work lol. +using Robust.Shared.GameStates; +using Content.Shared.Humanoid.Markings; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent, NetworkedComponent] +public sealed partial class MarkingContainerComponent : Component +{ + [DataField(required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Marking = default!; + +} diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index 3048927b5fb..c7212cbec31 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -1,16 +1,34 @@ using Content.Shared.Body.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; +using Content.Shared.Medical.Surgery.Tools; namespace Content.Shared.Body.Organ; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedBodySystem))] -public sealed partial class OrganComponent : Component +public sealed partial class OrganComponent : Component, ISurgeryToolComponent { /// /// Relevant body this organ is attached to. /// [DataField, AutoNetworkedField] public EntityUid? Body; + + /// + /// Shitcodey solution to not being able to know what name corresponds to each organ's slot ID + /// without referencing the prototype or hardcoding. + /// + + [DataField] + public string SlotId = ""; + + [DataField] + public string ToolName { get; set; } = "An organ"; + + /// + /// If true, the organ will not heal an entity when transplanted into them. + /// + [DataField, AutoNetworkedField] + public bool? Used { get; set; } } diff --git a/Content.Shared/Body/Organ/TailComponent.cs b/Content.Shared/Body/Organ/TailComponent.cs new file mode 100644 index 00000000000..3cd8da87b5a --- /dev/null +++ b/Content.Shared/Body/Organ/TailComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Organ; + +[RegisterComponent] +public sealed partial class TailComponent : Component; diff --git a/Content.Shared/Body/Part/BodyPartAppearanceComponent.cs b/Content.Shared/Body/Part/BodyPartAppearanceComponent.cs new file mode 100644 index 00000000000..1769d68ec76 --- /dev/null +++ b/Content.Shared/Body/Part/BodyPartAppearanceComponent.cs @@ -0,0 +1,45 @@ +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Humanoid.Markings; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.GameStates; + +namespace Content.Shared.Body.Part; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class BodyPartAppearanceComponent : Component +{ + /// + /// HumanoidVisualLayer type for this body part. + /// + [DataField, AutoNetworkedField] + public HumanoidVisualLayers Type { get; set; } + + /// + /// Relevant markings for this body part that will be applied on attachment. + /// + [DataField, AutoNetworkedField] + public Dictionary> Markings = new(); + + /// + /// ID of this custom base layer. Must be a . + /// I don't actually know if these serializer props are necessary. I just lifted this from MS14 lol. + /// + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer)), AutoNetworkedField] + public string? ID { get; set; } + + /// + /// Color of this custom base layer. Null implies skin colour if the corresponding is set to match skin. + /// + [DataField, AutoNetworkedField] + public Color? Color { get; set; } + + /// + /// Color of this custom base eye layer. Null implies eye colour if the corresponding is set to match skin. + /// + [DataField, AutoNetworkedField] + public Color? EyeColor { get; set; } + + [DataField, AutoNetworkedField] + public EntityUid? OriginalBody { get; set; } +} diff --git a/Content.Shared/Body/Part/BodyPartComponent.cs b/Content.Shared/Body/Part/BodyPartComponent.cs index c4e65c06a3f..2a93f6aed25 100644 --- a/Content.Shared/Body/Part/BodyPartComponent.cs +++ b/Content.Shared/Body/Part/BodyPartComponent.cs @@ -1,5 +1,10 @@ using Content.Shared.Body.Components; using Content.Shared.Body.Systems; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Content.Shared.Medical.Surgery.Tools; +using Content.Shared.Targeting; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Serialization; @@ -8,7 +13,7 @@ namespace Content.Shared.Body.Part; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedBodySystem))] -public sealed partial class BodyPartComponent : Component +public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent { // Need to set this on container changes as it may be several transform parents up the hierarchy. /// @@ -17,6 +22,12 @@ public sealed partial class BodyPartComponent : Component [DataField, AutoNetworkedField] public EntityUid? Body; + [DataField, AutoNetworkedField] + public EntityUid? OriginalBody; + + [DataField, AutoNetworkedField] + public BodyPartSlot? ParentSlot; + [DataField, AutoNetworkedField] public BodyPartType PartType = BodyPartType.Other; @@ -28,9 +39,23 @@ public sealed partial class BodyPartComponent : Component [DataField("vital"), AutoNetworkedField] public bool IsVital; + /// + /// Amount of damage to deal when the part gets removed. + /// Only works if IsVital is true. + /// + [DataField, AutoNetworkedField] + public FixedPoint2 VitalDamage = 100; + + [DataField, AutoNetworkedField] public BodyPartSymmetry Symmetry = BodyPartSymmetry.None; + [DataField] + public string ToolName { get; set; } = "A body part"; + + [DataField, AutoNetworkedField] + public bool? Used { get; set; } = null; + /// /// Child body parts attached to this body part. /// @@ -43,6 +68,90 @@ public sealed partial class BodyPartComponent : Component [DataField, AutoNetworkedField] public Dictionary Organs = new(); + /// + /// What's the max health this body part can have? + /// + [DataField] + public float MinIntegrity; + + /// + /// Whether this body part is enabled or not. + /// + [DataField, AutoNetworkedField] + public bool Enabled = true; + + /// + /// Whether this body part can be enabled or not. Used for non-functional prosthetics. + /// + [DataField] + public bool CanEnable = true; + + /// + /// How long it takes to run another self heal tick on the body part. + /// + [DataField] + public float HealingTime = 30; + + /// + /// How long it has been since the last self heal tick on the body part. + /// + public float HealingTimer; + + /// + /// How much health to heal on the body part per tick. + /// + [DataField] + public float SelfHealingAmount = 5; + + /// + /// The name of the container for this body part. Used in insertion surgeries. + /// + [DataField] + public string ContainerName { get; set; } = "part_slot"; + + /// + /// The slot for item insertion. + /// + [DataField, AutoNetworkedField] + public ItemSlot ItemInsertionSlot = new(); + + + /// + /// Current species. Dictates things like body part sprites. + /// + [DataField, AutoNetworkedField] + public string Species { get; set; } = ""; + + /// + /// The total damage that has to be dealt to a body part + /// to make possible severing it. + /// + [DataField, AutoNetworkedField] + public float SeverIntegrity = 90; + + /// + /// The ID of the base layer for this body part. + /// + [DataField, AutoNetworkedField] + public string? BaseLayerId; + + /// + /// On what TargetIntegrity we should re-enable the part. + /// + [DataField, AutoNetworkedField] + public TargetIntegrity EnableIntegrity = TargetIntegrity.ModeratelyWounded; + + [DataField, AutoNetworkedField] + public Dictionary IntegrityThresholds = new() + { + { TargetIntegrity.CriticallyWounded, 90 }, + { TargetIntegrity.HeavilyWounded, 75 }, + { TargetIntegrity.ModeratelyWounded, 60 }, + { TargetIntegrity.SomewhatWounded, 40}, + { TargetIntegrity.LightlyWounded, 20 }, + { TargetIntegrity.Healthy, 10 }, + }; + /// /// These are only for VV/Debug do not use these for gameplay/systems /// diff --git a/Content.Shared/Body/Part/BodyPartEvents.cs b/Content.Shared/Body/Part/BodyPartEvents.cs index 0d8d2c8a268..9872b092002 100644 --- a/Content.Shared/Body/Part/BodyPartEvents.cs +++ b/Content.Shared/Body/Part/BodyPartEvents.cs @@ -1,7 +1,27 @@ +using Content.Shared.Humanoid; + namespace Content.Shared.Body.Part; [ByRefEvent] public readonly record struct BodyPartAddedEvent(string Slot, Entity Part); +// Kind of a clone of the above for surgical reattachment specifically. +[ByRefEvent] +public readonly record struct BodyPartAttachedEvent(Entity Part); + [ByRefEvent] public readonly record struct BodyPartRemovedEvent(string Slot, Entity Part); + +// Kind of a clone of the above for any instances where we call DropPart(), reasoning being that RemovedEvent fires off +// a lot more often than what I'd like due to PVS. +[ByRefEvent] +public readonly record struct BodyPartDroppedEvent(Entity Part); + +[ByRefEvent] +public readonly record struct BodyPartEnableChangedEvent(bool Enabled); + +[ByRefEvent] +public readonly record struct BodyPartEnabledEvent(Entity Part); + +[ByRefEvent] +public readonly record struct BodyPartDisabledEvent(Entity Part); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index 1a35afdbe00..f309cc238c6 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -4,17 +4,25 @@ using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Body.Prototypes; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Damage; using Content.Shared.DragDrop; +using Content.Shared.FixedPoint; using Content.Shared.Gibbing.Components; using Content.Shared.Gibbing.Events; using Content.Shared.Gibbing.Systems; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Events; using Content.Shared.Inventory; +using Content.Shared.Rejuvenate; +using Content.Shared.Standing; +using Content.Shared.Targeting; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Map; using Robust.Shared.Utility; - +using Robust.Shared.Timing; namespace Content.Shared.Body.Systems; public partial class SharedBodySystem @@ -27,9 +35,10 @@ public partial class SharedBodySystem */ [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; [Dependency] private readonly GibbingSystem _gibbingSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - + [Dependency] private readonly IGameTiming _gameTiming = default!; private const float GibletLaunchImpulse = 8; private const float GibletLaunchImpulseVariance = 3; @@ -42,6 +51,8 @@ private void InitializeBody() SubscribeLocalEvent(OnBodyInit); SubscribeLocalEvent(OnBodyMapInit); SubscribeLocalEvent(OnBodyCanDrag); + SubscribeLocalEvent(OnStandAttempt); + SubscribeLocalEvent(OnProfileLoadFinished); } private void OnBodyInserted(Entity ent, ref EntInsertedIntoContainerMessage args) @@ -115,11 +126,11 @@ private void MapInitBody(EntityUid bodyEntity, BodyPrototype prototype) var rootPartUid = SpawnInContainerOrDrop(protoRoot.Part, bodyEntity, BodyRootContainerId); var rootPart = Comp(rootPartUid); rootPart.Body = bodyEntity; + rootPart.OriginalBody = bodyEntity; Dirty(rootPartUid, rootPart); - // Setup the rest of the body entities. SetupOrgans((rootPartUid, rootPart), protoRoot.Organs); - MapInitParts(rootPartUid, prototype); + MapInitParts(rootPartUid, rootPart, prototype); } private void OnBodyCanDrag(Entity ent, ref CanDragEvent args) @@ -127,10 +138,16 @@ private void OnBodyCanDrag(Entity ent, ref CanDragEvent args) args.Handled = true; } + private void OnStandAttempt(Entity ent, ref StandAttemptEvent args) + { + if (ent.Comp.LegEntities.Count == 0) + args.Cancel(); + } + /// /// Sets up all of the relevant body parts for a particular body entity and root part. /// - private void MapInitParts(EntityUid rootPartId, BodyPrototype prototype) + private void MapInitParts(EntityUid rootPartId, BodyPartComponent rootPart, BodyPrototype prototype) { // Start at the root part and traverse the body graph, setting up parts as we go. // Basic BFS pathfind. @@ -168,6 +185,9 @@ private void MapInitParts(EntityUid rootPartId, BodyPrototype prototype) var childPartComponent = Comp(childPart); var partSlot = CreatePartSlot(parentEntity, connection, childPartComponent.PartType, parentPartComponent); + childPartComponent.ParentSlot = partSlot; + childPartComponent.OriginalBody = rootPart.Body; + Dirty(childPart, childPartComponent); var cont = Containers.GetContainer(parentEntity, GetPartSlotContainerId(connection)); if (partSlot is null || !Containers.Insert(childPart, cont)) @@ -233,11 +253,11 @@ public IEnumerable GetBodyContainers( { if (id is null || !Resolve(id.Value, ref body, logMissing: false) + || body is null + || body.RootContainer == default || body.RootContainer.ContainedEntity is null || !Resolve(body.RootContainer.ContainedEntity.Value, ref rootPart)) - { yield break; - } foreach (var child in GetBodyPartChildren(body.RootContainer.ContainedEntity.Value, rootPart)) { @@ -291,7 +311,9 @@ public virtual HashSet GibBody( Vector2? splatDirection = null, float splatModifier = 1, Angle splatCone = default, - SoundSpecifier? gibSoundOverride = null) + SoundSpecifier? gibSoundOverride = null, + GibType gib = GibType.Gib, + GibContentsOption contents = GibContentsOption.Drop) { var gibs = new HashSet(); @@ -308,9 +330,9 @@ public virtual HashSet GibBody( foreach (var part in parts) { - _gibbingSystem.TryGibEntityWithRef(bodyId, part.Id, GibType.Gib, GibContentsOption.Skip, ref gibs, - playAudio: false, launchGibs:true, launchDirection:splatDirection, launchImpulse: GibletLaunchImpulse * splatModifier, - launchImpulseVariance:GibletLaunchImpulseVariance, launchCone: splatCone); + _gibbingSystem.TryGibEntityWithRef(bodyId, part.Id, gib, contents, ref gibs, + playAudio: false, launchGibs: true, launchDirection: splatDirection, launchImpulse: GibletLaunchImpulse * splatModifier, + launchImpulseVariance: GibletLaunchImpulseVariance, launchCone: splatCone); if (!gibOrgans) continue; @@ -319,7 +341,7 @@ public virtual HashSet GibBody( { _gibbingSystem.TryGibEntityWithRef(bodyId, organ.Id, GibType.Drop, GibContentsOption.Skip, ref gibs, playAudio: false, launchImpulse: GibletLaunchImpulse * splatModifier, - launchImpulseVariance:GibletLaunchImpulseVariance, launchCone: splatCone); + launchImpulseVariance: GibletLaunchImpulseVariance, launchCone: splatCone); } } if (TryComp(bodyId, out var inventory)) @@ -333,4 +355,57 @@ public virtual HashSet GibBody( _audioSystem.PlayPredicted(gibSoundOverride, Transform(bodyId).Coordinates, null); return gibs; } + + public virtual HashSet GibPart( + EntityUid partId, + BodyPartComponent? part = null, + bool launchGibs = true, + Vector2? splatDirection = null, + float splatModifier = 1, + Angle splatCone = default, + SoundSpecifier? gibSoundOverride = null) + { + var gibs = new HashSet(); + + if (!Resolve(partId, ref part, logMissing: false)) + return gibs; + + if (part.Body is { } bodyEnt) + { + RemovePartChildren((partId, part), bodyEnt); + foreach (var organ in GetPartOrgans(partId, part)) + { + _gibbingSystem.TryGibEntityWithRef(bodyEnt, organ.Id, GibType.Drop, GibContentsOption.Skip, + ref gibs, playAudio: false, launchImpulse: GibletLaunchImpulse * splatModifier, + launchImpulseVariance: GibletLaunchImpulseVariance, launchCone: splatCone); + } + var ev = new BodyPartDroppedEvent((partId, part)); + RaiseLocalEvent(bodyEnt, ref ev); + } + + _gibbingSystem.TryGibEntityWithRef(partId, partId, GibType.Gib, GibContentsOption.Drop, ref gibs, + playAudio: true, launchGibs: true, launchDirection: splatDirection, launchImpulse: GibletLaunchImpulse * splatModifier, + launchImpulseVariance: GibletLaunchImpulseVariance, launchCone: splatCone); + + + if (HasComp(partId)) + { + foreach (var item in _inventory.GetHandOrInventoryEntities(partId)) + { + SharedTransform.AttachToGridOrMap(item); + gibs.Add(item); + } + } + _audioSystem.PlayPredicted(gibSoundOverride, Transform(partId).Coordinates, null); + return gibs; + } + + private void OnProfileLoadFinished(EntityUid uid, BodyComponent component, ProfileLoadFinishedEvent args) + { + if (!HasComp(uid) + || TerminatingOrDeleted(uid)) + + foreach (var part in GetBodyChildren(uid, component)) + EnsureComp(part.Id); + } } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index efabebfc858..e006d0feeb2 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -212,4 +212,15 @@ public bool TryGetBodyOrganComponents( comps = null; return false; } + + public bool TrySetOrganUsed(EntityUid organId, bool used, OrganComponent? organ = null) + { + if (!Resolve(organId, ref organ) + || organ.Used == true) + return false; + + organ.Used = true; + Dirty(organId, organ); + return true; + } } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs b/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs new file mode 100644 index 00000000000..50b9fb8c07e --- /dev/null +++ b/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs @@ -0,0 +1,198 @@ +using System.Diagnostics; +using System.Linq; +using Content.Shared.Body.Components; +using Content.Shared.Body.Part; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Content.Shared.Humanoid.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.Body.Systems; +public partial class SharedBodySystem +{ + [Dependency] private readonly SharedHumanoidAppearanceSystem _humanoid = default!; + [Dependency] private readonly MarkingManager _markingManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + private void InitializePartAppearances() + { + base.Initialize(); + + SubscribeLocalEvent(OnPartAppearanceStartup); + SubscribeLocalEvent(HandleState); + SubscribeLocalEvent(OnPartAttachedToBody); + SubscribeLocalEvent(OnPartDroppedFromBody); + } + + private void OnPartAppearanceStartup(EntityUid uid, BodyPartAppearanceComponent component, ComponentStartup args) + { + if (!TryComp(uid, out BodyPartComponent? part)) + return; + + if (part.OriginalBody == null + || TerminatingOrDeleted(part.OriginalBody.Value) + || !TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance) + || part.ToHumanoidLayers() is not { } relevantLayer) + { + component.ID = part.BaseLayerId; + return; + } + + var customLayers = bodyAppearance.CustomBaseLayers; + var spriteLayers = bodyAppearance.BaseLayers; + component.Type = relevantLayer; + component.OriginalBody = part.OriginalBody.Value; + + part.Species = bodyAppearance.Species; + + if (customLayers.ContainsKey(component.Type)) + { + component.ID = customLayers[component.Type].Id; + component.Color = customLayers[component.Type].Color; + } + else if (spriteLayers.ContainsKey(component.Type)) + { + component.ID = spriteLayers[component.Type].ID; + component.Color = bodyAppearance.SkinColor; + } + else + { + component.ID = CreateIdFromPart(bodyAppearance, relevantLayer); + component.Color = bodyAppearance.SkinColor; + } + + // I HATE HARDCODED CHECKS I HATE HARDCODED CHECKS I HATE HARDCODED CHECKS + if (part.PartType == BodyPartType.Head) + component.EyeColor = bodyAppearance.EyeColor; + + var markingsByLayer = new Dictionary>(); + + foreach (var layer in HumanoidVisualLayersExtension.Sublayers(relevantLayer)) + { + var category = MarkingCategoriesConversion.FromHumanoidVisualLayers(layer); + if (bodyAppearance.MarkingSet.Markings.TryGetValue(category, out var markingList)) + markingsByLayer[layer] = markingList.Select(m => new Marking(m.MarkingId, m.MarkingColors.ToList())).ToList(); + } + + component.Markings = markingsByLayer; + } + + private string? CreateIdFromPart(HumanoidAppearanceComponent bodyAppearance, HumanoidVisualLayers part) + { + var speciesProto = _prototypeManager.Index(bodyAppearance.Species); + var baseSprites = _prototypeManager.Index(speciesProto.SpriteSet); + + if (!baseSprites.Sprites.ContainsKey(part)) + return null; + + return HumanoidVisualLayersExtension.GetSexMorph(part, bodyAppearance.Sex, baseSprites.Sprites[part]); + } + + public void ModifyMarkings(EntityUid uid, + Entity partAppearance, + HumanoidAppearanceComponent bodyAppearance, + HumanoidVisualLayers targetLayer, + string markingId, + bool remove = false) + { + + if (!Resolve(partAppearance, ref partAppearance.Comp)) + return; + + if (!remove) + { + + if (!_markingManager.Markings.TryGetValue(markingId, out var prototype)) + return; + + var markingColors = MarkingColoring.GetMarkingLayerColors( + prototype, + bodyAppearance.SkinColor, + bodyAppearance.EyeColor, + bodyAppearance.MarkingSet + ); + + var marking = new Marking(markingId, markingColors); + + _humanoid.SetLayerVisibility(uid, targetLayer, true, true, bodyAppearance); + _humanoid.AddMarking(uid, markingId, markingColors, true, true, bodyAppearance); + if (!partAppearance.Comp.Markings.ContainsKey(targetLayer)) + partAppearance.Comp.Markings[targetLayer] = new List(); + + partAppearance.Comp.Markings[targetLayer].Add(marking); + } + //else + //RemovePartMarkings(uid, component, bodyAppearance); + } + + private void HandleState(EntityUid uid, BodyPartAppearanceComponent component, ref AfterAutoHandleStateEvent args) => + ApplyPartMarkings(uid, component); + + private void OnPartAttachedToBody(EntityUid uid, BodyComponent component, ref BodyPartAttachedEvent args) + { + if (!TryComp(args.Part, out BodyPartAppearanceComponent? partAppearance) + || !TryComp(uid, out HumanoidAppearanceComponent? bodyAppearance)) + return; + + if (partAppearance.ID != null) + _humanoid.SetBaseLayerId(uid, partAppearance.Type, partAppearance.ID, sync: true, bodyAppearance); + + UpdateAppearance(uid, partAppearance); + } + + private void OnPartDroppedFromBody(EntityUid uid, BodyComponent component, ref BodyPartDroppedEvent args) + { + if (TerminatingOrDeleted(uid) + || TerminatingOrDeleted(args.Part) + || !TryComp(uid, out HumanoidAppearanceComponent? bodyAppearance)) + return; + + // We check for this conditional here since some entities may not have a profile... If they dont + // have one, and their part is gibbed, the markings will not be removed or applied properly. + if (!HasComp(args.Part)) + EnsureComp(args.Part); + + if (TryComp(args.Part, out var partAppearance)) + RemoveAppearance(uid, partAppearance, args.Part); + } + + protected void UpdateAppearance(EntityUid target, + BodyPartAppearanceComponent component) + { + if (!TryComp(target, out HumanoidAppearanceComponent? bodyAppearance)) + return; + + if (component.EyeColor != null) + bodyAppearance.EyeColor = component.EyeColor.Value; + + if (component.Color != null) + _humanoid.SetBaseLayerColor(target, component.Type, component.Color, true, bodyAppearance); + + _humanoid.SetLayerVisibility(target, component.Type, true, true, bodyAppearance); + + foreach (var (visualLayer, markingList) in component.Markings) + { + _humanoid.SetLayerVisibility(target, visualLayer, true, true, bodyAppearance); + foreach (var marking in markingList) + _humanoid.AddMarking(target, marking.MarkingId, marking.MarkingColors, false, true, bodyAppearance); + } + + Dirty(target, bodyAppearance); + } + + protected void RemoveAppearance(EntityUid entity, BodyPartAppearanceComponent component, EntityUid partEntity) + { + if (!TryComp(entity, out HumanoidAppearanceComponent? bodyAppearance)) + return; + + foreach (var (visualLayer, markingList) in component.Markings) + { + _humanoid.SetLayerVisibility(entity, visualLayer, false, true, bodyAppearance); + } + RemoveBodyMarkings(entity, component, bodyAppearance); + } + + protected abstract void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component); + + protected abstract void RemoveBodyMarkings(EntityUid target, BodyPartAppearanceComponent partAppearance, HumanoidAppearanceComponent bodyAppearance); +} diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index ee79faa0b8e..be03fa6f404 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -1,28 +1,55 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; using Content.Shared.Body.Components; using Content.Shared.Body.Events; using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; +using Content.Shared.Humanoid; +using Content.Shared.Inventory; using Content.Shared.Movement.Components; +using Content.Shared.Random; +using Content.Shared.Targeting.Events; using Robust.Shared.Containers; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; +using System.Linq; namespace Content.Shared.Body.Systems; public partial class SharedBodySystem { + [Dependency] private readonly RandomHelperSystem _randomHelper = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; private void InitializeParts() { // TODO: This doesn't handle comp removal on child ents. // If you modify this also see the Body partial for root parts. + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnBodyPartRemove); SubscribeLocalEvent(OnBodyPartInserted); SubscribeLocalEvent(OnBodyPartRemoved); + SubscribeLocalEvent(OnAmputateAttempt); + SubscribeLocalEvent(OnPartEnableChanged); } + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + if (ent.Comp.PartType == BodyPartType.Torso) + { + // For whatever reason this slot is initialized properly on the server, but not on the client. + // This seems to be an issue due to wiz-merge, on my old branch it was properly instantiating + // ItemInsertionSlot's container on both ends. It does show up properly on ItemSlotsComponent though. + _slots.AddItemSlot(ent, ent.Comp.ContainerName, ent.Comp.ItemInsertionSlot); + Dirty(ent, ent.Comp); + } + } + + private void OnBodyPartRemove(Entity ent, ref ComponentRemove args) + { + if (ent.Comp.PartType == BodyPartType.Torso) + _slots.RemoveItemSlot(ent, ent.Comp.ItemInsertionSlot); + } private void OnBodyPartInserted(Entity ent, ref EntInsertedIntoContainerMessage args) { // Body part inserted into another body part. @@ -47,12 +74,12 @@ private void OnBodyPartRemoved(Entity ent, ref EntRemovedFrom // Body part removed from another body part. var removedUid = args.Entity; var slotId = args.Container.ID; - DebugTools.Assert(!TryComp(removedUid, out BodyPartComponent? b) || b.Body == ent.Comp.Body); DebugTools.Assert(!TryComp(removedUid, out OrganComponent? o) || o.Body == ent.Comp.Body); if (TryComp(removedUid, out BodyPartComponent? part) && part.Body is not null) { + CheckBodyPart((removedUid, part), GetTargetBodyPart(part), true); RemovePart(part.Body.Value, (removedUid, part), slotId); RecursiveBodyUpdate((removedUid, part), null); } @@ -93,6 +120,8 @@ private void RecursiveBodyUpdate(Entity ent, EntityUid? bodyU } } + // The code for RemovePartEffect() should live here, because it literally is the point of this recursive function. + // But the debug asserts at the top plus existing tests need refactoring for this. So we'll be lazy. foreach (var slotId in ent.Comp.Children.Keys) { if (!Containers.TryGetContainer(ent, GetPartSlotContainerId(slotId), out var container)) @@ -116,7 +145,6 @@ protected virtual void AddPart( var ev = new BodyPartAddedEvent(slotId, partEnt); RaiseLocalEvent(bodyEnt, ref ev); - AddLeg(partEnt, bodyEnt); } @@ -127,15 +155,37 @@ protected virtual void RemovePart( { Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false); Dirty(partEnt, partEnt.Comp); - partEnt.Comp.Body = null; + partEnt.Comp.ParentSlot = null; + partEnt.Comp.OriginalBody = partEnt.Comp.Body; var ev = new BodyPartRemovedEvent(slotId, partEnt); RaiseLocalEvent(bodyEnt, ref ev); - RemoveLeg(partEnt, bodyEnt); + RemovePartEffect(partEnt, bodyEnt); PartRemoveDamage(bodyEnt, partEnt); } + protected virtual void DropPart(Entity partEnt) + { + ChangeSlotState(partEnt, true); + // I don't know if this can cause issues, since any part that's being detached HAS to have a Body. + // though I really just want the compiler to shut the fuck up. + var body = partEnt.Comp.Body.GetValueOrDefault(); + if (TryComp(partEnt, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + var enableEvent = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(partEnt, ref enableEvent); + var droppedEvent = new BodyPartDroppedEvent(partEnt); + RaiseLocalEvent(body, ref droppedEvent); + SharedTransform.AttachToGridOrMap(partEnt, transform); + _randomHelper.RandomOffset(partEnt, 0.5f); + } + + } + + private void OnAmputateAttempt(Entity partEnt, ref AmputateAttemptEvent args) => + DropPart(partEnt); + private void AddLeg(Entity legEnt, Entity bodyEnt) { if (!Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) @@ -159,11 +209,41 @@ private void RemoveLeg(Entity legEnt, Entity bodyEnt.Comp.LegEntities.Remove(legEnt); UpdateMovementSpeed(bodyEnt); Dirty(bodyEnt, bodyEnt.Comp); + Standing.Down(bodyEnt); + } + } + + // TODO: Refactor this crap. + private void RemovePartEffect(Entity partEnt, Entity bodyEnt) + { + if (TerminatingOrDeleted(bodyEnt) + || !Resolve(bodyEnt, ref bodyEnt.Comp, logMissing: false)) + return; + + RemovePartChildren(partEnt, bodyEnt, bodyEnt.Comp); + } + + protected void RemovePartChildren(Entity partEnt, EntityUid bodyEnt, BodyComponent? body = null) + { + if (!Resolve(bodyEnt, ref body, logMissing: false)) + return; - if (!bodyEnt.Comp.LegEntities.Any()) + if (partEnt.Comp.Children.Any()) + { + foreach (var slotId in partEnt.Comp.Children.Keys) { - Standing.Down(bodyEnt); + if (Containers.TryGetContainer(partEnt, GetPartSlotContainerId(slotId), out var container) && + container is ContainerSlot slot && + slot.ContainedEntity is { } childEntity && + TryComp(childEntity, out BodyPartComponent? childPart)) + { + var ev = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(childEntity, ref ev); + DropPart((childEntity, childPart)); + } } + + Dirty(bodyEnt, body); } } @@ -177,9 +257,94 @@ private void PartRemoveDamage(Entity bodyEnt, Entity("Bloodloss"), 300); - Damageable.TryChangeDamage(bodyEnt, damage); + var damage = new DamageSpecifier(Prototypes.Index("Bloodloss"), partEnt.Comp.VitalDamage); + Damageable.TryChangeDamage(bodyEnt, damage, partMultiplier: 0f); + } + } + + private void OnPartEnableChanged(Entity partEnt, ref BodyPartEnableChangedEvent args) + { + if (!partEnt.Comp.CanEnable && args.Enabled) + return; + + partEnt.Comp.Enabled = args.Enabled; + Dirty(partEnt, partEnt.Comp); + + if (args.Enabled) + EnablePart(partEnt); + else + DisablePart(partEnt); + } + + private void EnablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + // I hate having to hardcode these checks so much. + if (partEnt.Comp.PartType == BodyPartType.Leg) + AddLeg(partEnt, (partEnt.Comp.Body.Value, body)); + + if (partEnt.Comp.PartType == BodyPartType.Arm) + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); + if (hand != default) + { + var ev = new BodyPartEnabledEvent(hand); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + if (partEnt.Comp.PartType == BodyPartType.Hand) + { + var ev = new BodyPartEnabledEvent(partEnt); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + /// + /// This function handles disabling or enabling equipment slots when an entity is + /// missing all of a given part type, or they get one added to them. + /// It is called right before dropping a part, or right after adding one. + /// + public void ChangeSlotState(Entity partEnt, bool disable) + { + if (partEnt.Comp.Body is not null + && GetBodyPartCount(partEnt.Comp.Body.Value, partEnt.Comp.PartType) == 1 + && TryGetPartSlotContainerName(partEnt.Comp.PartType, out var containerNames)) + { + foreach (var containerName in containerNames) + { + _inventorySystem.SetSlotStatus(partEnt.Comp.Body.Value, containerName, disable); + var ev = new RefreshInventorySlotsEvent(containerName); + RaiseLocalEvent(partEnt.Comp.Body.Value, ev); + } + } + + } + + private void DisablePart(Entity partEnt) + { + if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) + return; + + if (partEnt.Comp.PartType == BodyPartType.Leg) + RemoveLeg(partEnt, (partEnt.Comp.Body.Value, body)); + + if (partEnt.Comp.PartType == BodyPartType.Arm) + { + var hand = GetBodyChildrenOfType(partEnt.Comp.Body.Value, BodyPartType.Hand, symmetry: partEnt.Comp.Symmetry).FirstOrDefault(); + if (hand != default) + { + var ev = new BodyPartDisabledEvent(hand); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); + } + } + + if (partEnt.Comp.PartType == BodyPartType.Hand) + { + var ev = new BodyPartDisabledEvent(partEnt); + RaiseLocalEvent(partEnt.Comp.Body.Value, ref ev); } } @@ -438,12 +603,21 @@ public bool AttachPart( return false; } + if (!Containers.TryGetContainer(parentPartId, GetPartSlotContainerId(slot.Id), out var container)) { DebugTools.Assert($"Unable to find body slot {slot.Id} for {ToPrettyString(parentPartId)}"); return false; } + part.ParentSlot = slot; + + if (TryComp(parentPart.Body, out HumanoidAppearanceComponent? bodyAppearance) + && !HasComp(partId) + && !TerminatingOrDeleted(parentPartId) + && !TerminatingOrDeleted(partId)) // Saw some exceptions involving these due to the spawn menu. + EnsureComp(partId); + return Containers.Insert(partId, container); } @@ -656,11 +830,12 @@ public bool BodyHasChild( public IEnumerable<(EntityUid Id, BodyPartComponent Component)> GetBodyChildrenOfType( EntityUid bodyId, BodyPartType type, - BodyComponent? body = null) + BodyComponent? body = null, + BodyPartSymmetry? symmetry = null) { foreach (var part in GetBodyChildren(bodyId, body)) { - if (part.Component.PartType == type) + if (part.Component.PartType == type && (symmetry == null || part.Component.Symmetry == symmetry)) yield return part; } } @@ -722,6 +897,49 @@ public bool TryGetBodyPartOrganComponents( return false; } + /// + /// Tries to get a list of ValueTuples of EntityUid and OrganComponent on each organ + /// in the given part. + /// + /// The part entity id to check on. + /// The type of component to check for. + /// The part to check for organs on. + /// The organs found on the body part. + /// Whether any were found. + /// + /// This method is somewhat of a copout to the fact that we can't use reflection to generically + /// get the type of component on runtime due to sandboxing. So we simply do a HasComp check for each organ. + /// + public bool TryGetBodyPartOrgans( + EntityUid uid, + Type type, + [NotNullWhen(true)] out List<(EntityUid Id, OrganComponent Organ)>? organs, + BodyPartComponent? part = null) + { + if (!Resolve(uid, ref part)) + { + organs = null; + return false; + } + + var list = new List<(EntityUid Id, OrganComponent Organ)>(); + + foreach (var organ in GetPartOrgans(uid, part)) + { + if (HasComp(organ.Id, type)) + list.Add((organ.Id, organ.Component)); + } + + if (list.Count != 0) + { + organs = list; + return true; + } + + organs = null; + return false; + } + /// /// Gets the parent body part and all immediate child body parts for the partId. /// @@ -790,5 +1008,31 @@ public bool TryGetBodyPartAdjacentPartsComponents( return false; } + private bool TryGetPartSlotContainerName(BodyPartType partType, out HashSet containerNames) + { + containerNames = partType switch + { + BodyPartType.Arm => new() { "gloves" }, + BodyPartType.Leg => new() { "shoes" }, + BodyPartType.Head => new() { "eyes", "ears", "head", "mask" }, + _ => new() + }; + return containerNames.Count > 0; + } + + public int GetBodyPartCount(EntityUid bodyId, BodyPartType partType, BodyComponent? body = null) + { + if (!Resolve(bodyId, ref body, logMissing: false)) + return 0; + + int count = 0; + foreach (var part in GetBodyChildren(bodyId, body)) + { + if (part.Component.PartType == partType) + count++; + } + return count; + } + #endregion } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs new file mode 100644 index 00000000000..9a7c9bc889e --- /dev/null +++ b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs @@ -0,0 +1,503 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Content.Shared.IdentityManagement; +using Content.Shared.Medical.Surgery.Steps.Parts; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Popups; +using Content.Shared.Standing; +using Content.Shared.Targeting; +using Content.Shared.Targeting.Events; +using Robust.Shared.CPUJob.JobQueues; +using Robust.Shared.CPUJob.JobQueues.Queues; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Content.Shared.Body.Systems; + +public partial class SharedBodySystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + + [Dependency] private readonly SharedPopupSystem _popup = default!; + private readonly string[] _severingDamageTypes = { "Slash", "Pierce", "Blunt" }; + private const double IntegrityJobTime = 0.005; + private readonly JobQueue _integrityJobQueue = new(IntegrityJobTime); + public sealed class IntegrityJob : Job + { + private readonly SharedBodySystem _self; + private readonly Entity _ent; + public IntegrityJob(SharedBodySystem self, Entity ent, double maxTime, CancellationToken cancellation = default) : base(maxTime, cancellation) + { + _self = self; + _ent = ent; + } + + public IntegrityJob(SharedBodySystem self, Entity ent, double maxTime, IStopwatch stopwatch, CancellationToken cancellation = default) : base(maxTime, stopwatch, cancellation) + { + _self = self; + _ent = ent; + } + + protected override Task Process() + { + _self.ProcessIntegrityTick(_ent); + + return Task.FromResult(null); + } + } + + private EntityQuery _queryTargeting; + private void InitializeIntegrityQueue() + { + _queryTargeting = GetEntityQuery(); + SubscribeLocalEvent(OnBeforeDamageChanged); + SubscribeLocalEvent(OnBodyDamageModify); + SubscribeLocalEvent(OnPartDamageModify); + SubscribeLocalEvent(OnDamageChanged); + } + + private void ProcessIntegrityTick(Entity entity) + { + if (!TryComp(entity, out var damageable)) + return; + + var damage = damageable.TotalDamage; + + if (entity.Comp is { Body: { } body } + && damage > entity.Comp.MinIntegrity + && damage <= entity.Comp.IntegrityThresholds[TargetIntegrity.HeavilyWounded] + && _queryTargeting.HasComp(body) + && !_mobState.IsDead(body)) + _damageable.TryChangeDamage(entity, GetHealingSpecifier(entity), canSever: false, targetPart: GetTargetBodyPart(entity)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + _integrityJobQueue.Process(); + + if (!_timing.IsFirstTimePredicted) + return; + + using var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out var part)) + { + part.HealingTimer += frameTime; + + if (part.HealingTimer >= part.HealingTime) + { + part.HealingTimer = 0; + _integrityJobQueue.EnqueueJob(new IntegrityJob(this, (ent, part), IntegrityJobTime)); + } + } + } + + private void OnBeforeDamageChanged(Entity ent, ref BeforeDamageChangedEvent args) + { + // If our target has a TargetingComponent, that means they will take limb damage + // And if their attacker also has one, then we use that part. + if (_queryTargeting.TryComp(ent, out var targetEnt)) + { + var damage = args.Damage; + TargetBodyPart? targetPart = null; + + if (args.TargetPart != null) + { + targetPart = args.TargetPart; + } + else if (args.Origin.HasValue && _queryTargeting.TryComp(args.Origin.Value, out var targeter)) + { + targetPart = targeter.Target; + // If the target is Torso then have a 33% chance to hit another part + if (targetPart.Value == TargetBodyPart.Torso) + { + var additionalPart = GetRandomPartSpread(_random, 10); + targetPart = targetPart.Value | additionalPart; + } + } + else + { + // If there's an origin in this case, that means it comes from an entity without TargetingComponent, + // such as an animal, so we attack a random part. + if (args.Origin.HasValue) + { + targetPart = GetRandomBodyPart(ent, targetEnt); + } + // Otherwise we damage all parts equally (barotrauma, explosions, etc). + else if (damage != null) + { + // Division by 2 cuz damaging all parts by the same damage by default is too much. + damage /= 2; + targetPart = TargetBodyPart.All; + } + } + + if (targetPart == null) + return; + + if (!TryChangePartDamage(ent, args.Damage, args.CanSever, args.CanEvade, args.PartMultiplier, targetPart.Value) + && args.CanEvade) + { + if (_net.IsServer) + _popup.PopupEntity(Loc.GetString("surgery-part-damage-evaded", ("user", Identity.Entity(ent, EntityManager))), ent); + + args.Evaded = true; + } + } + } + + private void OnBodyDamageModify(Entity bodyEnt, ref DamageModifyEvent args) + { + if (args.TargetPart != null) + { + var (targetType, _) = ConvertTargetBodyPart(args.TargetPart.Value); + args.Damage = args.Damage * GetPartDamageModifier(targetType); + } + } + + private void OnPartDamageModify(Entity partEnt, ref DamageModifyEvent args) + { + if (partEnt.Comp.Body != null + && TryComp(partEnt.Comp.Body.Value, out DamageableComponent? damageable) + && damageable.DamageModifierSetId != null + && _prototypeManager.TryIndex(damageable.DamageModifierSetId, out var modifierSet)) + // TODO: We need to add a check to see if the given armor covers this part to cancel or not. + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modifierSet); + + if (_prototypeManager.TryIndex("PartDamage", out var partModifierSet)) + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, partModifierSet); + + args.Damage = args.Damage * GetPartDamageModifier(partEnt.Comp.PartType); + } + + private bool TryChangePartDamage(EntityUid entity, + DamageSpecifier damage, + bool canSever, + bool canEvade, + float partMultiplier, + TargetBodyPart targetParts) + { + var landed = false; + var targets = SharedTargetingSystem.GetValidParts(); + foreach (var target in targets) + { + if (!targetParts.HasFlag(target)) + continue; + + var (targetType, targetSymmetry) = ConvertTargetBodyPart(target); + if (GetBodyChildrenOfType(entity, targetType, symmetry: targetSymmetry) is { } part) + { + if (canEvade && TryEvadeDamage(entity, GetEvadeChance(targetType))) + continue; + + var damageResult = _damageable.TryChangeDamage(part.FirstOrDefault().Id, damage * partMultiplier, canSever: canSever); + if (damageResult != null && damageResult.GetTotal() != 0) + landed = true; + } + } + + return landed; + } + + private void OnDamageChanged(Entity partEnt, ref DamageChangedEvent args) + { + if (!TryComp(partEnt, out var damageable)) + return; + + var severed = false; + var partIdSlot = GetParentPartAndSlotOrNull(partEnt)?.Slot; + var delta = args.DamageDelta; + + if (args.CanSever + && partIdSlot is not null + && delta != null + && !HasComp(partEnt) + && !partEnt.Comp.Enabled + && damageable.TotalDamage >= partEnt.Comp.SeverIntegrity + && _severingDamageTypes.Any(damageType => delta.DamageDict.TryGetValue(damageType, out var value) && value > 0)) + severed = true; + + CheckBodyPart(partEnt, GetTargetBodyPart(partEnt), severed, damageable); + + if (severed) + DropPart(partEnt); + + Dirty(partEnt, partEnt.Comp); + } + + /// + /// Gets the random body part rolling a number between 1 and 9, and returns + /// Torso if the result is 9 or more. The higher torsoWeight is, the higher chance to return it. + /// By default, the chance to return Torso is 50%. + /// + private static TargetBodyPart GetRandomPartSpread(IRobustRandom random, ushort torsoWeight = 9) + { + const int targetPartsAmount = 9; + // 5 = amount of target parts except Torso + return random.Next(1, targetPartsAmount + torsoWeight) switch + { + 1 => TargetBodyPart.Head, + 2 => TargetBodyPart.RightArm, + 3 => TargetBodyPart.RightHand, + 4 => TargetBodyPart.LeftArm, + 5 => TargetBodyPart.LeftHand, + 6 => TargetBodyPart.RightLeg, + 7 => TargetBodyPart.RightFoot, + 8 => TargetBodyPart.LeftLeg, + 9 => TargetBodyPart.LeftFoot, + _ => TargetBodyPart.Torso, + }; + } + + public TargetBodyPart? GetRandomBodyPart(EntityUid uid, TargetingComponent? target = null) + { + if (!Resolve(uid, ref target)) + return null; + + var totalWeight = target.TargetOdds.Values.Sum(); + var randomValue = _random.NextFloat() * totalWeight; + + foreach (var (part, weight) in target.TargetOdds) + { + if (randomValue <= weight) + return part; + randomValue -= weight; + } + + return TargetBodyPart.Torso; // Default to torso if something goes wrong + } + + /// + /// This should be called after body part damage was changed. + /// + protected void CheckBodyPart( + Entity partEnt, + TargetBodyPart? targetPart, + bool severed, + DamageableComponent? damageable = null) + { + if (!Resolve(partEnt, ref damageable)) + return; + + var integrity = damageable.TotalDamage; + + // KILL the body part + if (partEnt.Comp.Enabled && integrity >= partEnt.Comp.IntegrityThresholds[TargetIntegrity.CriticallyWounded]) + { + var ev = new BodyPartEnableChangedEvent(false); + RaiseLocalEvent(partEnt, ref ev); + } + + // LIVE the body part + if (!partEnt.Comp.Enabled && integrity <= partEnt.Comp.IntegrityThresholds[partEnt.Comp.EnableIntegrity] && !severed) + { + var ev = new BodyPartEnableChangedEvent(true); + RaiseLocalEvent(partEnt, ref ev); + } + + if (_queryTargeting.TryComp(partEnt.Comp.Body, out var targeting) + && HasComp(partEnt.Comp.Body)) + { + var newIntegrity = GetIntegrityThreshold(partEnt.Comp, integrity.Float(), severed); + // We need to check if the part is dead to prevent the UI from showing dead parts as alive. + if (targetPart is not null && + targeting.BodyStatus.ContainsKey(targetPart.Value) && + targeting.BodyStatus[targetPart.Value] != TargetIntegrity.Dead) + { + targeting.BodyStatus[targetPart.Value] = newIntegrity; + if (targetPart.Value == TargetBodyPart.Torso) + targeting.BodyStatus[TargetBodyPart.Groin] = newIntegrity; + + Dirty(partEnt.Comp.Body.Value, targeting); + } + // Revival events are handled by the server, so we end up being locked to a network event. + // I hope you like the _net.IsServer, Remuchi :) + if (_net.IsServer) + RaiseNetworkEvent(new TargetIntegrityChangeEvent(GetNetEntity(partEnt.Comp.Body.Value)), partEnt.Comp.Body.Value); + } + } + + /// + /// Gets the integrity of all body parts in the entity. + /// + public Dictionary GetBodyPartStatus(EntityUid entityUid) + { + var result = new Dictionary(); + + if (!TryComp(entityUid, out var body)) + return result; + + foreach (var part in SharedTargetingSystem.GetValidParts()) + { + result[part] = TargetIntegrity.Severed; + } + + foreach (var partComponent in GetBodyChildren(entityUid, body)) + { + var targetBodyPart = GetTargetBodyPart(partComponent.Component.PartType, partComponent.Component.Symmetry); + + if (targetBodyPart != null && TryComp(partComponent.Id, out var damageable)) + result[targetBodyPart.Value] = GetIntegrityThreshold(partComponent.Component, damageable.TotalDamage.Float(), false); + } + + // Hardcoded shitcode for Groin :) + result[TargetBodyPart.Groin] = result[TargetBodyPart.Torso]; + + return result; + } + + public TargetBodyPart? GetTargetBodyPart(Entity part) => GetTargetBodyPart(part.Comp.PartType, part.Comp.Symmetry); + public TargetBodyPart? GetTargetBodyPart(BodyPartComponent part) => GetTargetBodyPart(part.PartType, part.Symmetry); + + /// + /// Converts Enums from BodyPartType to their Targeting system equivalent. + /// + public TargetBodyPart? GetTargetBodyPart(BodyPartType type, BodyPartSymmetry symmetry) + { + return (type, symmetry) switch + { + (BodyPartType.Head, _) => TargetBodyPart.Head, + (BodyPartType.Torso, _) => TargetBodyPart.Torso, + (BodyPartType.Arm, BodyPartSymmetry.Left) => TargetBodyPart.LeftArm, + (BodyPartType.Arm, BodyPartSymmetry.Right) => TargetBodyPart.RightArm, + (BodyPartType.Hand, BodyPartSymmetry.Left) => TargetBodyPart.LeftHand, + (BodyPartType.Hand, BodyPartSymmetry.Right) => TargetBodyPart.RightHand, + (BodyPartType.Leg, BodyPartSymmetry.Left) => TargetBodyPart.LeftLeg, + (BodyPartType.Leg, BodyPartSymmetry.Right) => TargetBodyPart.RightLeg, + (BodyPartType.Foot, BodyPartSymmetry.Left) => TargetBodyPart.LeftFoot, + (BodyPartType.Foot, BodyPartSymmetry.Right) => TargetBodyPart.RightFoot, + _ => null + }; + } + + /// + /// Converts Enums from Targeting system to their BodyPartType equivalent. + /// + public (BodyPartType Type, BodyPartSymmetry Symmetry) ConvertTargetBodyPart(TargetBodyPart targetPart) + { + return targetPart switch + { + TargetBodyPart.Head => (BodyPartType.Head, BodyPartSymmetry.None), + TargetBodyPart.Torso => (BodyPartType.Torso, BodyPartSymmetry.None), + TargetBodyPart.Groin => (BodyPartType.Torso, BodyPartSymmetry.None), // TODO: Groin is not a part type yet + TargetBodyPart.LeftArm => (BodyPartType.Arm, BodyPartSymmetry.Left), + TargetBodyPart.LeftHand => (BodyPartType.Hand, BodyPartSymmetry.Left), + TargetBodyPart.RightArm => (BodyPartType.Arm, BodyPartSymmetry.Right), + TargetBodyPart.RightHand => (BodyPartType.Hand, BodyPartSymmetry.Right), + TargetBodyPart.LeftLeg => (BodyPartType.Leg, BodyPartSymmetry.Left), + TargetBodyPart.LeftFoot => (BodyPartType.Foot, BodyPartSymmetry.Left), + TargetBodyPart.RightLeg => (BodyPartType.Leg, BodyPartSymmetry.Right), + TargetBodyPart.RightFoot => (BodyPartType.Foot, BodyPartSymmetry.Right), + _ => (BodyPartType.Torso, BodyPartSymmetry.None) + }; + + } + + public DamageSpecifier GetHealingSpecifier(BodyPartComponent part) + { + var damage = new DamageSpecifier() + { + DamageDict = new Dictionary() + { + { "Blunt", -part.SelfHealingAmount }, + { "Slash", -part.SelfHealingAmount }, + { "Piercing", -part.SelfHealingAmount }, + { "Heat", -part.SelfHealingAmount }, + { "Cold", -part.SelfHealingAmount }, + { "Shock", -part.SelfHealingAmount }, + { "Caustic", -part.SelfHealingAmount * 0.1}, // not much caustic healing + } + }; + + return damage; + } + + /// + /// Fetches the damage multiplier for part integrity based on part types. + /// + /// TODO: Serialize this per body part. + public static float GetPartDamageModifier(BodyPartType partType) + { + return partType switch + { + BodyPartType.Head => 0.5f, // 50% damage, necks are hard to cut + BodyPartType.Torso => 1.0f, // 100% damage + BodyPartType.Arm => 0.7f, // 70% damage + BodyPartType.Hand => 0.7f, // 70% damage + BodyPartType.Leg => 0.7f, // 70% damage + BodyPartType.Foot => 0.7f, // 70% damage + _ => 0.5f + }; + } + + /// + /// Fetches the TargetIntegrity equivalent of the current integrity value for the body part. + /// + public static TargetIntegrity GetIntegrityThreshold(BodyPartComponent component, float integrity, bool severed) + { + if (severed) + return TargetIntegrity.Severed; + else if (!component.Enabled) + return TargetIntegrity.Disabled; + + var targetIntegrity = TargetIntegrity.Healthy; + foreach (var threshold in component.IntegrityThresholds) + { + if (integrity <= threshold.Value) + targetIntegrity = threshold.Key; + } + + return targetIntegrity; + } + + /// + /// Fetches the chance to evade integrity damage for a body part. + /// Used when the entity is not dead, laying down, or incapacitated. + /// + public static float GetEvadeChance(BodyPartType partType) + { + return partType switch + { + BodyPartType.Head => 0.70f, // 70% chance to evade + BodyPartType.Arm => 0.20f, // 20% chance to evade + BodyPartType.Hand => 0.20f, // 20% chance to evade + BodyPartType.Leg => 0.20f, // 20% chance to evade + BodyPartType.Foot => 0.20f, // 20% chance to evade + BodyPartType.Torso => 0f, // 0% chance to evade + _ => 0f + }; + } + + public bool CanEvadeDamage(EntityUid uid) + { + if (!TryComp(uid, out var mobState) + || !TryComp(uid, out var standingState) + || _mobState.IsCritical(uid, mobState) + || _mobState.IsDead(uid, mobState) + || standingState.CurrentState == StandingState.Lying) + return false; + + return true; + } + + public bool TryEvadeDamage(EntityUid uid, float evadeChance) + { + if (!CanEvadeDamage(uid)) + return false; + + return _random.NextFloat() < evadeChance; + } + +} diff --git a/Content.Shared/Body/Systems/SharedBodySystem.cs b/Content.Shared/Body/Systems/SharedBodySystem.cs index a45966fcc37..013e302633b 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.cs @@ -28,7 +28,7 @@ public abstract partial class SharedBodySystem : EntitySystem /// public const string OrganSlotContainerIdPrefix = "body_organ_slot_"; - [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IGameTiming _timing = default!; [Dependency] protected readonly IPrototypeManager Prototypes = default!; [Dependency] protected readonly DamageableSystem Damageable = default!; [Dependency] protected readonly MovementSpeedModifierSystem Movement = default!; @@ -42,6 +42,9 @@ public override void Initialize() InitializeBody(); InitializeParts(); + // To try and mitigate the server load due to integrity checks, we set up a Job Queue. + InitializeIntegrityQueue(); + InitializePartAppearances(); } /// diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 60dceea897e..603855679c4 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2635,6 +2635,12 @@ public static readonly CVarDef #endregion + #region Surgery + + public static readonly CVarDef CanOperateOnSelf = + CVarDef.Create("surgery.can_operate_on_self", false, CVar.SERVERONLY); + + #endregion /// /// Set to true to disable parallel processing in the pow3r solver. /// diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 4aaf380c47d..4d08735d810 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -6,11 +6,14 @@ using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; +using Content.Shared.Body.Systems; using Content.Shared.Radiation.Events; using Content.Shared.Rejuvenate; +using Content.Shared.Targeting; using Robust.Shared.GameStates; using Robust.Shared.Network; using Robust.Shared.Prototypes; +using Robust.Shared.Random; using Robust.Shared.Utility; namespace Content.Shared.Damage @@ -22,10 +25,12 @@ public sealed class DamageableSystem : EntitySystem [Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly IRobustRandom _random = default!; private EntityQuery _appearanceQuery; private EntityQuery _damageableQuery; private EntityQuery _mindContainerQuery; - + private EntityQuery _targetingQuery; public override void Initialize() { SubscribeLocalEvent(DamageableInit); @@ -37,6 +42,7 @@ public override void Initialize() _appearanceQuery = GetEntityQuery(); _damageableQuery = GetEntityQuery(); _mindContainerQuery = GetEntityQuery(); + _targetingQuery = GetEntityQuery(); } /// @@ -98,7 +104,8 @@ public void SetDamage(EntityUid uid, DamageableComponent damageable, DamageSpeci /// The damage changed event is used by other systems, such as damage thresholds. /// public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSpecifier? damageDelta = null, - bool interruptsDoAfters = true, EntityUid? origin = null) + bool interruptsDoAfters = true, EntityUid? origin = null, bool? canSever = null) + { component.Damage.GetDamagePerGroup(_prototypeManager, component.DamagePerGroup); component.TotalDamage = component.Damage.GetTotal(); @@ -109,7 +116,7 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp var data = new DamageVisualizerGroupData(component.DamagePerGroup.Keys.ToList()); _appearance.SetData(uid, DamageVisualizerKeys.DamageUpdateGroups, data, appearance); } - RaiseLocalEvent(uid, new DamageChangedEvent(component, damageDelta, interruptsDoAfters, origin)); + RaiseLocalEvent(uid, new DamageChangedEvent(component, damageDelta, interruptsDoAfters, origin, canSever ?? true)); } /// @@ -125,7 +132,8 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp /// null if the user had no applicable components that can take damage. /// public DamageSpecifier? TryChangeDamage(EntityUid? uid, DamageSpecifier damage, bool ignoreResistances = false, - bool interruptsDoAfters = true, DamageableComponent? damageable = null, EntityUid? origin = null) + bool interruptsDoAfters = true, DamageableComponent? damageable = null, EntityUid? origin = null, + bool? canSever = true, bool? canEvade = false, float? partMultiplier = 1.00f, TargetBodyPart? targetPart = null) { if (!uid.HasValue || !_damageableQuery.Resolve(uid.Value, ref damageable, false)) { @@ -138,10 +146,10 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp return damage; } - var before = new BeforeDamageChangedEvent(damage, origin); + var before = new BeforeDamageChangedEvent(damage, origin, targetPart, canSever ?? true, canEvade ?? false, partMultiplier ?? 1.00f); RaiseLocalEvent(uid.Value, ref before); - if (before.Cancelled) + if (before.Cancelled || before.Evaded) return null; // Apply resistances @@ -152,10 +160,10 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp { // TODO DAMAGE PERFORMANCE // use a local private field instead of creating a new dictionary here.. + // TODO: We need to add a check to see if the given armor covers the targeted part (if any) to modify or not. damage = DamageSpecifier.ApplyModifierSet(damage, modifierSet); } - - var ev = new DamageModifyEvent(damage, origin); + var ev = new DamageModifyEvent(damage, origin, targetPart); RaiseLocalEvent(uid.Value, ev); damage = ev.Damage; @@ -187,7 +195,7 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp } if (delta.DamageDict.Count > 0) - DamageChanged(uid.Value, damageable, delta, interruptsDoAfters, origin); + DamageChanged(uid.Value, damageable, delta, interruptsDoAfters, origin, canSever); return delta; } @@ -257,6 +265,11 @@ private void OnRejuvenate(EntityUid uid, DamageableComponent component, Rejuvena TryComp(uid, out var thresholds); _mobThreshold.SetAllowRevives(uid, true, thresholds); // do this so that the state changes when we set the damage SetAllDamage(uid, component, 0); + // Shitmed Start + if (HasComp(uid)) + foreach (var part in _body.GetBodyChildren(uid)) + RaiseLocalEvent(part.Id, new RejuvenateEvent()); + // Shitmed End _mobThreshold.SetAllowRevives(uid, false, thresholds); } @@ -286,7 +299,15 @@ private void DamageableHandleState(EntityUid uid, DamageableComponent component, /// Raised before damage is done, so stuff can cancel it if necessary. /// [ByRefEvent] - public record struct BeforeDamageChangedEvent(DamageSpecifier Damage, EntityUid? Origin = null, bool Cancelled = false); + public record struct BeforeDamageChangedEvent( + DamageSpecifier Damage, + EntityUid? Origin = null, + TargetBodyPart? TargetPart = null, + bool CanSever = true, + bool CanEvade = false, + float PartMultiplier = 1.00f, + bool Evaded = false, + bool Cancelled = false); /// /// Raised on an entity when damage is about to be dealt, @@ -299,16 +320,17 @@ public sealed class DamageModifyEvent : EntityEventArgs, IInventoryRelayEvent { // Whenever locational damage is a thing, this should just check only that bit of armour. public SlotFlags TargetSlots { get; } = ~SlotFlags.POCKET; - public readonly DamageSpecifier OriginalDamage; public DamageSpecifier Damage; public EntityUid? Origin; + public readonly TargetBodyPart? TargetPart; - public DamageModifyEvent(DamageSpecifier damage, EntityUid? origin = null) + public DamageModifyEvent(DamageSpecifier damage, EntityUid? origin = null, TargetBodyPart? targetPart = null) { OriginalDamage = damage; Damage = damage; Origin = origin; + TargetPart = targetPart; } } @@ -347,11 +369,17 @@ public sealed class DamageChangedEvent : EntityEventArgs /// public readonly EntityUid? Origin; - public DamageChangedEvent(DamageableComponent damageable, DamageSpecifier? damageDelta, bool interruptsDoAfters, EntityUid? origin) + /// + /// Can this damage event sever parts? + /// + public readonly bool CanSever; + + public DamageChangedEvent(DamageableComponent damageable, DamageSpecifier? damageDelta, bool interruptsDoAfters, EntityUid? origin, bool canSever = true) { Damageable = damageable; DamageDelta = damageDelta; Origin = origin; + CanSever = canSever; if (DamageDelta == null) return; diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index 919d55f294a..a7464e5bac7 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -29,6 +29,7 @@ public sealed partial class HandsComponent : Component /// /// List of hand-names. These are keys for . The order of this list determines the order in which hands are iterated over. /// + [ViewVariables] public List SortedHands = new(); /// diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs index 40f2c5bbd59..ead824e712e 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Administration.Logs; using Content.Shared.Hands.Components; using Content.Shared.Interaction; +using Content.Shared.Inventory; using Content.Shared.Inventory.VirtualItem; using Content.Shared.Storage.EntitySystems; using Robust.Shared.Containers; @@ -17,6 +18,7 @@ public abstract partial class SharedHandsSystem [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; [Dependency] private readonly SharedStorageSystem _storage = default!; [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; [Dependency] private readonly SharedVirtualItemSystem _virtualSystem = default!; diff --git a/Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs b/Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs new file mode 100644 index 00000000000..afe78a15172 --- /dev/null +++ b/Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Humanoid.Events; + +/// +/// Raised on an entity when their profile has finished being loaded +/// +public sealed class ProfileLoadFinishedEvent : EntityEventArgs { } + diff --git a/Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs b/Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs index 0f8b940bd66..17912e400a5 100644 --- a/Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs +++ b/Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs @@ -47,18 +47,30 @@ public static IEnumerable Sublayers(HumanoidVisualLayers l yield return HumanoidVisualLayers.LArm; yield return HumanoidVisualLayers.LHand; break; + case HumanoidVisualLayers.LHand: + yield return HumanoidVisualLayers.LHand; + break; case HumanoidVisualLayers.RArm: yield return HumanoidVisualLayers.RArm; yield return HumanoidVisualLayers.RHand; break; + case HumanoidVisualLayers.RHand: + yield return HumanoidVisualLayers.RHand; + break; case HumanoidVisualLayers.LLeg: yield return HumanoidVisualLayers.LLeg; yield return HumanoidVisualLayers.LFoot; break; + case HumanoidVisualLayers.LFoot: + yield return HumanoidVisualLayers.LFoot; + break; case HumanoidVisualLayers.RLeg: yield return HumanoidVisualLayers.RLeg; yield return HumanoidVisualLayers.RFoot; break; + case HumanoidVisualLayers.RFoot: + yield return HumanoidVisualLayers.RFoot; + break; case HumanoidVisualLayers.Chest: yield return HumanoidVisualLayers.Chest; yield return HumanoidVisualLayers.Tail; diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index a1e8bec2cd8..f33c65b5915 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Examine; using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; +using Content.Shared.Humanoid.Events; using Content.Shared.IdentityManagement; using Content.Shared.Preferences; using Content.Shared.HeightAdjust; @@ -440,6 +441,7 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile profile, humanoid.LastProfileLoaded = profile; // DeltaV - let paradox anomaly be cloned Dirty(humanoid); + RaiseLocalEvent(uid, new ProfileLoadFinishedEvent()); } /// diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 3f88ca4e20a..699acc87ad3 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -61,6 +61,12 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction ToggleStanding = "ToggleStanding"; public static readonly BoundKeyFunction ToggleCrawlingUnder = "ToggleCrawlingUnder"; public static readonly BoundKeyFunction LookUp = "LookUp"; + public static readonly BoundKeyFunction TargetHead = "TargetHead"; + public static readonly BoundKeyFunction TargetTorso = "TargetTorso"; + public static readonly BoundKeyFunction TargetLeftArm = "TargetLeftArm"; + public static readonly BoundKeyFunction TargetRightArm = "TargetRightArm"; + public static readonly BoundKeyFunction TargetLeftLeg = "TargetLeftLeg"; + public static readonly BoundKeyFunction TargetRightLeg = "TargetRightLeg"; public static readonly BoundKeyFunction ArcadeUp = "ArcadeUp"; public static readonly BoundKeyFunction ArcadeDown = "ArcadeDown"; diff --git a/Content.Shared/Inventory/InventoryComponent.cs b/Content.Shared/Inventory/InventoryComponent.cs index 02b3a5b2583..edc8e6641c1 100644 --- a/Content.Shared/Inventory/InventoryComponent.cs +++ b/Content.Shared/Inventory/InventoryComponent.cs @@ -16,6 +16,7 @@ public sealed partial class InventoryComponent : Component [DataField] public Dictionary Displacements = []; public SlotDefinition[] Slots = Array.Empty(); + public ContainerSlot[] Containers = Array.Empty(); [DataDefinition] diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index e0f2a695576..97f63262dbc 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -1,17 +1,21 @@ +using Content.Shared.Random; using System.Diagnostics.CodeAnalysis; using Content.Shared.Inventory.Events; using Content.Shared.Storage; using Robust.Shared.Containers; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; +using System.Linq; namespace Content.Shared.Inventory; - public partial class InventorySystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IViewVariablesManager _vvm = default!; - + [Dependency] private readonly RandomHelperSystem _randomHelper = default!; + [Dependency] private readonly ISerializationManager _serializationManager = default!; private void InitializeSlots() { SubscribeLocalEvent(OnInit); @@ -57,7 +61,8 @@ protected virtual void OnInit(EntityUid uid, InventoryComponent component, Compo if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate)) return; - component.Slots = invTemplate.Slots; + _serializationManager.CopyTo(invTemplate.Slots, ref component.Slots, notNullableOverride: true); + component.Containers = new ContainerSlot[component.Slots.Length]; for (var i = 0; i < component.Containers.Length; i++) { @@ -115,7 +120,7 @@ public bool TryGetSlot(EntityUid uid, string slot, [NotNullWhen(true)] out SlotD foreach (var slotDef in inventory.Slots) { - if (!slotDef.Name.Equals(slot)) + if (!slotDef.Name.Equals(slot) || slotDef.Disabled) continue; slotDefinition = slotDef; return true; @@ -170,6 +175,37 @@ private IEnumerable ListViewVariablesSlots(EntityUid uid, InventoryCompo } } + public void SetSlotStatus(EntityUid uid, string slotName, bool isDisabled, InventoryComponent? inventory = null) + { + if (!Resolve(uid, ref inventory)) + return; + + foreach (var slot in inventory.Slots) + { + if (slot.Name != slotName) + continue; + + if (isDisabled) + { + if (!TryGetSlotContainer(uid, slotName, out var container, out _, inventory)) + break; + + if (container.ContainedEntity is { } entityUid && TryComp(entityUid, out TransformComponent? transform) && _gameTiming.IsFirstTimePredicted) + { + _transform.AttachToGridOrMap(entityUid, transform); + _randomHelper.RandomOffset(entityUid, 0.5f); + } + //_containerSystem.ShutdownContainer(container); + } + //else + //_containerSystem.EnsureContainer(uid, slotName); + slot.Disabled = isDisabled; + break; + } + + Dirty(uid, inventory); + } + /// /// Enumerator for iterating over an inventory's slot containers. Also has methods that skip empty containers. /// It should be safe to add or remove items while enumerating. @@ -182,12 +218,12 @@ public struct InventorySlotEnumerator private int _nextIdx = 0; public static InventorySlotEnumerator Empty = new(Array.Empty(), Array.Empty()); - public InventorySlotEnumerator(InventoryComponent inventory, SlotFlags flags = SlotFlags.All) + public InventorySlotEnumerator(InventoryComponent inventory, SlotFlags flags = SlotFlags.All) : this(inventory.Slots, inventory.Containers, flags) { } - public InventorySlotEnumerator(SlotDefinition[] slots, ContainerSlot[] containers, SlotFlags flags = SlotFlags.All) + public InventorySlotEnumerator(SlotDefinition[] slots, ContainerSlot[] containers, SlotFlags flags = SlotFlags.All) { DebugTools.Assert(flags != SlotFlags.NONE); DebugTools.AssertEqual(slots.Length, containers.Length); @@ -203,7 +239,7 @@ public bool MoveNext([NotNullWhen(true)] out ContainerSlot? container) var i = _nextIdx++; var slot = _slots[i]; - if ((slot.SlotFlags & _flags) == 0) + if ((slot.SlotFlags & _flags) == 0 || slot.Disabled) continue; container = _containers[i]; @@ -221,7 +257,7 @@ public bool NextItem(out EntityUid item) var i = _nextIdx++; var slot = _slots[i]; - if ((slot.SlotFlags & _flags) == 0) + if ((slot.SlotFlags & _flags) == 0 || slot.Disabled) continue; var container = _containers[i]; diff --git a/Content.Shared/Inventory/InventoryTemplatePrototype.cs b/Content.Shared/Inventory/InventoryTemplatePrototype.cs index a4d77767e37..0d900688fcc 100644 --- a/Content.Shared/Inventory/InventoryTemplatePrototype.cs +++ b/Content.Shared/Inventory/InventoryTemplatePrototype.cs @@ -55,4 +55,9 @@ public sealed partial class SlotDefinition /// Entity blacklist for CanEquip checks. /// [DataField("blacklist")] public EntityWhitelist? Blacklist = null; + + /// + /// Is this slot disabled? Could be due to severing or other reasons. + /// + [DataField] public bool Disabled; } diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryCloseIncisionConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryCloseIncisionConditionComponent.cs new file mode 100644 index 00000000000..bab7e405ad5 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryCloseIncisionConditionComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryCloseIncisionConditionComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryLarvaConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryLarvaConditionComponent.cs new file mode 100644 index 00000000000..3aac5951c6f --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryLarvaConditionComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryLarvaConditionComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryMarkingConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryMarkingConditionComponent.cs new file mode 100644 index 00000000000..f22b1f682e2 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryMarkingConditionComponent.cs @@ -0,0 +1,27 @@ +using Content.Shared.Body.Organ; +using Content.Shared.Humanoid; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryMarkingConditionComponent : Component +{ + + [DataField] + public bool Inverse; + + /// + /// The marking category to check for. + /// + [DataField] + public HumanoidVisualLayers MarkingCategory = default!; + + /// + /// Can be either a segment of a marking ID, or an entire ID that will be checked + /// against the entity to validate that the marking is not already present. + /// + [DataField] + public String MatchString = ""; +} diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryOperatingTableConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryOperatingTableConditionComponent.cs new file mode 100644 index 00000000000..0c43549e669 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryOperatingTableConditionComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryOperatingTableConditionComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryOrganConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryOrganConditionComponent.cs new file mode 100644 index 00000000000..c8c475f115a --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryOrganConditionComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Body.Organ; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryOrganConditionComponent : Component +{ + [DataField] + public ComponentRegistry? Organ; + + [DataField] + public bool Inverse; + + [DataField] + public bool Reattaching; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryPartConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartConditionComponent.cs new file mode 100644 index 00000000000..08a89eb9e1b --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartConditionComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryPartConditionComponent : Component +{ + [DataField] + public BodyPartType Part; + + [DataField] + public BodyPartSymmetry? Symmetry; + + [DataField] + public bool Inverse; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryPartPresentCondition.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartPresentCondition.cs new file mode 100644 index 00000000000..608f90ba4cb --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartPresentCondition.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryPartPresentConditionComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs new file mode 100644 index 00000000000..fb51ab5b060 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryPartRemovedConditionComponent : Component +{ + [DataField] + public BodyPartType Part; + + [DataField] + public BodyPartSymmetry? Symmetry; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryValidEvent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryValidEvent.cs new file mode 100644 index 00000000000..da769a457ac --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryValidEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.Body.Part; + +namespace Content.Shared.Medical.Surgery.Conditions; + +/// +/// Raised on the entity that is receiving surgery. +/// +[ByRefEvent] +public record struct SurgeryValidEvent(EntityUid Body, EntityUid Part, bool Cancelled = false, BodyPartType PartType = default, BodyPartSymmetry? Symmetry = default); \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryWoundedConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryWoundedConditionComponent.cs new file mode 100644 index 00000000000..2279fcd0440 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryWoundedConditionComponent.cs @@ -0,0 +1,7 @@ +using Content.Shared.Body.Part; +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Conditions; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryWoundedConditionComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryCompletedEvent.cs b/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryCompletedEvent.cs new file mode 100644 index 00000000000..a0e040fbe7a --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryCompletedEvent.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Medical.Surgery.Effects.Complete; + +/// +/// Raised on the entity that received the surgery. +/// +[ByRefEvent] +public record struct SurgeryCompletedEvent; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryRemoveLarvaComponent.cs b/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryRemoveLarvaComponent.cs new file mode 100644 index 00000000000..2077dfa53b8 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Complete/SurgeryRemoveLarvaComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Effects.Complete; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryRemoveLarvaComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs new file mode 100644 index 00000000000..0db43011a08 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryDamageChangeEffectComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryDamageChangeEffectComponent : Component +{ + [DataField] + public DamageSpecifier Damage = default!; + + [DataField] + public float SleepModifier = 0.5f; + + [DataField] + public bool IsConsumable; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgerySpecialDamageChangeEffectComponent.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgerySpecialDamageChangeEffectComponent.cs new file mode 100644 index 00000000000..e375865277f --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgerySpecialDamageChangeEffectComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgerySpecialDamageChangeEffectComponent : Component +{ + [DataField] + public string DamageType = ""; + + [DataField] + public bool IsConsumable; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepCavityEffectComponent.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepCavityEffectComponent.cs new file mode 100644 index 00000000000..61300425a7d --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepCavityEffectComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryStepCavityEffectComponent : Component +{ + [DataField] + public string Action = "Insert"; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepEmoteEffectComponent.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepEmoteEffectComponent.cs new file mode 100644 index 00000000000..02e8b749eed --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepEmoteEffectComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SurgeryStepEmoteEffectComponent : Component +{ + [DataField, AutoNetworkedField] + public ProtoId Emote = "Scream"; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepSpawnEffect.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepSpawnEffect.cs new file mode 100644 index 00000000000..766713c6f68 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryStepSpawnEffect.cs @@ -0,0 +1,13 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using System.ComponentModel.DataAnnotations; + +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SurgeryStepSpawnEffectComponent : Component +{ + [DataField(required: true), AutoNetworkedField] + public EntProtoId Entity; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Effects/Step/SurgeryTendWoundsEffectComponent.cs b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryTendWoundsEffectComponent.cs new file mode 100644 index 00000000000..58db1422d8f --- /dev/null +++ b/Content.Shared/Medical/Surgery/Effects/Step/SurgeryTendWoundsEffectComponent.cs @@ -0,0 +1,20 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +namespace Content.Shared.Medical.Surgery.Effects.Step; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SurgeryTendWoundsEffectComponent : Component +{ + [DataField, AutoNetworkedField] + public string MainGroup = "Brute"; + + [DataField, AutoNetworkedField] + public bool IsAutoRepeatable = true; + + [DataField, AutoNetworkedField] + public DamageSpecifier Damage = default!; + + [DataField, AutoNetworkedField] + public float HealMultiplier = 0.07f; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/OperatingTableComponent.cs b/Content.Shared/Medical/Surgery/OperatingTableComponent.cs new file mode 100644 index 00000000000..fa0ccf72580 --- /dev/null +++ b/Content.Shared/Medical/Surgery/OperatingTableComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery; + +[RegisterComponent, NetworkedComponent] +public sealed partial class OperatingTableComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs new file mode 100644 index 00000000000..0686bf53095 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs @@ -0,0 +1,755 @@ +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Content.Shared.Bed.Sleep; +using Content.Shared.Body.Part; +using Content.Shared.Body.Organ; +using Content.Shared.Body.Events; +using Content.Shared.Buckle.Components; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.DoAfter; +using Content.Shared.Medical.Surgery.Conditions; +using Content.Shared.Medical.Surgery.Effects.Step; +using Content.Shared.Medical.Surgery.Steps; +using Content.Shared.Medical.Surgery.Steps.Parts; +using Content.Shared.Medical.Surgery.Tools; +using Content.Shared.Mood; +using Content.Shared.Inventory; +using Content.Shared.Item; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; +using Robust.Shared.Toolshed.TypeParsers; +using System.Linq; + +namespace Content.Shared.Medical.Surgery; + +public abstract partial class SharedSurgerySystem +{ + private static readonly string[] BruteDamageTypes = { "Slash", "Blunt", "Piercing" }; + private static readonly string[] BurnDamageTypes = { "Heat", "Shock", "Cold", "Caustic" }; + private void InitializeSteps() + { + SubscribeLocalEvent(OnToolStep); + SubscribeLocalEvent(OnToolCheck); + SubscribeLocalEvent(OnToolCanPerform); + + //SubSurgery(OnCutLarvaRootsStep, OnCutLarvaRootsCheck); + + /* Abandon all hope ye who enter here. Now I am become shitcoder, the bloater of files. + On a serious note, I really hate how much bloat this pattern of subscribing to a StepEvent and a CheckEvent + creates in terms of readability. And while Check DOES only run on the server side, it's still annoying to parse through.*/ + + SubSurgery(OnTendWoundsStep, OnTendWoundsCheck); + SubSurgery(OnCavityStep, OnCavityCheck); + SubSurgery(OnAddPartStep, OnAddPartCheck); + SubSurgery(OnAffixPartStep, OnAffixPartCheck); + SubSurgery(OnRemovePartStep, OnRemovePartCheck); + SubSurgery(OnAddOrganStep, OnAddOrganCheck); + SubSurgery(OnRemoveOrganStep, OnRemoveOrganCheck); + SubSurgery(OnAffixOrganStep, OnAffixOrganCheck); + SubSurgery(OnAddMarkingStep, OnAddMarkingCheck); + SubSurgery(OnRemoveMarkingStep, OnRemoveMarkingCheck); + Subs.BuiEvents(SurgeryUIKey.Key, subs => + { + subs.Event(OnSurgeryTargetStepChosen); + }); + } + + private void SubSurgery(EntityEventRefHandler onStep, + EntityEventRefHandler onComplete) where TComp : IComponent + { + SubscribeLocalEvent(onStep); + SubscribeLocalEvent(onComplete); + } + + private void OnToolStep(Entity ent, ref SurgeryStepEvent args) + { + if (ent.Comp.Tool != null) + { + foreach (var reg in ent.Comp.Tool.Values) + { + if (!AnyHaveComp(args.Tools, reg.Component, out var tool)) + return; + + if (_net.IsServer && + TryComp(tool, out SurgeryToolComponent? toolComp) && + toolComp.EndSound != null) + { + _audio.PlayEntity(toolComp.EndSound, args.User, tool); + } + } + } + + if (ent.Comp.Add != null) + { + foreach (var reg in ent.Comp.Add.Values) + { + var compType = reg.Component.GetType(); + if (HasComp(args.Part, compType)) + continue; + AddComp(args.Part, _compFactory.GetComponent(compType)); + } + } + + if (ent.Comp.Remove != null) + { + foreach (var reg in ent.Comp.Remove.Values) + { + RemComp(args.Part, reg.Component.GetType()); + } + } + + if (ent.Comp.BodyRemove != null) + { + foreach (var reg in ent.Comp.BodyRemove.Values) + { + RemComp(args.Body, reg.Component.GetType()); + } + } + + if (!HasComp(args.Body)) + RaiseLocalEvent(args.Body, new MoodEffectEvent("SurgeryPain")); + + if (!_inventory.TryGetSlotEntity(args.User, "gloves", out var _) + || !_inventory.TryGetSlotEntity(args.User, "mask", out var _)) + { + var sepsis = new DamageSpecifier(_prototypes.Index("Poison"), 5); + var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, sepsis, 0.5f); + RaiseLocalEvent(args.Body, ref ev); + } + } + + private void OnToolCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + // Lord this function is fucking bloated now. Need to clean it up so its less spammy. + if (ent.Comp.Add != null) + { + foreach (var reg in ent.Comp.Add.Values) + { + if (!HasComp(args.Part, reg.Component.GetType())) + { + args.Cancelled = true; + return; + } + } + } + + if (ent.Comp.Remove != null) + { + foreach (var reg in ent.Comp.Remove.Values) + { + if (HasComp(args.Part, reg.Component.GetType())) + { + args.Cancelled = true; + return; + } + } + } + + if (ent.Comp.BodyRemove != null) + { + foreach (var reg in ent.Comp.BodyRemove.Values) + { + if (HasComp(args.Body, reg.Component.GetType())) + { + args.Cancelled = true; + return; + } + } + } + } + + private void OnToolCanPerform(Entity ent, ref SurgeryCanPerformStepEvent args) + { + if (HasComp(ent)) + { + if (!TryComp(args.Body, out BuckleComponent? buckle) || + !HasComp(buckle.BuckledTo)) + { + args.Invalid = StepInvalidReason.NeedsOperatingTable; + return; + } + } + + if (_inventory.TryGetContainerSlotEnumerator(args.Body, out var containerSlotEnumerator, args.TargetSlots)) + { + while (containerSlotEnumerator.MoveNext(out var containerSlot)) + { + if (!containerSlot.ContainedEntity.HasValue) + continue; + + args.Invalid = StepInvalidReason.Armor; + args.Popup = Loc.GetString("surgery-ui-window-steps-error-armor"); + return; + } + } + + RaiseLocalEvent(args.Body, ref args); + + if (args.Invalid != StepInvalidReason.None) + return; + + if (ent.Comp.Tool != null) + { + args.ValidTools ??= new HashSet(); + + foreach (var reg in ent.Comp.Tool.Values) + { + if (!AnyHaveComp(args.Tools, reg.Component, out var withComp)) + { + args.Invalid = StepInvalidReason.MissingTool; + + if (reg.Component is ISurgeryToolComponent tool) + args.Popup = $"You need {tool.ToolName} to perform this step!"; + + return; + } + + args.ValidTools.Add(withComp); + } + } + } + + private EntProtoId? GetProtoId(EntityUid entityUid) + { + if (!TryComp(entityUid, out var metaData)) + return null; + + return metaData.EntityPrototype?.ID; + } + + // I wonder if theres not a function that can do this already. + private bool HasDamageGroup(EntityUid entity, string[] group, out DamageableComponent? damageable) + { + if (!TryComp(entity, out var damageableComp)) + { + damageable = null; + return false; + } + + damageable = damageableComp; + return group.Any(damageType => damageableComp.Damage.DamageDict.TryGetValue(damageType, out var value) && value > 0); + + } + + private void OnTendWoundsStep(Entity ent, ref SurgeryStepEvent args) + { + var group = ent.Comp.MainGroup == "Brute" ? BruteDamageTypes : BurnDamageTypes; + + if (!HasDamageGroup(args.Body, group, out var damageable) + && !HasDamageGroup(args.Part, group, out var _) + || damageable == null) // This shouldnt be possible but the compiler doesn't shut up. + return; + + + // Right now the bonus is based off the body's total damage, maybe we could make it based off each part in the future. + var bonus = ent.Comp.HealMultiplier * damageable.DamagePerGroup[ent.Comp.MainGroup]; + if (_mobState.IsDead(args.Body)) + bonus *= 0.2; + + var adjustedDamage = new DamageSpecifier(ent.Comp.Damage); + var bonusPerType = bonus / group.Length; + + foreach (var type in group) + { + adjustedDamage.DamageDict[type] -= bonusPerType; + } + + var ev = new SurgeryStepDamageEvent(args.User, args.Body, args.Part, args.Surgery, adjustedDamage, 0.5f); + RaiseLocalEvent(args.Body, ref ev); + } + + private void OnTendWoundsCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + var group = ent.Comp.MainGroup == "Brute" ? BruteDamageTypes : BurnDamageTypes; + + if (HasDamageGroup(args.Body, group, out var _) + || HasDamageGroup(args.Part, group, out var _)) + args.Cancelled = true; + } + + /*private void OnCutLarvaRootsStep(Entity ent, ref SurgeryStepEvent args) + { + if (TryComp(args.Body, out VictimInfectedComponent? infected) && + infected.BurstAt > _timing.CurTime && + infected.SpawnedLarva == null) + { + infected.RootsCut = true; + } + } + + private void OnCutLarvaRootsCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Body, out VictimInfectedComponent? infected) || !infected.RootsCut) + args.Cancelled = true; + + // The larva has fully developed and surgery is now impossible + // TODO: Surgery should still be possible, but the fully developed larva should escape while also saving the hosts life + if (infected != null && infected.SpawnedLarva != null) + args.Cancelled = true; + }*/ + + private void OnCavityStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Part, out BodyPartComponent? partComp) || partComp.PartType != BodyPartType.Torso) + return; + + var activeHandEntity = _hands.EnumerateHeld(args.User).FirstOrDefault(); + if (activeHandEntity != default + && ent.Comp.Action == "Insert" + && TryComp(activeHandEntity, out ItemComponent? itemComp) + && (itemComp.Size.Id == "Tiny" + || itemComp.Size.Id == "Small")) + _itemSlotsSystem.TryInsert(ent, partComp.ItemInsertionSlot, activeHandEntity, args.User); + else if (ent.Comp.Action == "Remove") + _itemSlotsSystem.TryEjectToHands(ent, partComp.ItemInsertionSlot, args.User); + } + + private void OnCavityCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + // Normally this check would simply be partComp.ItemInsertionSlot.HasItem, but as mentioned before, + // For whatever reason it's not instantiating the field on the clientside after the wizmerge. + if (!TryComp(args.Part, out BodyPartComponent? partComp) + || !TryComp(args.Part, out ItemSlotsComponent? itemComp) + || ent.Comp.Action == "Insert" + && !itemComp.Slots[partComp.ContainerName].HasItem + || ent.Comp.Action == "Remove" + && itemComp.Slots[partComp.ContainerName].HasItem) + args.Cancelled = true; + } + + private void OnAddPartStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Surgery, out SurgeryPartRemovedConditionComponent? removedComp)) + return; + + foreach (var tool in args.Tools) + { + if (TryComp(tool, out BodyPartComponent? partComp) + && partComp.PartType == removedComp.Part + && (removedComp.Symmetry == null || partComp.Symmetry == removedComp.Symmetry)) + { + var slotName = removedComp.Symmetry != null + ? $"{removedComp.Symmetry?.ToString().ToLower()} {removedComp.Part.ToString().ToLower()}" + : removedComp.Part.ToString().ToLower(); + _body.TryCreatePartSlot(args.Part, slotName, partComp.PartType, out var _); + _body.AttachPart(args.Part, slotName, tool); + _body.ChangeSlotState((tool, partComp), false); + EnsureComp(tool); + var ev = new BodyPartAttachedEvent((tool, partComp)); + RaiseLocalEvent(args.Body, ref ev); + } + } + } + + private void OnAffixPartStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Surgery, out SurgeryPartRemovedConditionComponent? removedComp)) + return; + + var targetPart = _body.GetBodyChildrenOfType(args.Body, removedComp.Part, symmetry: removedComp.Symmetry).FirstOrDefault(); + + if (targetPart != default) + { + // We reward players for properly affixing the parts by healing a little bit of damage, and enabling the part temporarily. + var ev = new BodyPartEnableChangedEvent(true); + RaiseLocalEvent(targetPart.Id, ref ev); + _damageable.TryChangeDamage(args.Body, + _body.GetHealingSpecifier(targetPart.Component) * 2, + canSever: false, // Just in case we heal a brute damage specifier and the logic gets fucky lol + targetPart: _body.GetTargetBodyPart(targetPart.Component.PartType, targetPart.Component.Symmetry)); + RemComp(targetPart.Id); + } + } + + private void OnAffixPartCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Surgery, out SurgeryPartRemovedConditionComponent? removedComp)) + return; + + var targetPart = _body.GetBodyChildrenOfType(args.Body, removedComp.Part, symmetry: removedComp.Symmetry).FirstOrDefault(); + + if (targetPart != default + && HasComp(targetPart.Id)) + args.Cancelled = true; + } + + private void OnAddPartCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Surgery, out SurgeryPartRemovedConditionComponent? removedComp) + || !_body.GetBodyChildrenOfType(args.Body, removedComp.Part, symmetry: removedComp.Symmetry).Any()) + args.Cancelled = true; + } + + private void OnRemovePartStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Part, out BodyPartComponent? partComp) + || partComp.Body != args.Body) + return; + + var ev = new AmputateAttemptEvent(args.Part); + RaiseLocalEvent(args.Part, ref ev); + _hands.TryPickupAnyHand(args.User, args.Part); + } + + private void OnRemovePartCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Part, out BodyPartComponent? partComp) + || partComp.Body == args.Body) + args.Cancelled = true; + } + + private void OnAddOrganStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Part, out BodyPartComponent? partComp) + || partComp.Body != args.Body + || !TryComp(args.Surgery, out SurgeryOrganConditionComponent? organComp) + || organComp.Organ == null) + return; + + // Adding organs is generally done for a single one at a time, so we only need to check for the first. + var firstOrgan = organComp.Organ.Values.FirstOrDefault(); + if (firstOrgan == default) + return; + + foreach (var tool in args.Tools) + { + if (HasComp(tool, firstOrgan.Component.GetType()) + && TryComp(tool, out var insertedOrgan) + && _body.InsertOrgan(args.Part, tool, insertedOrgan.SlotId, partComp, insertedOrgan)) + { + EnsureComp(tool); + break; + } + } + } + + private void OnAddOrganCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Surgery, out var organComp) + || organComp.Organ is null + || !TryComp(args.Part, out BodyPartComponent? partComp) + || partComp.Body != args.Body) + return; + + // For now we naively assume that every entity will only have one of each organ type. + // that we do surgery on, but in the future we'll need to reference their prototype somehow + // to know if they need 2 hearts, 2 lungs, etc. + foreach (var reg in organComp.Organ.Values) + { + if (!_body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var _)) + { + args.Cancelled = true; + } + } + } + + private void OnAffixOrganStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Surgery, out SurgeryOrganConditionComponent? removedOrganComp) + || removedOrganComp.Organ == null + || !removedOrganComp.Reattaching) + return; + + foreach (var reg in removedOrganComp.Organ.Values) + { + _body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var organs); + if (organs != null && organs.Count > 0) + RemComp(organs[0].Id); + } + + } + + private void OnAffixOrganCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Surgery, out SurgeryOrganConditionComponent? removedOrganComp) + || removedOrganComp.Organ == null + || !removedOrganComp.Reattaching) + return; + + foreach (var reg in removedOrganComp.Organ.Values) + { + _body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var organs); + if (organs != null + && organs.Count > 0 + && organs.Any(organ => HasComp(organ.Id))) + args.Cancelled = true; + } + } + + private void OnRemoveOrganStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Surgery, out var organComp) + || organComp.Organ == null) + return; + + foreach (var reg in organComp.Organ.Values) + { + _body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var organs); + if (organs != null && organs.Count > 0) + { + _body.RemoveOrgan(organs[0].Id, organs[0].Organ); + _hands.TryPickupAnyHand(args.User, organs[0].Id); + } + } + } + + private void OnRemoveOrganCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + if (!TryComp(args.Surgery, out var organComp) + || organComp.Organ == null + || !TryComp(args.Part, out BodyPartComponent? partComp) + || partComp.Body != args.Body) + return; + + foreach (var reg in organComp.Organ.Values) + { + if (_body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var organs) + && organs != null + && organs.Count > 0) + { + args.Cancelled = true; + return; + } + } + } + + // TODO: Refactor bodies to include ears as a prototype instead of doing whatever the hell this is. + private void OnAddMarkingStep(Entity ent, ref SurgeryStepEvent args) + { + if (!TryComp(args.Body, out HumanoidAppearanceComponent? bodyAppearance) + || ent.Comp.Organ == null) + return; + + var organType = ent.Comp.Organ.Values.FirstOrDefault(); + if (organType == default) + return; + + var markingCategory = MarkingCategoriesConversion.FromHumanoidVisualLayers(ent.Comp.MarkingCategory); + foreach (var tool in args.Tools) + { + if (TryComp(tool, out MarkingContainerComponent? markingComp) + && HasComp(tool, organType.Component.GetType())) + { + if (!bodyAppearance.MarkingSet.Markings.TryGetValue(markingCategory, out var markingList) + || !markingList.Any(marking => marking.MarkingId.Contains(ent.Comp.MatchString))) + { + EnsureComp(args.Part); + _body.ModifyMarkings(args.Body, args.Part, bodyAppearance, ent.Comp.MarkingCategory, markingComp.Marking); + + if (ent.Comp.Accent != null + && ent.Comp.Accent.Values.FirstOrDefault() is { } accent) + { + var compType = accent.Component.GetType(); + if (!HasComp(args.Body, compType)) + AddComp(args.Body, _compFactory.GetComponent(compType)); + } + + QueueDel(tool); // Again since this isnt actually being inserted we just delete it lol. + } + } + } + + } + + private void OnAddMarkingCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + var markingCategory = MarkingCategoriesConversion.FromHumanoidVisualLayers(ent.Comp.MarkingCategory); + + if (!TryComp(args.Body, out HumanoidAppearanceComponent? bodyAppearance) + || !bodyAppearance.MarkingSet.Markings.TryGetValue(markingCategory, out var markingList) + || !markingList.Any(marking => marking.MarkingId.Contains(ent.Comp.MatchString))) + args.Cancelled = true; + } + + private void OnRemoveMarkingStep(Entity ent, ref SurgeryStepEvent args) + { + + } + + private void OnRemoveMarkingCheck(Entity ent, ref SurgeryStepCompleteCheckEvent args) + { + + } + + private void OnSurgeryTargetStepChosen(Entity ent, ref SurgeryStepChosenBuiMsg args) + { + var user = args.Actor; + if (GetEntity(args.Entity) is not { Valid: true } body || + GetEntity(args.Part) is not { Valid: true } targetPart || + !IsSurgeryValid(body, targetPart, args.Surgery, args.Step, user, out var surgery, out var part, out var step)) + { + return; + } + + if (!PreviousStepsComplete(body, part, surgery, args.Step) || + IsStepComplete(body, part, args.Step, surgery)) + return; + + if (!CanPerformStep(user, body, part, step, true, out _, out _, out var validTools)) + return; + + if (_net.IsServer && validTools?.Count > 0) + { + foreach (var tool in validTools) + { + if (TryComp(tool, out SurgeryToolComponent? toolComp) && + toolComp.EndSound != null) + { + _audio.PlayEntity(toolComp.StartSound, user, tool); + } + } + } + + if (TryComp(body, out TransformComponent? xform)) + _rotateToFace.TryFaceCoordinates(user, _transform.GetMapCoordinates(body, xform).Position); + + var ev = new SurgeryDoAfterEvent(args.Surgery, args.Step); + // TODO: Make this serialized on a per surgery step basis, and also add penalties based on ghetto tools. + var duration = 2f; + if (TryComp(user, out SurgerySpeedModifierComponent? surgerySpeedMod) + && surgerySpeedMod is not null) + duration = duration / surgerySpeedMod.SpeedModifier; + + var doAfter = new DoAfterArgs(EntityManager, user, TimeSpan.FromSeconds(duration), ev, body, part) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + CancelDuplicate = true, + DuplicateCondition = DuplicateConditions.SameEvent, + NeedHand = true, + BreakOnHandChange = true, + }; + + _doAfter.TryStartDoAfter(doAfter); + } + + private (Entity Surgery, int Step)? GetNextStep(EntityUid body, EntityUid part, Entity surgery, List requirements) + { + if (!Resolve(surgery, ref surgery.Comp)) + return null; + + if (requirements.Contains(surgery)) + throw new ArgumentException($"Surgery {surgery} has a requirement loop: {string.Join(", ", requirements)}"); + + requirements.Add(surgery); + + if (surgery.Comp.Requirement is { } requirementId && + GetSingleton(requirementId) is { } requirement && + GetNextStep(body, part, requirement, requirements) is { } requiredNext) + { + return requiredNext; + } + + for (var i = 0; i < surgery.Comp.Steps.Count; i++) + { + var surgeryStep = surgery.Comp.Steps[i]; + if (!IsStepComplete(body, part, surgeryStep, surgery)) + return ((surgery, surgery.Comp), i); + } + + return null; + } + + public (Entity Surgery, int Step)? GetNextStep(EntityUid body, EntityUid part, EntityUid surgery) + { + return GetNextStep(body, part, surgery, new List()); + } + + public bool PreviousStepsComplete(EntityUid body, EntityUid part, Entity surgery, EntProtoId step) + { + // TODO RMC14 use index instead of the prototype id + if (surgery.Comp.Requirement is { } requirement) + { + if (GetSingleton(requirement) is not { } requiredEnt || + !TryComp(requiredEnt, out SurgeryComponent? requiredComp) || + !PreviousStepsComplete(body, part, (requiredEnt, requiredComp), step)) + { + return false; + } + } + + foreach (var surgeryStep in surgery.Comp.Steps) + { + if (surgeryStep == step) + break; + + if (!IsStepComplete(body, part, surgeryStep, surgery)) + return false; + } + + return true; + } + + public bool CanPerformStep(EntityUid user, EntityUid body, EntityUid part, + EntityUid step, bool doPopup, out string? popup, out StepInvalidReason reason, + out HashSet? validTools) + { + var type = BodyPartType.Other; + if (TryComp(part, out BodyPartComponent? partComp)) + { + type = partComp.PartType; + } + + var slot = type switch + { + BodyPartType.Head => SlotFlags.HEAD, + BodyPartType.Torso => SlotFlags.OUTERCLOTHING | SlotFlags.INNERCLOTHING, + BodyPartType.Arm => SlotFlags.OUTERCLOTHING | SlotFlags.INNERCLOTHING, + BodyPartType.Hand => SlotFlags.GLOVES, + BodyPartType.Leg => SlotFlags.OUTERCLOTHING | SlotFlags.LEGS, + BodyPartType.Foot => SlotFlags.FEET, + BodyPartType.Tail => SlotFlags.NONE, + BodyPartType.Other => SlotFlags.NONE, + _ => SlotFlags.NONE + }; + + var check = new SurgeryCanPerformStepEvent(user, body, GetTools(user), slot); + RaiseLocalEvent(step, ref check); + popup = check.Popup; + validTools = check.ValidTools; + + if (check.Invalid != StepInvalidReason.None) + { + if (doPopup && check.Popup != null) + _popup.PopupEntity(check.Popup, user, user, PopupType.SmallCaution); + + reason = check.Invalid; + return false; + } + + reason = default; + return true; + } + + public bool CanPerformStep(EntityUid user, EntityUid body, EntityUid part, EntityUid step, bool doPopup) + { + return CanPerformStep(user, body, part, step, doPopup, out _, out _, out _); + } + + public bool IsStepComplete(EntityUid body, EntityUid part, EntProtoId step, EntityUid surgery) + { + if (GetSingleton(step) is not { } stepEnt) + return false; + + var ev = new SurgeryStepCompleteCheckEvent(body, part, surgery); + RaiseLocalEvent(stepEnt, ref ev); + return !ev.Cancelled; + } + + private bool AnyHaveComp(List tools, IComponent component, out EntityUid withComp) + { + foreach (var tool in tools) + { + if (HasComp(tool, component.GetType())) + { + withComp = tool; + return true; + } + } + + withComp = default; + return false; + } +} diff --git a/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs b/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs new file mode 100644 index 00000000000..d7b049b0245 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs @@ -0,0 +1,283 @@ +using System.Linq; +using Content.Shared.Medical.Surgery.Conditions; +using Content.Shared.Medical.Surgery.Effects.Complete; +using Content.Shared.Body.Systems; +using Content.Shared.Medical.Surgery.Steps; +using Content.Shared.Medical.Surgery.Steps.Parts; +//using Content.Shared._RMC14.Xenonids.Parasite; +using Content.Shared.Body.Part; +using Content.Shared.Damage; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Body.Components; +using Content.Shared.Buckle.Components; +using Content.Shared.DoAfter; +using Content.Shared.Mobs.Systems; +using Content.Shared.GameTicking; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Markings; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Popups; +using Content.Shared.Standing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Map; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Shared.Medical.Surgery; + +public abstract partial class SharedSurgerySystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IComponentFactory _compFactory = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly RotateToFaceSystem _rotateToFace = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private readonly Dictionary _surgeries = new(); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundRestartCleanup); + + SubscribeLocalEvent(OnTargetDoAfter); + SubscribeLocalEvent(OnCloseIncisionValid); + //SubscribeLocalEvent(OnLarvaValid); + SubscribeLocalEvent(OnPartConditionValid); + SubscribeLocalEvent(OnOrganConditionValid); + SubscribeLocalEvent(OnWoundedValid); + SubscribeLocalEvent(OnPartRemovedConditionValid); + SubscribeLocalEvent(OnPartPresentConditionValid); + SubscribeLocalEvent(OnMarkingPresentValid); + //SubscribeLocalEvent(OnRemoveLarva); + + InitializeSteps(); + } + + private void OnRoundRestartCleanup(RoundRestartCleanupEvent ev) + { + _surgeries.Clear(); + } + + private void OnTargetDoAfter(Entity ent, ref SurgeryDoAfterEvent args) + { + if (!_timing.IsFirstTimePredicted) + return; + + if (args.Cancelled + || args.Handled + || args.Target is not { } target + || !IsSurgeryValid(ent, target, args.Surgery, args.Step, args.User, out var surgery, out var part, out var step) + || !PreviousStepsComplete(ent, part, surgery, args.Step) + || !CanPerformStep(args.User, ent, part, step, false)) + { + Log.Warning($"{ToPrettyString(args.User)} tried to start invalid surgery."); + return; + } + + args.Repeat = (HasComp(step) && !IsStepComplete(ent, part, args.Step, surgery)); + var ev = new SurgeryStepEvent(args.User, ent, part, GetTools(args.User), surgery); + RaiseLocalEvent(step, ref ev); + RefreshUI(ent); + } + + private void OnCloseIncisionValid(Entity ent, ref SurgeryValidEvent args) + { + if (!HasComp(args.Part) || + !HasComp(args.Part) || + !HasComp(args.Part) || + !HasComp(args.Part) || + !HasComp(args.Part)) + { + args.Cancelled = true; + } + } + + private void OnWoundedValid(Entity ent, ref SurgeryValidEvent args) + { + if (!TryComp(args.Body, out DamageableComponent? damageable) + || !TryComp(args.Part, out DamageableComponent? partDamageable) + || damageable.TotalDamage <= 0 + && partDamageable.TotalDamage <= 0 + && !HasComp(args.Part)) + args.Cancelled = true; + } + + /*private void OnLarvaValid(Entity ent, ref SurgeryValidEvent args) + { + if (!TryComp(args.Body, out VictimInfectedComponent? infected)) + args.Cancelled = true; + + // The larva has fully developed and surgery is now impossible + if (infected != null && infected.SpawnedLarva != null) + args.Cancelled = true; + }*/ + private void OnPartConditionValid(Entity ent, ref SurgeryValidEvent args) + { + if (!TryComp(args.Part, out var part)) + { + args.Cancelled = true; + return; + } + + var typeMatch = part.PartType == ent.Comp.Part; + var symmetryMatch = ent.Comp.Symmetry == null || part.Symmetry == ent.Comp.Symmetry; + var valid = typeMatch && symmetryMatch; + + if (ent.Comp.Inverse ? valid : !valid) + args.Cancelled = true; + } + + private void OnOrganConditionValid(Entity ent, ref SurgeryValidEvent args) + { + if (!TryComp(args.Part, out var partComp) + || partComp.Body != args.Body + || ent.Comp.Organ == null) + { + args.Cancelled = true; + return; + } + + foreach (var reg in ent.Comp.Organ.Values) + { + if (_body.TryGetBodyPartOrgans(args.Part, reg.Component.GetType(), out var organs) + && organs.Count > 0) + { + if (ent.Comp.Inverse + && (!ent.Comp.Reattaching + || ent.Comp.Reattaching + && !organs.Any(organ => HasComp(organ.Id)))) + args.Cancelled = true; + } + else if (!ent.Comp.Inverse) + args.Cancelled = true; + } + } + + private void OnPartRemovedConditionValid(Entity ent, ref SurgeryValidEvent args) + { + var results = _body.GetBodyChildrenOfType(args.Body, ent.Comp.Part, symmetry: ent.Comp.Symmetry); + if (results is not { } || !results.Any()) + return; + + if (!results.Any(part => HasComp(part.Id))) + args.Cancelled = true; + } + + private void OnPartPresentConditionValid(Entity ent, ref SurgeryValidEvent args) + { + if (args.Part == EntityUid.Invalid + || !HasComp(args.Part)) + args.Cancelled = true; + } + + private void OnMarkingPresentValid(Entity ent, ref SurgeryValidEvent args) + { + var markingCategory = MarkingCategoriesConversion.FromHumanoidVisualLayers(ent.Comp.MarkingCategory); + + var hasMarking = TryComp(args.Body, out HumanoidAppearanceComponent? bodyAppearance) + && bodyAppearance.MarkingSet.Markings.TryGetValue(markingCategory, out var markingList) + && markingList.Any(marking => marking.MarkingId.Contains(ent.Comp.MatchString)); + + if ((!ent.Comp.Inverse && hasMarking) || (ent.Comp.Inverse && !hasMarking)) + args.Cancelled = true; + } + + /*private void OnRemoveLarva(Entity ent, ref SurgeryCompletedEvent args) + { + RemCompDeferred(ent); + }*/ + + protected bool IsSurgeryValid(EntityUid body, EntityUid targetPart, EntProtoId surgery, EntProtoId stepId, + EntityUid user, out Entity surgeryEnt, out EntityUid part, out EntityUid step) + { + surgeryEnt = default; + part = default; + step = default; + + if (!HasComp(body) || + !IsLyingDown(body, user) || + GetSingleton(surgery) is not { } surgeryEntId || + !TryComp(surgeryEntId, out SurgeryComponent? surgeryComp) || + !surgeryComp.Steps.Contains(stepId) || + GetSingleton(stepId) is not { } stepEnt + || !HasComp(targetPart) + && !HasComp(targetPart)) + return false; + + + var ev = new SurgeryValidEvent(body, targetPart); + if (_timing.IsFirstTimePredicted) + { + RaiseLocalEvent(stepEnt, ref ev); + RaiseLocalEvent(surgeryEntId, ref ev); + } + + if (ev.Cancelled) + return false; + + surgeryEnt = (surgeryEntId, surgeryComp); + part = targetPart; + step = stepEnt; + return true; + } + + public EntityUid? GetSingleton(EntProtoId surgeryOrStep) + { + if (!_prototypes.HasIndex(surgeryOrStep)) + return null; + + // This (for now) assumes that surgery entity data remains unchanged between client + // and server + // if it does not you get the bullet + if (!_surgeries.TryGetValue(surgeryOrStep, out var ent) || TerminatingOrDeleted(ent)) + { + ent = Spawn(surgeryOrStep, MapCoordinates.Nullspace); + _surgeries[surgeryOrStep] = ent; + } + + return ent; + } + + private List GetTools(EntityUid surgeon) + { + return _hands.EnumerateHeld(surgeon).ToList(); + } + + public bool IsLyingDown(EntityUid entity, EntityUid user) + { + if (_standing.IsDown(entity)) + return true; + + if (TryComp(entity, out BuckleComponent? buckle) && + TryComp(buckle.BuckledTo, out StrapComponent? strap)) + { + var rotation = strap.Rotation; + if (rotation.GetCardinalDir() is Direction.West or Direction.East) + return true; + } + + _popup.PopupEntity(Loc.GetString("surgery-error-laying"), user, user); + + return false; + } + + protected virtual void RefreshUI(EntityUid body) + { + } +} diff --git a/Content.Shared/Medical/Surgery/StepInvalidReason.cs b/Content.Shared/Medical/Surgery/StepInvalidReason.cs new file mode 100644 index 00000000000..dbea495d088 --- /dev/null +++ b/Content.Shared/Medical/Surgery/StepInvalidReason.cs @@ -0,0 +1,10 @@ +namespace Content.Shared.Medical.Surgery; + +public enum StepInvalidReason +{ + None, + MissingSkills, + NeedsOperatingTable, + Armor, + MissingTool, +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/BleedersClampedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/BleedersClampedComponent.cs new file mode 100644 index 00000000000..24d4fd99354 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/BleedersClampedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BleedersClampedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartReattachedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartReattachedComponent.cs new file mode 100644 index 00000000000..30739c821b4 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartReattachedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BodyPartReattachedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartSawedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartSawedComponent.cs new file mode 100644 index 00000000000..0838175d9a1 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/BodyPartSawedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BodyPartSawedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/IncisionOpenComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/IncisionOpenComponent.cs new file mode 100644 index 00000000000..f41319549cd --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/IncisionOpenComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class IncisionOpenComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/InternalBleedersClampedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/InternalBleedersClampedComponent.cs new file mode 100644 index 00000000000..7e597e88ef9 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/InternalBleedersClampedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class InternalBleedersClampedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/OrganReattachedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/OrganReattachedComponent.cs new file mode 100644 index 00000000000..9e034598e68 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/OrganReattachedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class OrganReattachedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/PartRemovedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/PartRemovedComponent.cs new file mode 100644 index 00000000000..ced1d1b9848 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/PartRemovedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class PartsRemovedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/RibcageOpenComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/RibcageOpenComponent.cs new file mode 100644 index 00000000000..d8942bd9665 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/RibcageOpenComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RibcageOpenComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/RibcageSawedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/RibcageSawedComponent.cs new file mode 100644 index 00000000000..527b3dc99aa --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/RibcageSawedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RibcageSawedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/Parts/SkinRetractedComponent.cs b/Content.Shared/Medical/Surgery/Steps/Parts/SkinRetractedComponent.cs new file mode 100644 index 00000000000..6f75a83f17f --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/Parts/SkinRetractedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps.Parts; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SkinRetractedComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryAddMarkingStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryAddMarkingStepComponent.cs new file mode 100644 index 00000000000..b945c8d909e --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryAddMarkingStepComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.Humanoid; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryAddMarkingStepComponent : Component +{ + /// + /// The marking category to add the marking to. + /// + [DataField] + public HumanoidVisualLayers MarkingCategory = default!; + + /// + /// Can be either a segment of a marking ID, or an entire ID that will be checked + /// against the entity to validate that the marking is not already present. + /// + [DataField] + public String MatchString = ""; + + /// + /// What type of organ is required for this surgery? + /// + [DataField] + public ComponentRegistry? Organ; + + /// + /// Component name for accent that will be applied. + /// + [DataField] + public ComponentRegistry? Accent; +} diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryAddOrganStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryAddOrganStepComponent.cs new file mode 100644 index 00000000000..2d169879f9c --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryAddOrganStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryAddOrganStepComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryAddPartStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryAddPartStepComponent.cs new file mode 100644 index 00000000000..0229552ae8a --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryAddPartStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryAddPartStepComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryAffixOrganStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryAffixOrganStepComponent.cs new file mode 100644 index 00000000000..5f82cbe4251 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryAffixOrganStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryAffixOrganStepComponent : Component; diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryAffixPartStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryAffixPartStepComponent.cs new file mode 100644 index 00000000000..cc080e8be0b --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryAffixPartStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryAffixPartStepComponent : Component; diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryCanPerformStepEvent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryCanPerformStepEvent.cs new file mode 100644 index 00000000000..cd6d0fd4556 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryCanPerformStepEvent.cs @@ -0,0 +1,14 @@ +using Content.Shared.Inventory; + +namespace Content.Shared.Medical.Surgery.Steps; + +[ByRefEvent] +public record struct SurgeryCanPerformStepEvent( + EntityUid User, + EntityUid Body, + List Tools, + SlotFlags TargetSlots, + string? Popup = null, + StepInvalidReason Invalid = StepInvalidReason.None, + HashSet? ValidTools = null +) : IInventoryRelayEvent; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryCutLarvaRootsStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryCutLarvaRootsStepComponent.cs new file mode 100644 index 00000000000..349815379b7 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryCutLarvaRootsStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryCutLarvaRootsStepComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs new file mode 100644 index 00000000000..47368a154c0 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveMarkingStepComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.Prototypes; +using Content.Shared.Humanoid; +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryRemoveMarkingStepComponent : Component +{ + /// + /// The category the marking belongs to. + /// + [DataField] + public HumanoidVisualLayers MarkingCategory = default!; + + /// + /// Can be either a segment of a marking ID, or an entire ID that will be checked + /// against the entity to validate that the marking is present. + /// + [DataField] + public String MatchString = ""; + + /// + /// Will this step spawn an item as a result of removing the markings? If so, which? + /// + [DataField] + public EntProtoId? ItemSpawn = default!; + +} diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveOrganStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveOrganStepComponent.cs new file mode 100644 index 00000000000..66f2ea62fd3 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryRemoveOrganStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryRemoveOrganStepComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryRemovePartStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryRemovePartStepComponent.cs new file mode 100644 index 00000000000..f55f3d1b7bf --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryRemovePartStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryRemovePartStepComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryRepeatableStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryRepeatableStepComponent.cs new file mode 100644 index 00000000000..14010b7e962 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryRepeatableStepComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryRepeatableStepComponent : Component; diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryStepCompleteCheckEvent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryStepCompleteCheckEvent.cs new file mode 100644 index 00000000000..ed28aab1db7 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryStepCompleteCheckEvent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Medical.Surgery.Steps; + +[ByRefEvent] +public record struct SurgeryStepCompleteCheckEvent(EntityUid Body, EntityUid Part, EntityUid Surgery, bool Cancelled = false); \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Steps/SurgeryStepComponent.cs b/Content.Shared/Medical/Surgery/Steps/SurgeryStepComponent.cs new file mode 100644 index 00000000000..1c6e801a42c --- /dev/null +++ b/Content.Shared/Medical/Surgery/Steps/SurgeryStepComponent.cs @@ -0,0 +1,22 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Steps; + +[RegisterComponent, NetworkedComponent] +[Prototype("SurgerySteps")] +public sealed partial class SurgeryStepComponent : Component +{ + + [DataField] + public ComponentRegistry? Tool; + + [DataField] + public ComponentRegistry? Add; + + [DataField] + public ComponentRegistry? Remove; + + [DataField] + public ComponentRegistry? BodyRemove; +} diff --git a/Content.Shared/Medical/Surgery/SurgeryComponent.cs b/Content.Shared/Medical/Surgery/SurgeryComponent.cs new file mode 100644 index 00000000000..3d3c8952344 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Prototype("Surgeries")] +public sealed partial class SurgeryComponent : Component +{ + [DataField, AutoNetworkedField] + public int Priority; + + [DataField, AutoNetworkedField] + public EntProtoId? Requirement; + + [DataField(required: true), AutoNetworkedField] + public List Steps = new(); +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SurgeryDoAfterEvent.cs b/Content.Shared/Medical/Surgery/SurgeryDoAfterEvent.cs new file mode 100644 index 00000000000..e61cfbd8e47 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryDoAfterEvent.cs @@ -0,0 +1,18 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Medical.Surgery; + +[Serializable, NetSerializable] +public sealed partial class SurgeryDoAfterEvent : SimpleDoAfterEvent +{ + public readonly EntProtoId Surgery; + public readonly EntProtoId Step; + + public SurgeryDoAfterEvent(EntProtoId surgery, EntProtoId step) + { + Surgery = surgery; + Step = step; + } +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SurgerySpeedModifierComponent.cs b/Content.Shared/Medical/Surgery/SurgerySpeedModifierComponent.cs new file mode 100644 index 00000000000..b9b586b8f58 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgerySpeedModifierComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgerySpeedModifierComponent : Component +{ + [DataField] + public float SpeedModifier = 1.5f; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SurgeryStepDamageEvent.cs b/Content.Shared/Medical/Surgery/SurgeryStepDamageEvent.cs new file mode 100644 index 00000000000..781cf81acf6 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryStepDamageEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.Damage; + +namespace Content.Shared.Medical.Surgery; + +/// +/// Raised on the target entity. +/// +[ByRefEvent] +public record struct SurgeryStepDamageEvent(EntityUid User, EntityUid Body, EntityUid Part, EntityUid Surgery, DamageSpecifier Damage, float PartMultiplier); \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SurgeryStepEvent.cs b/Content.Shared/Medical/Surgery/SurgeryStepEvent.cs new file mode 100644 index 00000000000..9123c6d0d50 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryStepEvent.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Medical.Surgery; + +/// +/// Raised on the step entity. +/// +[ByRefEvent] +public record struct SurgeryStepEvent(EntityUid User, EntityUid Body, EntityUid Part, List Tools, EntityUid Surgery); \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/SurgeryTargetComponent.cs b/Content.Shared/Medical/Surgery/SurgeryTargetComponent.cs new file mode 100644 index 00000000000..d2d7f8d4620 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryTargetComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryTargetComponent : Component +{ + [DataField] + public bool CanOperate = true; +} diff --git a/Content.Shared/Medical/Surgery/SurgeryUI.cs b/Content.Shared/Medical/Surgery/SurgeryUI.cs new file mode 100644 index 00000000000..2572aaca65a --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryUI.cs @@ -0,0 +1,32 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Medical.Surgery; + +[Serializable, NetSerializable] +public enum SurgeryUIKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class SurgeryBuiState(Dictionary> choices) : BoundUserInterfaceState +{ + public readonly Dictionary> Choices = choices; +} + +[Serializable, NetSerializable] +public sealed class SurgeryBuiRefreshMessage : BoundUserInterfaceMessage +{ +} + +[Serializable, NetSerializable] +public sealed class SurgeryStepChosenBuiMsg(NetEntity part, EntProtoId surgery, EntProtoId step, bool isBody) : BoundUserInterfaceMessage +{ + public readonly NetEntity Part = part; + public readonly EntProtoId Surgery = surgery; + public readonly EntProtoId Step = step; + + // Used as a marker for whether or not we're hijacking surgery by applying it on the body itself. + public readonly bool IsBody = isBody; +} diff --git a/Content.Shared/Medical/Surgery/SurgeryUiRefreshEvent.cs b/Content.Shared/Medical/Surgery/SurgeryUiRefreshEvent.cs new file mode 100644 index 00000000000..9d41401d7f8 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryUiRefreshEvent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Medical.Surgery; + +[Serializable, NetSerializable] +public sealed class SurgeryUiRefreshEvent : EntityEventArgs +{ + public NetEntity Uid { get; } + + public SurgeryUiRefreshEvent(NetEntity uid) + { + Uid = uid; + } +} diff --git a/Content.Shared/Medical/Surgery/Tools/BoneGelComponent.cs b/Content.Shared/Medical/Surgery/Tools/BoneGelComponent.cs new file mode 100644 index 00000000000..50f614afe16 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/BoneGelComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BoneGelComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "bone gel"; + + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/BoneSawComponent.cs b/Content.Shared/Medical/Surgery/Tools/BoneSawComponent.cs new file mode 100644 index 00000000000..2b7c76eeac9 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/BoneSawComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BoneSawComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a bone saw"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/BoneSetterComponent.cs b/Content.Shared/Medical/Surgery/Tools/BoneSetterComponent.cs new file mode 100644 index 00000000000..e68d64b4075 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/BoneSetterComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BoneSetterComponent : Component; \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/CauteryComponent.cs b/Content.Shared/Medical/Surgery/Tools/CauteryComponent.cs new file mode 100644 index 00000000000..9a56f809733 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/CauteryComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CauteryComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a cautery"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/HemostatComponent.cs b/Content.Shared/Medical/Surgery/Tools/HemostatComponent.cs new file mode 100644 index 00000000000..3e869e1c094 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/HemostatComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HemostatComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a hemostat"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/ISurgeryToolComponent.cs b/Content.Shared/Medical/Surgery/Tools/ISurgeryToolComponent.cs new file mode 100644 index 00000000000..7fb4491f0c5 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/ISurgeryToolComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared.Medical.Surgery.Tools; + +public interface ISurgeryToolComponent +{ + [DataField] + public string ToolName { get; } + + // Mostly intended for discardable or non-reusable tools. + [DataField] + public bool? Used { get; set; } +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/RetractorComponent.cs b/Content.Shared/Medical/Surgery/Tools/RetractorComponent.cs new file mode 100644 index 00000000000..bf57c70729a --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/RetractorComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RetractorComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a retractor"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/ScalpelComponent.cs b/Content.Shared/Medical/Surgery/Tools/ScalpelComponent.cs new file mode 100644 index 00000000000..40fb4af556d --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/ScalpelComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ScalpelComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a scalpel"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/SurgeryToolComponent.cs b/Content.Shared/Medical/Surgery/Tools/SurgeryToolComponent.cs new file mode 100644 index 00000000000..f0dd96ecb0d --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/SurgeryToolComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SurgeryToolComponent : Component +{ + + [DataField, AutoNetworkedField] + public SoundSpecifier? StartSound; + + [DataField, AutoNetworkedField] + public SoundSpecifier? EndSound; +} \ No newline at end of file diff --git a/Content.Shared/Medical/Surgery/Tools/SurgicalDrillComponent.cs b/Content.Shared/Medical/Surgery/Tools/SurgicalDrillComponent.cs new file mode 100644 index 00000000000..c8995edcec8 --- /dev/null +++ b/Content.Shared/Medical/Surgery/Tools/SurgicalDrillComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Medical.Surgery.Tools; + +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgicalDrillComponent : Component, ISurgeryToolComponent +{ + public string ToolName => "a surgical drill"; + public bool? Used { get; set; } = null; +} \ No newline at end of file diff --git a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs index 08af1a36a7b..14e7c2a3fcf 100644 --- a/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs +++ b/Content.Shared/MedicalScanner/HealthAnalyzerScannedUserMessage.cs @@ -1,3 +1,5 @@ +using Content.Shared.Targeting; +using Content.Shared.Body.Components; using Robust.Shared.Serialization; namespace Content.Shared.MedicalScanner; @@ -14,8 +16,10 @@ public sealed class HealthAnalyzerScannedUserMessage : BoundUserInterfaceMessage public bool? ScanMode; public bool? Bleeding; public bool? Unrevivable; + public Dictionary? Body; // Shitmed + public NetEntity? Part; // Shitmed - public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable) + public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperature, float bloodLevel, bool? scanMode, bool? bleeding, bool? unrevivable, Dictionary? body, NetEntity? part = null) { TargetEntity = targetEntity; Temperature = temperature; @@ -23,6 +27,16 @@ public HealthAnalyzerScannedUserMessage(NetEntity? targetEntity, float temperatu ScanMode = scanMode; Bleeding = bleeding; Unrevivable = unrevivable; + Body = body; // Shitmed + Part = part; // Shitmed } } +[Serializable, NetSerializable] +public sealed class HealthAnalyzerPartMessage(NetEntity? owner, TargetBodyPart? bodyPart) : BoundUserInterfaceMessage +{ + public readonly NetEntity? Owner = owner; + public readonly TargetBodyPart? BodyPart = bodyPart; + +} + diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs b/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs index 2fa522dea59..b65d970eb96 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs @@ -1,5 +1,6 @@ using Content.Shared.Database; using Content.Shared.Mobs.Components; +using Content.Shared.Body.Organ; namespace Content.Shared.Mobs.Systems; @@ -102,6 +103,9 @@ private void ChangeState(EntityUid target, MobStateComponent component, MobState if (oldState == newState || !component.AllowedStates.Contains(newState)) return; + if (oldState == MobState.Dead && HasComp(target)) + return; + OnExitState(target, component, oldState); component.CurrentState = newState; OnEnterState(target, component, newState); diff --git a/Content.Shared/Standing/SharedLayingDownSystem.cs b/Content.Shared/Standing/SharedLayingDownSystem.cs index 9fa4717045c..b2bb5add5f4 100644 --- a/Content.Shared/Standing/SharedLayingDownSystem.cs +++ b/Content.Shared/Standing/SharedLayingDownSystem.cs @@ -5,6 +5,8 @@ using Content.Shared.Input; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Systems; +using Content.Shared.Body.Components; +using Content.Shared.Standing; using Content.Shared.Popups; using Content.Shared.Stunnable; using Robust.Shared.Configuration; @@ -141,7 +143,9 @@ public bool TryStandUp(EntityUid uid, LayingDownComponent? layingDown = null, St || !Resolve(uid, ref layingDown, false) || standingState.CurrentState is not StandingState.Lying || !_mobState.IsAlive(uid) - || TerminatingOrDeleted(uid)) + || TerminatingOrDeleted(uid) + || !TryComp(uid, out var body) + || body.LegEntities.Count == 0) return false; var args = new DoAfterArgs(EntityManager, uid, layingDown.StandingUpTime, new StandingUpDoAfterEvent(), uid) diff --git a/Content.Shared/Targeting/Events.cs b/Content.Shared/Targeting/Events.cs new file mode 100644 index 00000000000..1b090be3e86 --- /dev/null +++ b/Content.Shared/Targeting/Events.cs @@ -0,0 +1,38 @@ +using Content.Shared.Targeting; +using Robust.Shared.Serialization; + +namespace Content.Shared.Targeting.Events; + +[Serializable, NetSerializable] +public sealed class TargetChangeEvent : EntityEventArgs +{ + public NetEntity Uid { get; } + public TargetBodyPart BodyPart { get; } + public TargetChangeEvent(NetEntity uid, TargetBodyPart bodyPart) + { + Uid = uid; + BodyPart = bodyPart; + } +} + +[Serializable, NetSerializable] +public sealed class TargetIntegrityChangeEvent : EntityEventArgs +{ + public NetEntity Uid { get; } + public bool RefreshUi { get; } + public TargetIntegrityChangeEvent(NetEntity uid, bool refreshUi = true) + { + Uid = uid; + RefreshUi = refreshUi; + } +} + +public sealed class RefreshInventorySlotsEvent : EntityEventArgs +{ + public string SlotName { get; } + + public RefreshInventorySlotsEvent(string slotName) + { + SlotName = slotName; + } +} diff --git a/Content.Shared/Targeting/SharedTargetingSystem.cs b/Content.Shared/Targeting/SharedTargetingSystem.cs new file mode 100644 index 00000000000..4f2248683e6 --- /dev/null +++ b/Content.Shared/Targeting/SharedTargetingSystem.cs @@ -0,0 +1,26 @@ +namespace Content.Shared.Targeting; +public abstract class SharedTargetingSystem : EntitySystem +{ + /// + /// Returns all Valid target body parts as an array. + /// + public static TargetBodyPart[] GetValidParts() + { + var parts = new[] + { + TargetBodyPart.Head, + TargetBodyPart.Torso, + //TargetBodyPart.Groin, + TargetBodyPart.LeftArm, + TargetBodyPart.LeftHand, + TargetBodyPart.LeftLeg, + TargetBodyPart.LeftFoot, + TargetBodyPart.RightArm, + TargetBodyPart.RightHand, + TargetBodyPart.RightLeg, + TargetBodyPart.RightFoot, + }; + + return parts; + } +} diff --git a/Content.Shared/Targeting/TargetBodyPart.cs b/Content.Shared/Targeting/TargetBodyPart.cs new file mode 100644 index 00000000000..dd894545445 --- /dev/null +++ b/Content.Shared/Targeting/TargetBodyPart.cs @@ -0,0 +1,31 @@ +namespace Content.Shared.Targeting; + + +/// +/// Represents and enum of possible target parts. +/// +/// +/// To get all body parts as an Array, use static +/// method in SharedTargetingSystem GetValidParts. +/// +[Flags] +public enum TargetBodyPart : ushort +{ + Head = 1, + Torso = 1 << 1, + Groin = 1 << 2, + LeftArm = 1 << 3, + LeftHand = 1 << 4, + RightArm = 1 << 5, + RightHand = 1 << 6, + LeftLeg = 1 << 7, + LeftFoot = 1 << 8, + RightLeg = 1 << 9, + RightFoot = 1 << 10, + + Hands = LeftHand | RightHand, + Arms = LeftArm | RightArm, + Legs = LeftLeg | RightLeg, + Feet = LeftFoot | RightFoot, + All = Head | Torso | Groin | LeftArm | LeftHand | RightArm | RightHand | LeftLeg | LeftFoot | RightLeg | RightFoot, +} diff --git a/Content.Shared/Targeting/TargetIntegrity.cs b/Content.Shared/Targeting/TargetIntegrity.cs new file mode 100644 index 00000000000..9b4515fcfae --- /dev/null +++ b/Content.Shared/Targeting/TargetIntegrity.cs @@ -0,0 +1,13 @@ +namespace Content.Shared.Targeting; +public enum TargetIntegrity +{ + Healthy = 0, + LightlyWounded = 1, + SomewhatWounded = 2, + ModeratelyWounded = 3, + HeavilyWounded = 4, + CriticallyWounded = 5, + Severed = 6, + Dead = 7, + Disabled = 8, +} \ No newline at end of file diff --git a/Content.Shared/Targeting/TargetingComponent.cs b/Content.Shared/Targeting/TargetingComponent.cs new file mode 100644 index 00000000000..cb74beee32f --- /dev/null +++ b/Content.Shared/Targeting/TargetingComponent.cs @@ -0,0 +1,59 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.GameStates; + +namespace Content.Shared.Targeting; + +/// +/// Controls entity limb targeting for actions. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TargetingComponent : Component +{ + [ViewVariables, AutoNetworkedField] + public TargetBodyPart Target = TargetBodyPart.Torso; + + /// + /// What odds does the entity have of targeting each body part? + /// + [DataField] + public Dictionary TargetOdds = new() + { + { TargetBodyPart.Head, 0.1f }, + { TargetBodyPart.Torso, 0.3f }, + { TargetBodyPart.Groin, 0.1f }, + { TargetBodyPart.LeftArm, 0.1f }, + { TargetBodyPart.LeftHand, 0.05f }, + { TargetBodyPart.RightArm, 0.1f }, + { TargetBodyPart.RightHand, 0.05f }, + { TargetBodyPart.LeftLeg, 0.1f }, + { TargetBodyPart.LeftFoot, 0.05f }, + { TargetBodyPart.RightLeg, 0.1f }, + { TargetBodyPart.RightFoot, 0.05f } + }; + + /// + /// What is the current integrity of each body part? + /// + [ViewVariables, AutoNetworkedField] + public Dictionary BodyStatus = new() + { + { TargetBodyPart.Head, TargetIntegrity.Healthy }, + { TargetBodyPart.Torso, TargetIntegrity.Healthy }, + { TargetBodyPart.Groin, TargetIntegrity.Healthy }, + { TargetBodyPart.LeftArm, TargetIntegrity.Healthy }, + { TargetBodyPart.LeftHand, TargetIntegrity.Healthy }, + { TargetBodyPart.RightArm, TargetIntegrity.Healthy }, + { TargetBodyPart.RightHand, TargetIntegrity.Healthy }, + { TargetBodyPart.LeftLeg, TargetIntegrity.Healthy }, + { TargetBodyPart.LeftFoot, TargetIntegrity.Healthy }, + { TargetBodyPart.RightLeg, TargetIntegrity.Healthy }, + { TargetBodyPart.RightFoot, TargetIntegrity.Healthy } + }; + + /// + /// What noise does the entity play when swapping targets? + /// + [DataField] + public string SwapSound = "/Audio/Effects/toggleoncombat.ogg"; +} diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 5fc92ce37a9..2999b7aed7c 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -87,6 +87,12 @@ public sealed partial class MeleeWeaponComponent : Component [DataField, AutoNetworkedField] public FixedPoint2 ClickDamageModifier = FixedPoint2.New(1); + /// + /// Part damage is multiplied by this amount for single-target attacks + /// + [DataField, AutoNetworkedField] + public float ClickPartDamageMultiplier = 1.00f; + // TODO: Temporarily 1.5 until interactionoutline is adjusted to use melee, then probably drop to 1.2 /// /// Nearest edge range to hit an entity. @@ -106,6 +112,12 @@ public sealed partial class MeleeWeaponComponent : Component [DataField, AutoNetworkedField] public float HeavyDamageBaseModifier = 1.2f; + /// + /// Part damage is multiplied by this amount for heavy swings + /// + [DataField, AutoNetworkedField] + public float HeavyPartDamageMultiplier = 0.5f; + /// /// Total width of the angle for wide attacks. /// diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 45115a72cc7..72047666f8c 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -501,7 +501,7 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity RaiseLocalEvent(target.Value, attackedEvent); var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList); - var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, origin:user); + var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, origin: user, partMultiplier: component.ClickPartDamageMultiplier); if (damageResult != null && damageResult.Any()) { @@ -640,7 +640,7 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU RaiseLocalEvent(entity, attackedEvent); var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList); - var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, origin:user); + var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, origin: user, partMultiplier: component.HeavyPartDamageMultiplier); if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero) { diff --git a/Resources/Audio/Medical/Surgery/attributions.yml b/Resources/Audio/Medical/Surgery/attributions.yml new file mode 100644 index 00000000000..c88a3e0b70f --- /dev/null +++ b/Resources/Audio/Medical/Surgery/attributions.yml @@ -0,0 +1,49 @@ +- files: ["cautery1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/cautery1.ogg" + +- files: ["cautery2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/cautery2.ogg" + +- files: ["hemostat.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/hemostat.ogg" + +- files: ["organ1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/organ1.ogg" + +- files: ["organ2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/organ2.ogg" + +- files: ["retractor1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/retractor1.ogg" + +- files: ["retractor2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/retractor2.ogg" + +- files: ["saw.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/saw.ogg" + +- files: ["scalpel1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel1.ogg" + +- files: ["scalpel2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel2.ogg" \ No newline at end of file diff --git a/Resources/Audio/Medical/Surgery/cautery1.ogg b/Resources/Audio/Medical/Surgery/cautery1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fbd9f2b4d86257e87ec704b2138249f9c60efe65 GIT binary patch literal 34770 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/cautery2.ogg b/Resources/Audio/Medical/Surgery/cautery2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cc91e9f3ce679bfaf1aae3ea05bd2e10be827a49 GIT binary patch literal 16854 zcmajH1y~%xvoAV}ySrrxuE8xKIKc_-!QI^n!Ga_NcXto&?(Xh{;O-iDOY%SWoOj>* z?wzl%sY7A+vKo07M3Iv2`#ocYLV=iI)7Qi7V)D zp&lgv((`{^FFju}1&i6Zm^;|oSR30o(ZNIdp+Y{&ib5jNaw@XIVv78%n2-uFIT3kL z$c?xRSjoxR$lR9XrIn0YVp%ms1uJQRat( zls|~cDT?v`tCf`%lT+q@ktL+4EUBc-4}$$SY&u~PRS@vfh*bvM<2xRq0st5QphroE z7HuL)mm8Bw>z)uJ@lxtx2}y_v=^-%u#@hQ|8JNQe7XV-YUs}ZQ>}^SlQC?F5nsA2< zUUNB~d@y{d!a6Tv=M}Y~O=Q$T|jf6n0dT)*TK&|;eotr>?f}sDTTko}-m-Kh)U=WZ&!5g

lbepbU;uE6kznC5-?)aYr3dx$vhK_GV|nGv*KFop-RS~N|e7%Ab5g#84ZwO zo|O0hNhTU`#{c&uXx2{;2tst(XHU{+PbsEI+2_Cr|5wBP0K}$(ii|xD93LDx`W)Xu z(g!Eeff$*QOBwY4GQx}50YH$Iq{p6Q0HO^=rYQ$bHAntAN7*@uDqb}5f4;u_#S3I2 z1x@ z7*EY8sUP@%s-f3O}WccJOXMdW0+{TQ(r-KuUK;DaRv-FLnPrd;}qO z)1N2kP4xqNhr=1*kmr#{lR5oBi_T!}r^_Mx9xg6b=>JiXkS5p3@9)gP01$xj7sdaT z{e|*B6z4>R(ht&B4YLg~zGNj`qkISDT^J%LtPm74azar2y=FVjv5Z&3GPh<{lOZ=o zQHn12pGQHA3O0%mf+PIvBtZ!dgLL^2ulS#aJEa`MB%SylY3z(d0gDQfCfJyi*!fkI zRn%OpHR7F@>H>A%s;nTn{)mjp7Y`&uX)2aC8A*d+jBB#!+-IFQ%FWpYD7`H$C-vC6(*+b6=os* zZ=Pconx7Dw9~`<998Mb&XC9JN)R1L0Sa#6(e@*|(b3QmwLK4Jt#2hI9hv&4jl88XO zsghCl;@=$kCm;%S62t$W1^|He2o&kR>xhCP(~KhLj3SeYGXMYCV<6NS4%sOVh+<;_ zfDiyEAVv?R1v$6!a{MSblQAw0?}l{B{47>@BAw(MLi#|Q_fg0jjGw#tmM$`YQeN-dQvwyf->vI@4C3a-jjoUBTX z^%#fog0jjAp2|$E@e-boTAcG5yQ~J}b{0Z)o{RI=owe3U_zx>toWHENROV_q6`WKQ zRE#y0RWw|THEvYYX1%2$R3+I3TosjCm4z#7l{oJWClwtv^^OR^&|^9D#H2q|BLOCN(Vzd#5$O zVH#qv?c^AZN+RY~zYrj-b~19%gr#zGaHOS}REHrz&Yl#KD9pi9k}Rx&u*%KBla^ww z#nG~1oh5k{S&J8fmNoxulA~1V?6l%{2*J?0WhTk< zD$#}J}h0!K7qdP2idAzHeCk5cq>ff!PfRJoAg8VM4YLRpQ+ zsFOej^lu%}Loq;M4FWqUv(aM)$Vkx?et~GT)ENSW+@4`gi_+?OL4?x4SvF}Z2oy|8 zyAw1S0N@ZZpu@lG2o(?k4+s)uL*(+BVi*kb?vijoRz{KlH2U5Ye>7nPT*xpW&#GZw zNQNN{Awc52On*q08#DPrP?XvOL+a>qon8nribw!JZwHBp$`yi1^`%wg$K%^iN&~R2oUKxjQ&o-7YtG3H`X8=gHYC;6cGfvo&-pY zlSl9pdO#ksFY(7W2mx~23nB3Cki29mj^Y0unEZDM@&9KMg^)N4Qx)>G?j;~b_!pIn zWBt7~wE9nwp78JXf5hzn9ligbN?Mks5Xk+{3=nKXf(M@AiB&)F&=DaszRVE=4HD>e zB|t_DM;Z`Bx0@3HF;Aw56fZ3m1SNEI5cohmI!03}(NR&6o+>x)W$BpKlwyMLhNsG% zRkVOe;X}x+o_-NEFC;;iJF6MS1aUbj$gROQ&LBldlb(5l64snaMTmbA7?waBNYfHB zbW0|>npuNyH4yznR)|@HFwR*`WMJLK4)B#Iw-1WVsp_0q|7&Y{4bAzP94n=!E`g)-MJ4q5y#Xyu|_CY(KasB_K{ZAi@E|fEiOUl=nl0u>@fc z!AuNmE{>9-HwF1rLn+p-k{DGf+DN}ihmsnXVaRS4i~z7;kh6ag1mO_$Lj(oD z&;c3c?c=Q4FfhNd*pN_=`T`s$&7lE|fPR$7V09EM?4mDO27G|Jwq8HHFUt4t)nUlH zZ0)c*%g*2cFbsKc4+tm1*B{%)?H8(ieFq|+ST5SX%{K@j1Ar)0@axw}yy0j+&?7J+ zF{7}ev11_c1%P#sFFN2$2^$<7Y!aT`wFylrY7~&u{TqhrFZm@yK=`*+f%#khw>cLS z_(y)(oWF>vXv7N#qoYvMP*JgSaq{py!#v|ZGd;sT!yGPM?QI@j|9%E-{w8@f0PC-h z1Nd(8Ff#*(B(@75P=YW)01MnDK~0NP#bm5+H?wvX6vcY`xr!>bw>sV~NgHon7i0gY z55jaPNRU>h-1}r}w;k3LNnbHf&udB&vSC(i2U8{(<6Y!UBn{rE?89?i5^U_(lxv&k zTuX8Lv(Tc**Lw0t$>7MuQ{s@Yr4_{w=_PAIUlO=_`FEF)edAhw&lo}bIMqtR+{OG9 zh01FyKKP7$G(Yu5oCxI#X#$*t7ICb(1RX;WaXsJm(^fg{*gLlKV`oen+2xe|Xn!^+ z|3V}OgL`M$Mj`0|BzlMRj*HQ5-MobnKqaVZ!mOrEKlsL8l`C~Sm)Evt(Sl)=J|sZb zy1{SN_jL8%y-R$ZfE6Htbq)QZus}HpJ?E7q*pPEE2OV%48fJ@>67zVo%$%HXPq!IU zpVuh$t2!3Tl}Tta)58aFq8bVbg0Wk#_=N9Uw(jG+#CCLe)-4|$onXH-aX;$0GXm4L z!pHe5w=jRX`K)5zmZGUQoRtWOp>rkD+qHQ^O9|aO8wCH6*=Au(mQ1lYZ+@^jr`q+) z-5F?i>8C2Q=wMKkMoz@rGrgbpQ}>N9MEN9f5Nk8c3ODZ@HZ6%HyDAZtMJ^`D&=}5f zepe8l$8FK(;h9)l?7`QkZXy|BgL}oI8hzzq7Zl0;XVm$GBT6W`N|vTJKM?t1)!OMe zr?$W(FUfLEuq*{Dt-!##U(ys>{mW)#OeyDEQvNSJw z9%bc!U9bF}Jm1r#$Q0co)58%G+9fn zGpAJAC!OQff`BkrBjIy2lmg@JT1rsb{ICqjust zuU!k-1)T+l!%Eg$#*OF=j*ULT$skC#lluLW(N3Sg=K24fbV4ZWF z@1A_v4AAHkx%pJK1Ltb8m9o?dYh{FYbfiZp%cPL`&Ux29X(4GN)~xU18q`mUJA=TM zRQ0qPb#vvr`BsV)BZ{WN^qI(am7yVeaV68|0@Ee?51aCCdmLWc)l8JH@-M^Zx5t)m z!`mQ(^j0cg9Z z48UxVNP_XL9$fjQ;7?mvvn9LB@3;0R1GAsW_Nju>(aZc zm+y(2PkSv$#ieAJfYf!^?47PBB4L@v`ZS-EVh|fc8*i!kTti5-XoEo9aYEp8&|cJ4 zKrX$z{l(6m_RQK&T|Sm7AGnzjN*2&(82{p3_FB?>Z2a=wRk{9x$BZ=}szi>?<*vNb zhjHOgbAkrDA{`{OxW&w;yriX>9GDVIZ6KtdW#YoR0m;jzRjm6&@n$q7T$Tja;~gZS z;Sc*GW+HFt(>qeEK=n*h7ju~*_g1I$i8N)}yF_oQ6`Fd=FXQ;~-zRS3radVYb#(~H zx-G*B<(iH6fAM2&22o74g!)5oz<#A7k{&(>#YaH3(xSeFzXJ*YZWwk=HGsNh+V-JQ zu+^b7!f|%ES!-^x*E9d{aA{V+zfvH&tD#rqfUTr=u&l5Ur5mg$rVTq41MBd$=G)hH z(*{THJsGE!YB|0J)=BiG?N<(GEh6tx3`>vvgAs3oBegXuPJGxU@ZRIv?z4uzu|J~U z@)$=%ByUy+80LShG_x#YY59=Jt7u$gCs<-eFEiQ|I)@Fii-z zead(!+F!18dRX2Zw%OUg5ff3M;K-mbo1?xJh0(x9B;z4HhCDRd8T?}qMA6_PWPtV~-J5Im7; zciKq;EJHuGaS$^zsb;bqbjDgqL?uJwm2w5dq6 zr_x!Pg!iAn5;e}$PY1+eLhVt;5D`Cugz z*Ced+IWfNmNvJ%|PivSnxx)u_xZF2vK+I`c)Qv~_vOt2K8Sf8+S+=zSiAd{L3LNHb z9T4gH4w#VPx9yB_tIT}ubq)WKf%$>BLRprbIY&2?56ucj1mKId-lA_=j-~2LCAd_4 z{`#SFFh~8)s0?o@u;<};NMG99mG#f3+neIkwC%!$?z=#91Mgyq6KR3Etb|%W2FDL( zpLx+eB0}9#o%@LMExUWve^R-}F^A>%iAUvI zz$fo(k#9PWzjLKr`BDlk8}xNXcnY}=+{f3L5NMe1H`d&sqWd*_Zz*f8%_cp4oRn}# zYOsry?gGUe*Y(Y8>WV)nz>gWeO=I<&vDBG+DGMszgSxwq4SDRw2u$dQ*;9=g*mLex zr_(Cb*~u~rBBNP>frP5Sa%~@TUZ5ONZ|&mwyB!$zrSz|dR!W~_bskT*z9fI$KC$-v zleStK@nA3;RBb}C{ij~cfu`FCCH;!Y#|yH1q@T6u8};O<;hlM1F8)nwYbn1TeX#43 z9NidBmA?a<3twu9V8Ebd%4$eGufE716<;g?Cz@Ua@Ug$Sl-206?$6&py_WDwmyoVl zJ`I%i+wKbA$nyK*|Coq}9Uo{uBx2fSNObcw8gY@BsKmBqi2>OJhGa4uDcf3Wc_DsR zy(=U{v1%&RQw|Y2FlU4ffO09I{e-^)V1q&Yz#QDEJONxDyYFhw_f*F;OurlM)|3J3 z;Pv%I@ts{I{-C0G{H;Oy-`>>rjwXrZ& zBf3Vvz}ajz22am`*_!p|n)+AJtvxw>TwLlAbj68TTo2DhCNr-mv>^4s{0T!KxhSez zWU>EvQ9%u&D}pB6slu;mYL`;;+Svg#98NyM>!)LGdf607UFJ&mTZG1xQWP-++A}VV z?XE}a3B*;r6#_wsJx?%wHC8?fa-+_nfS0CH+(H*O7#bq&{puj@m{x->B+-wbhU$6kIVFTAQ9Ur`qjDJolt%&_JjMe&_fwFnn2Gq6I- zlgLq{H$&T7yr}HrL)BqY*vV>;z!-IFmY00McV&&QCZ&tY>Y{`f&1qAi2Tf_TKUr`{ zvkr=XVYP1IeK;@G9qESMk-W;1*8B77g4oD7g{*+P;^bU`8Ugh%&(dFA`T2DT4)(q`xZO^MTc+?&cq<5$03ycv@JKt!sJI?%0^C(E ztg(W0LoK*Zs{$!Ok}|v0=SyGX#-kY3AF*{V?>{`D}Fu z;7QzyB@$M+U^aK#DB3nHO3eCs61iE`C06I3xF+45!HObB`V@}GZIw3>&q&htGC{EH z*D0lcWOqIHQs#Un)_$!V7;%IW#P zYZMs4xTO6PGSxaiOE6uPpgZ<)p%hiBcv&^6LC@NwlS^SlvUrWw_-79v&k@0UkUv0n zGc1B^g~m*NilZiX=#}qQE+itK1l>4spfr0ya*?T9@mt^j?NmJ3sIv~?@HT3FGtF8Gk3*!mVk(tiV z+)j^_qbB>KR#^frjqjdJ&4x7Gj!(H|l0r5C4xn*wc3F)5mn|x+xbbd05VC_ z6dpcZ&0EVR_1so`yBbaPH0ju_sF2Q&xE+;aJkF)|6XD{#KfxvWSZXxW#yTr)t|AkSB| z+E%gZ5Q~z>p}oIXm-D-a)v|_dfu>z9+TTjnI^;|C^*k|%BorzrQxfE+%~Q%~ca4fD z{@#Hb5Hu@`4NPQG01$8Wjby7%xM_h{#KJ##EI`yRQ>q=?16Yr5Zjy6i3c z*yS>1ZZVb+_d~^f^UKi$LPBk-6Lr1~?|MN*(!ntwtZ>;UC~vnDgzfUo8q)LPF9(`8 z;H=Lf5m!B_>68WsMwINWLAO?tNpeR!Oqhb9yf|A)eErfQj)T=ASthV~M5pN8TG0f1 zV%mBe;Dc2-&~^1&*gKBAPq!)FAgkj|0_;*XP%=uPniv+M1osG3`8EPsD6*zW-Oc=u zsq($PZy#wZ<7<(kC^zP?yhL2B(Qif6`91t6zn~()a*^SWNFj3-Vq8^dAgao7n69kA zz`OZ=;ttyCmG3O=d%Rui@Ub*Yef7x;JW`@&WsTnAu(QT6SLQ^a@dM*TeOOUmQb!}b ziDEel$6RMmgP^TcqA<(-v>4jm`GUUyl=F<~9w2WaNFzBjY};)0>SrapiZv+(^+;T{ zwLCxb<5bETw_#)o8U@jS;GtI~T=G_klQXfsf;a;>8;{&|QHY|$_b`K7uM#Nxxj(7O zg^CKm)W;PEOUdsqjopklkk^B%dgZ#0nx zvF9f|7m`aTiS2LMT}@W+F6{pB;3%Xk!s8H+(}2>pmk9)YF~EifJWD8!Ek^am?I>XA zi0jD$32OQwuaw6df1~RYj*F#xS0dtUpFhnp4Yy`hK6&>}Yv1?LQogquP2pWy*{zFQ za57lT1e(c2uSQGaQ}-Mu2+4^wtqaSftWTZHpA@^N3}uwWQxp990yaCag}rPv%v|rv ztoZUOB=*V0MJV5nxy1Ry^b|8U3E1i4LlRxV)$B@CjzyL#Gs6|?pPru5mgVSB2Um84 zo9;j5?|$L8aJcTdExD-ds6m+uf6i(SRc7Xi9ST%JediX}&^32TRh10mz~+~hbo%Z; z=MG;X&mGA1a_#^P`BqD-$i%t2+}Sv|-#OX;^^EoV*Xr^8`7?Cd>@qDJhA&yn#_K2z zl(F!v_AIHKYyE|7gu7+`wB5LB}jSAHtg>Y^cv&f_g=tV7jG9$y^9pP5L zSN%ZPpA?DjtY*{8?yXLl$zs8O{IzBC4cV->@3tH&NOv``u*7Ub+digcHgiirqT|$ zdBrc=bQg^92exI{@zS}{cr$_6HKfG=(EB=)9Hau@N(0(qFXzjvZkP@8I*=3jChQ{y zyD5t4Q_Ja~-5Q(OqrK-8mZ|MP>9Nh*CB_H$XeLBF^!>Ep);rU54)PLJJK4b@Ts^o$ zpX`O$+m(ZiD1^F0r0hQ+OVb}CEO(`s_k$4zmLDR%h`pMgmxq_DuVVoWJMl*zxcdPl zZc)2#wx{wT9kKK)I*`>U&OTRbe)~Iib>a9N1$-R%hD+NdFKnIu#D41=ruY?9Nu)+FO%p+9$L3XM;p<${FQ^7*x zOLB?}YOMZ@z!Tg`dxY6GT6d6ZV#Yt>~nPa9pWQW#A?&`Ynbotzg2korj|LQ5x1!C3eJZCXoF@xe>t$Hm?rhTiqtXp?@y{&k#gtBaJ17CPS)< zaXD!|UrF_+m(7(O)0!b|>!uVx`hY1}w}Bx#eSvr>q0T~FYRs#;*(|1R2K}Mv{CLkE zb8MDzErsM`+$BBjmJzkfrrhV+b}l=!CM#ZDn9lhz_EBmHTogEI+x#F$;?(_#=|IU} zuLQAQ-}B*|6=W;vi?AdVrgbd~PbFbJ_cmtsFNksYtD&u&IPzVR1dGmu5%+`{p?#wE z?O0WKykM*6@w>EXw9m_2h8{n=zmTSvs;Gz^{@_3SK&XJ?1{3oqsZdy@>PwIfDwMO& z&M-SHJm*KMX!Vv-$%(-NTo%HNY;kj-k@b@S?nUoh{6*i&XBq2OzUSlXnlrN}*Cyw- z+n$R+qQ^;@BD8CZkWQBn3RVw#8+2wJEj1dOJdz}CBurwvR4Y?RN)G#;`Gg0Smj zICXv;$e2~fp7jr6iU6iBrGLUAKc8amE1ss0AMc{C!&OGQ5;a8k9+4EyuxYo%mXQKo zXecIT?UnI9FMGil;APBuw}@3`bs7|RHBiVmP8=^ET9Gb&fEhx{{PxP%yiE0wgu^qG zwk0XmsW2L|{8VZCUBn-@z#_C{gVCI4=-~u1eA29Up^O-uMt8OAZChZb2~@y5cK~j@ zM#qAwPTqX1HZ9+BMe6+{bDh!W_m4(TM${4Co0p?0U6UlJlSbs=+>K#XUcK&cy~gNH z!FXyOQ)==6HHHOOIf^?7(g~S_unca4!Y-o`sztor4G2|9$T_=l+S9jb!{%_8I{h5v zb$_7n7l-INPgU}z^caaApI#{Rz@uMlEpsVdCUeRGh&_Zx_F~hhV6L zj`vD=70YD_2?0t2^*i_6)2VJIwEYS!EOWd{CNDk9cR&moOKd3(>OI~Hk08Jku`wv= zWH#PsHy1=v*iw6zATl_m{MpOe`Q~veh~)AId*X)^FP}Tbhu+7r!|5X->%yzNh9+&q zCh;gGMf>pM#ReDgn8ED|mrp0!=1428Is-(n+>21(zyt7e&lq=ad$tZ?BB*nPnex-n zDSp4rId4(s9?Rhy+Wm~1^ozNF0>l(?+nb&EDucl~cDJdfEu*^><}zY`B)oSk^h(6MbyTpxLjmB(+2xYExo@1R$v2xlu zG)LQ1uSn-KT~@85fgo$5Nnt0tT&GAHB=d@VJtbfYuK2=h>-ex#tz&|YVoxhc(TTwYzx4h>oh7EZ0u&MTR>L$E>Ba7$AcyfP zA!6>46|PvkKAp0owcaCSlFd@j>K+8PdiPI>e1WXY^fdVHWaHi+ibA)`4#okW>tzBk zB90eerxh7ILsn{o&2rsn*NQU`q#XCdo3r@O?d(K+_T3NfH~4L1pFC-eZSQM2o05J& zUI-p{T@h7X;2B;k`ygK43j8U3_ebGev?Nzu)dtzmQo5CXK|MZoSyBU?Ko|Mb`Ene< zNStHXQOT#JCZswC(L3{%SwQu^;!_NDK}*70xXs7U9%3yi*s0!_h6YJrAIZF6tl26# zcj4s}=qALyS%^a|K+^J>ul!hfIM-prKXc${kg??|B=+0pFwe4K59WVyOCR zr5$ZyS^5=m2Br_I`JZ4{2w>dc`ZHkOP)6uR;^+YhpvyR5%BiILE_9(t(^4#Y5*GfCFN7}e+7@X|dim3m?Cu@F55V>MT-1Btzcj<>7&xeYVxF1_8Ey4I)leBXsiI;0)`=x8iF41rX#1 z+2b_WKfBrYdo5erLNB$xds-KvtG)X)u&8_6d2y4ptIZqnO{51I3OwP0Ytb&BU@_fF z#B&<0u|XADHAk0m2{&dfnQXQpb~%;F@QsIQu3pb@9_^f)?oguKX#=iRG|;_lo|Acf zLvTvcY7STHm_(0d*=X8+3qLy$!(_;=AA@mEC)#%?EW(}4nz|aNIW(aurXB-_*Lno{ zMhXs!%}p;!RS0=!)bgrq-*2)@xY?%ZiM-qIu!e5f<)`mx!f?xWc(bfiI~@A^>t%or z2ABnC%GTutoW$Pn1HM#t^f_0*64 zh(T&MOF&DDk`3t0l?lPmH2IZ7LLAhjG;F{lvt)D=Lbx zALk#jVq`&^gr30yBAX=%Vxk`cu~yh`)wVnPrqu2k$y6H*G2Tw4u85C5X{I>4O_iWL z#IRgEs9xXYC5jY!zP}xQ)kwB#07(8=aSuz3LgC%}-WCYX4sK;I6>P9BR*}{5Qu|Pu z7SL$m38PP-)qQ`geNfh-?+fbow;a)V;`NVkx%#6$Ik8+9GtVw3b|nEVi^AttO;GI- zYB>r&?+`QhWzuPlAZZv`LoBF%90e<6+(EXz9T!ELY*Luj@WvpXW|-|vL1;ELsGHbn zn^$|lEY8dc=UEyg5;d}(t%y>&+I7$F)TSU@Ww^q2?gUg*suCINvwv@!HWe)mc$-PXF6KlO8LzdnS>YT3S5g;FnY@K2t<=rfA1 zv2!{SI=)zYbLsOtkO)*|IK+b-9zgnPF*;PGy=7;yZqq}~)zk7L7H9E1-@bpn=DYIN zXkVqS6U>r`vZS-yamKDaE$Doxfm$+YV^*Zh{hsBK>*RD?2ipu*_sl~hH3#bwWV>r+ z_Rg{+wN)>dz*yFH-NLz>PfQXrp;4rNT#Hx)-@f~qslVD}$6xKA{8j7s zX~Whr&vO^SC2NBJPD^E=*TCg;f|5sWu;R!4fcx;WqI(mw88iyz_nqKYu7#6elsfE4 zZm2x>q~zCQ1Gw^{ar@u-(hL_>F9Atxkp)!o4C*F-I%_#9? zu|Bj&t0taG_?CFEd70a$1W1;_oXlwR!@k4#%@L%0SNJVQVuKP5@F{nh zryEr13stX~#;&%e(!qf$vy?!<1(H5r`NL7yd9qwJJ%|3P)p4)pGZvk|XYBzJbdCKy z73PsJk)wA^lb7vfBLpT)omP!!LWM>4u4^2>xLKHq(fH>tOWy^=q|ZG1M>nPpe5Ig^ z5+(<1wlMHS4p@R|R|*d8MG}k>m>SMwu9Fhe!LoMVW8_~!*@esDMCblC)4Pl7bdQ33 zZ==EtP_^w8W3pdLHof>|#-`eY3nb);FeYZNy z1SKV5NilT!i|f_28zbSNg~3NnnJ&kycY{u+Ls1#fK7q>^P%OR(Nb78oRffXc{(V?_ z9ufe7Vez+#VfYKp>Xf{b#GBvV_w5_;VI*!nE);LHU=IBAaVN^EUQubDNWYT))#W+( zYl=6f%sy(WifArh1BLs5Qh?FJ#Y=HDr|8GeKq>y^%SohyPbc7S=~Yc6oT9ezWz{_r zHjj+`_btVV$a%VWk*mvKP6uuU$TU!y>rk)p**C?#CdHwuYuL*TxL?To4&R09Z z=8pu{i2zY{r&Kog(>fTBXXEx4drg+e*FEha$kP}0Kj$8ke~&%>o_oCf9mb4b$`bX~ z#x^4(JskrR0|yTmBO?Pl$IjfuQg?3$1tl#FGdo*%bA5-m;;J*rF9ae0&~6{Mo)V&g zW;x0;#FkPoH}t!^Xdv#Isr2%?d#(_{H#wquvS~eaw!vqFe+4g_z9g!Gn^9WVl$lm4 zz@PGE_{UY#E8+d%^Tb!9z9VPMJ z(>qSpsfg_<H0Mb3v3Ja-Mcyd)F9_u8+JX10J zYq5YxjLdy$!+AC2u~IY6LAhO82Yf$(i+UKp9r6pAOh0a7*PwS?eBBwKsUkbuVd5UE z#8;Ix$1({5(;VC1WuN0dn5X+xxL$fq$?iw-@>3i|1-f%N5+xX6j%g(Ah@L5#=1cQ@ z?I$k2$x5c{f(_n`OZ`gvg%cUc`D%rIz68m)TAM@p5Y7XwUhl&O0hr!!+6f!-BHIt_ z`>NNDYKgClLLAx+HTjF5+?v2()a=6eE>^ZTT{AJ+u~8|sS%nroerPHvh%a)#0c6NsCjllAkt)>aZq~8;h(v=@y@vMyQ}QP?Zk|FFvp>7S+EU|T2wWgHucrTz zLx%9DagfdgT5W!4_!(r!)p`mExytj1BAg@X?5a7%9ye}^b1juZy;?#R}pB7 z`jAQCZ$Hq%RF3CAJr~NY*lmh3qbKgoBJ8Bqqfr=bj>U{m-Wnke3AHGT>2>!(fBfQK zbm6rGMko61rIh#L@ z{6r0s%qb-@MNd=mMsa`A-sX91?e`icU^_~W*~S$5R#@<0qu~DB=MYXLgJaE;VnmSa z*%}&*h#75s%SY9CeG?&jU8`vnw1f6FNX2CV^c&-6J`|Hshv2Q6dW2#LBg#4ZY-lGu z=jW{R-ngWXCzR>GR|)hL2Y*e1NMLm%(^x9888>D?TSWa7`I+iJNKU$4nSxsdzC}Ia zEA`{JqjY^h_eB29l-3Q(*0TU)V1F8*yKE1(FU7Zu$E1A{Xs)HqbF4G`wW0rUWAAfj zR6ZP4;bjD|&U{`G&62Ck@m^v z#K%&c`@_ug*s){jN$*LUj?7|nN>3?Q)>LhW3eT?=z5%kO%>w^mm(T#bAhKDiV1Buu zq=BouhHn%T-{SVGVCU+sKfwm#E~;(D1n)YfUq~d1{yq_`SbNT_l)!S!X2^2jREU-_ z7%}p5w>EC6k{ilXTWL}S)lwI?lnrQ7NjImYN5=*D+_mTrKZjpImWNxrFS*oJ<~BBApZNj zUjxzG0k>5@vJo%?$Ddybn5vELgO(8u&GWn;80KibLD8jKL$2|+ce%Nuo2&le*G>-f zNUM*6tORFi6b{9$58`!3m!{-42Xmh#$zk}~4MS6x_3UPyMuo~|DWSERk1GVh8Lf!N z*wES}feL-1yye9v4nY5*U-4x3jE6y$o_Z=w=W&R%xdY$pGlMV=dt~#F2!pG}NDwxk z3_#W^g6g0LpH!~R8&Ww1Y^q1k68s2sjO&4&3bMbwKhfVlTgh*-7l~@C`#QC4oa;Jz z&LB2|O`TIw%ZSH-wDABUX8vr2azY*!IivZVO0l96;n^5~>^yuX12 zPlCM_ccsdA`D(njQ*o0Ti8!))>S?@*40mF2vZ1=Pw;EZObIA#wCr#$eC1Ld^Rod6k z+Ygv~;HhrZv8!>lmWaX_#p&P{390W2Xz9vOmD0IVIYD#od3^Kfo)_Keve2RPqh5Sp zZnQtKz}v$j2||;a0j(;O#T#E<0Z;xm)lS@R&AL8`XwoE94<}sTe1%7on|!W#79f*) z*vsdgGr665a?_%k{M4KWUrKITVSdA~DpReA7FtDs$6|J8g87@sA6*Lzj%LB7@2pEU zg|lW3<4S}Cf#&A`x9+na&j zgsAH|XTC~_Kd!$I`EzX{xTRE~)FEDKxC5gF46O?#K%;dtEA!Va{sf4DSMTJJU1EL)u`Tca;m#6~2~V35LoDB+2d z{-gTc@1Vd7CgLE_0<&Tqp7(^C za$*$oZ&P_c8}DJngKQZa9zPl~vO{m{SL7td+HXiSU!H899k|EVpPydot8Ql>eR+6g zqtOhn5Pdms;1?jBq{&C_A-*RRJ2-yFsagk?vTE69c%O9Bff*#>iM-%;fImCE4JR%` z-0Dyt>Ug-)_H9chY#|hWwya$ct4FK|hE_h7Hxy0iCU_*YVYCO1V7-CvMoU7MlBQ&F z8MJT z!AfYk3}>M#ycSLKIPi#2gO*bgW;0RZU;y*Z>8yApd#Yfbhf%eYv4n@tv-X3@E!HwZ zm`Oxo3(JbT))kC!@aZffj0T}?m;gng9b;qcyOJf+G?O`l4yZ>IXAuLXp~#@X!^CD^ zxyjp*6mrmH1iEGRAG9XTgfbIz_;KVE;5UIc4a?;5uUO_AsE^z>NeZc|ZMD;T$!yP$^D3wO?21 zXBEJ_m@}BqPq_&9UvZ`eEgE0O@2E*}>-@3}A@Z?%U)pe`f|Eh7y%iSmF$QYK$MU&7 zkoWG*pH&BzCZxJ={%cK_qAsIihThWA16G$e*u`asD?9c#Oh{~VTa7jQzr~Sue@C_) ztqN%nS!AvDSgO=RI}dz zBdu(0Qf&rdGw1t#1d+EIQU{r8-Kbuk_dVaFHQR@Cj=p!SkG@%J79$Y(Xxs-?r;{TX zv0+hyKMr~_j@g+L(8!LoC@+)t;!FQv4{Q=#V=KiaLLqE^N!())Ut_CbCDL7LRu7z+ zJ%VTBKHq7q=ziOqKRJxTg;choRMVoT0}2=<*UCP+d=6idv=|Hske5}~@}lOF0C!%t zD8o}0FE=c7^qRNC#fbg^l5EvCU;;P%swR-WI-wVQM1Q!1LW&Rc_XyN)lu<-Lo9l$~ zy?DPp$?=MoC{G9V+=k?#@Q3%ouDfI75Y9s1Vkz%?Bpi=2IT+GaW6^^X-L!^O=F&~% zhu)5qFu;`1bZKVm|0#rz}3I?16ln&F#mZWE;x}kY~DjGtS2_SvaI)JoZ=vsk)})g0Mz%#dvyR*qibdEQY%Zt>(7eK80&`s&9L zt6r6tHFFY^9XVq+13;^>(a@NrNxS6wdt{-7M_u2F&WShVFiOBHtI1)F+`NgH<(|1$ zG+&Qbo=zY7Y@Rxh;ols-`8q~zDqy|Idw!kbV3qy7*03*}G+$|N-u`M|IG&mGL4?A- z%mjhHUntV7R`0dI$-{3f*53D&tbt8t2dlLg7Jd6{)*ML_*~C7)pATq-1A3;Xx86or z<%I2L+N&p+bJ1Z3hJo-a5;jZ*pov*@aF(R_`YFli(uE0Yzi(ht%&z!_GHa?nSknO5 ztHzJ3qr{nL^X*L1AAw#$a}yKDte!v9CN7?jaA~zZY;Ux&v;OIcL%t|J%%kVE_Uu?7 zI~gZ;V~n3f9Xh+Y9g&h?wL#|d+W+1HQmK=f8!nIK%>xIsR*y~$bx_lP&N#|@EkYqL zR=K1b#P$oW$QO-Tuc^b{tDTY$fCxXa(#2?p$(!nzfowL)LE5ues-qLDH*=K$UR+Sn z9=|9}iXJVE1nCDH*`4VO>*NUkMbP~=9c5wWK{jbtm%g6L7>nEdp}1};%q$2B_F4Lv<%#rN?(1XE*x|vhs2~#BRv#0H>f*xf@Ap0T+s`o1%&eKUX4d+x*=y!(RBUWC02JV#=feGOA*XXY7(xT_aCR}bb-itZ zJSzRCiznnyp%J2TJMzDt+mW}F%wb`*Z#wv zPM(gJo0psWAvc1KRo%+c-NM$%hEB%G!`8*w$hNl8XoQ}kAtq`IcOhNdV4?eDzdQqtNG;IgEnlNeu5Mw}|5D`Bz4Vup|KhC=kGk6_dLz zZ#N=nL(UT8k}YVfEKo>?5uvs$h}HRv*}|!yw!q$L1kQwsr-ufBMv;)Ce+5&&&CJ8- zL&(7_l**-#zA(cDo9%seAU1CwU63O0R$hX#(AN9h7@=*}+A%2{j@k*NBG0t8Mfpc` zBOlih!HtZ6GOR!ApabV3g-&5fD1~{;J`7%v;sUbzyDT~&09+;@8wZoGf(=$t4UaRb z9I~t3;UDLd(a==V0v~rH9S^Hn5BFIQU%ix9293UYjjs&mUKyRfG9wT9C!P5&o!+KD zOQ(YX+4lsKSK#j$DBpb-e1{qwQi=jt-l~KSE1m%!pDSNrZC7raUjL+|-f^&+eXtt$ zPZtnS(A(Jn*|uo~|5visOSby|Cy6J0Y=8u)%id>Hz0VkB)ERqS*fIWSxDNnrDxuEa z?ShbXMfAFgfJxTvQGcT1@UbGnzl?Beb^wszq3V7{)emYzonz94U&mE+)>Ua1RK=}E z{`cqQAH0AIq0h8VwhO@Ii#7YBmH?0~c@CyD?q5k@hp?Pgy0o#hqhUe(w6*LaSo&l~ zxMn&_Q&CF#9}7B+P^^Hqgb$>4XQz&(xsJ%=rse-Fc@w8&lod^YZ4?_B_&pS6U_aZ5 zG>oEoU2v@4SlasgCKy->PfTa2YtsD7?;ltc8E1@i2z~=cgfFDqH(?oprQenrKZdbx z+x{nfBtW~F&5`$H2GaS)pqsshYlf^zox zbu;?+^ApvP@ch3X1savkGFB3u;*XPrq__;g3qh~=Ps1HBjuKIi|3@1ANu@^21g3Fb z4h=q0Eln*Q4@bQ>?w=c88O^yb&H66QMw^g@{7+#0m*)VW(**zV$wc!gp5BZgWhtz` z2L6}lJcISdQT4|$DpWHnO|TCiB2#YnLeD&)8ahShuvo!1eAD(mTA`F5tD{}GBe|t_gYs`0nn0xZ^jC%3R-pMxMX+^17 zTSf1%|A*&1i6~5oC=83(2#aA2PqqzDD{gw{Fi^hJ{Qph=yiN5+NmKRl+#nL&i`d@79*crR7(kmOoM(3m7E0MNBVz&|Nggry8X$O0@s zWgJaFD8QH$?#PV7tY+^h%_bp+5&UYJT7!4ArZu%blPYP|Gb!CsQaaYux+9}SqBWVU zq*doQim;m3)cQiIHC=D@nbc1w*?oymNe`^ffK>O{WM7jRN28Q~SSi8&uzH|1ThFiN zrlqE3rKhQ-=V7IHs--jIs{m3pl;%mawCc6ye>rL;`+jrNGSab{Kh@GB^)r}#_3gy> z8~H8g*=cu>YBpnK*5JOxYMW+j_wIdh8f$TJQE|Ovae0}+yUpTv#RJtg#pR^~)fFY> z4m%*V{C#mXdvP&)Npu@yj z%rZEARqZI;R(3G}GMG3M9CfB@0*BQ&-38lvj_!+_3B=^vq=7RnE=w;i*{OEA|EY9G zN=?hxD9LK+p^+Y$)6&BjgW2eJ#oNtngRP(-p2Z$#supf4qt6dOLS}Utj;}@EDb}d{ z=bmR5LMtckxfQrry{|!RKyI;dXFwu{{ys{800cm%-+*ZlvUStB5vp&~ z$|qMqR@IT(JMpYjB5liVg%@>`8pMFYHSGBdX6$YW29BaLX|Bk!nJM*XkYM5XaXRhA z{=ZgkZpYCxV_tSEoUJM;9u&U5pdTfeIAIR5idT;UM;JIX6(rk%gf#WYy7dKD2mX^O z{nA?*3g8>U^>x!PZE)8KKm{ZMu&lCgw~$-6l?+oKk+&su84_f}k{S|ZDRNPig2T0j zBr%!lMg-yT?ioQ$rhHNbHjZv>dpI0i1qT>+{Bc`!rSNVDHl7|9@Cfwc9y)N}L8r(k z4;mxSgIN$V0aM9l1pZw!!n=ZV8F%*Z{!x6pV-})ht~D&Ba7jfjxS;O3wQmWD`nz->G#vOn2tio&=u0EZx^?Z#>GNmIOZjI(5ZA4z z*&{)M{csZiETUlmm8f@R9K#5C<5awB5m+(-9vsC^KVrCnD|fC!r`AF zJ>_rpKVtTONALez$-ur0gxr5-fJ7TM25^IMS6fy9PKm>QyGBBMFwpyy0?rtnIyeNr znHLP2Cr277$jStw1P%w`1A26#J~Gu+U7d|7Klyg+n9@gbfV?r7@@LfTKq*3)`L$EG zqUI#!;Q2H9ksP4QA;GG76n}_1*rj{Uyp$(zLLKx^a*I;Xf%NUcsoQhF>t@WO>OlR2 zJH(86B>#*)4zTR>6bO*3d=`?FSJOGZ{KwYxV6ZLqN87gt19i|A*|%t+e}n{4b&C=D zV9*SI+k#{NtBp`-<1e&8KyCc(m#8ZB2U?gpU>lqo1R3j}5))X$`WwLg0b?*R7|JDr zod32Z5`!}Sgm;PRw}=E)b4&OG)juUH`dfAV=}iB3>}@OvLKO9O7rwX2m^;AWfcVyl zs`{i42?XE*z_U5K9r#QiU3W%svO;jI3!ynDk$QxnY?YN9MK}3$B2PX{L*0He!#qk& zCDQ`Q^QkmZ8_60MIN?%S=P?8xXX!8jZbEv#ml6;dc^@b!7zzinE8E9-4583fVqR=q z?A~D430qWvFt`slE=(7f_)hW5cjiKXuAylkMgVSfbZsQgCT}~M(V{zDFddXWtQ!K0 z4G6m9x2RvrW&8(87y?P%;~<>TdLX6EDJW@F{#=jmr*Wny9F;^F}txF0;=V`t;$ z;o^eB+1NOFx&D-osea}>yf?%}v$K8&{w=a)w&#&Mi+(}Y{E=48^9tA)laV?;FkzK9 zY1HY6$WHrtu-W+4aK48TDoQ5$q8GlBUQbr^Bb7Ck@!e*oiN_e- z&8Yw`$t$Ne64iV4rw>aoa&g^0S2M9V!bHV&=y06v3a@I)^!>cfQ2;2(RS7kT<(%R) zX?EQK^;2DCEP1SQ6hiT(IvwE0E89$Wqp6BQtYch-W_tK(q=`X=on&kp-dNkSmazD` zeLTqk2G%+~FA@A)#S?PIniD+e?+;<3>XZ&tcJC_Oc*=4^>p+_ln#t{8EFcam?v+@cu zGV*{lz{_NxXH93K4Yv`~JmGkgxZ29{=<;JhBpUTW+6OicX?;YtBPvIgZV5M9d&~Q> zD?CS0pE|yAkB1GX$%|H-cWrw=muQ!iq93Y!i~a33IjD&jAEoz!+_-#a=b}=^o<32{ z3^Bg3T0C55Z*9!AI`_JKj{3jnk(?n`pVFG~l{ z-?991GK?N3DX3~+0JZ6juJq)xha z>k;DMY;_?24zPN$+=gss9MrJ#&5{~J*~K)8e^wJ>XkL)5L`&+0lMkRrR~XzGO$|Pz z6!W`z?)L~FER?M+vfavv;j7r$&Q>o&XD6xfNA1uYge|U7)7P{f2P`d#2;ywX|S3 za7?Zc__E6v(l4Xoif)RSYxItBl@d^Fd_14?VNzUQh(PCO7Oy8NE(K0nEmp2JcE4kG zK{cdzxxAH6YLmTXeZ=SI`z|wgkvwWOJ3W6WMPziR{0G|eK*>VChm>B>nBxYaz5E&u zuICezQnok0Z=}1DM4XfZ=MMBAorL#7sjmhsY#e{R^+0wcD2bt160VX&MGHkahOLuCih-im498KJeC0P z%5CTl3{^VX=y~cZaDfmN5kBLETX&zHe3{kL{IHVowuMYYP-do8i+K6wFlzlC%Hyv7 zuaflJ^JNq4fe*<=9DY~zY6FP|jQIX2mwPk3rL%w2h^J6-SM&KiqBD!qa$RpCpE*`qh9iyhwz ze?}=4UM1Kw6ltq+(Qs!=AYZ8ciiTEx?0+x7WHn7>NbzP_18@$QOYBzyc#Rh^nU;_HyO@?WEmZ;KlW!Chcyk zhpfv(>BL`2E89;dLxu!kNAp@tj2NfybVjV_+;=`XasH6QuJIn(`newa4LRyP_78ijjmkYqm2rPUo?Q*G zN4u99ZV3L?Q%S0>4^g)mavCg8j7gvvS0pn9-N)0hUG#ZU*O$3pLCP4eOEkLc{9!$@ z^Mj>R(|9e0xja(aoTIJ)F2x`ly2Tl%L)Rh?Ng z4Uen?oM93N)(q#H*V5o?rsB)pMi;cZy}Aciwf+DFzVnA?S%x~LX~y;+4PD9$4xVDm ziJw*~mta?i%anvuVnFdKib`Wmfp`T)R};nRcCVVKPesv@DKxwOOADRLB#TEhv*+(g z*{gdNKh7j5+wiA?5$oDKp4T}RL`u~Eb+?H(fs<%X4BoSB))Af)UfBrl&_qFll% zvLq-i*ZlT2jIbC`6raXLz+W6Svzc8xh6ZC9inft=)Ik_1Fb1>oo?Q z0r1pEb7w2cl9q#5qm<&NSAC1Ht{?wSXvu5Rb`p`}MNRO9xIIY16Z z8jb&GI+nD%`mxXa_q842Ufm!4gV*6=isbv>C-d+mJqiu#X^2H?P2*aPGFk)!rAi+c2w$C_Ut zh^z7ys97vWh}{Vv#1zNropuHV&1K7;jKBZ&O`MT5YOV3&)#b+PGeI8k zJapDd*Qd^LhV67TfbJlHF?5rC zYf1@BHVLee?u&=cGlrI8L2KU^J5dQ6bx~Ou$4G)heHx>;H!-HSzjA+IOEW9TQ*Nvp zfkW*obh?8e9tLU2CDhTC=o%UthCghauXkkJvxiXUNy(CeF!e7M9P=!NC^@oXlgx@5 zsG=y9f6t*s#MRU^S&ayI1YW%APXkV;^&!&a1qG`T67{PTqvaKOP;Ll<#M8}M;SsUK zVU}%SGk_kHYlXP8k)!(~+b+p4IPlyC>Ho!g!IF`}(+%(81d;AR2jU8{iAWi*chL|_ zDl?{p74k7l?;RtI&JNk6F+kiJ=`B8Cj?EbSQ1TL|@w}nSHLp~*3T=u1IvfY?eD@7^L#tR20u=Fj-p#v@xc zUs!Pxg&oej7#LK{a5}L=^&+yBt0v>(G1J12a>wN2Zz+^AKB*B}V)O;Ow7c0D%Z`&1 z(JGLX_qxc|b}p8&dHQL=kPNw(zL_*};J(1@Xdm2^O?PO6(~chG_)XqP_GH=qo6e&j z1hU?Z5!u?V>6Eqirsjx5Q6z4+n@24nIfkm05;K-qC_Hj~At-U8bj_lIqdzLxCqKte zi6|{t3d8L0X3(3x83(mx+(%DNKmF8=eBp!JG}vJx z6DxEGqmTVr0RYFa3P#*^ZT$Gpvu9m&maxF?r>g9~FN)VRsVKfhd9Tqw75$RIxBn>V z=5jwH1p*us4i@)T<~sV$y>OR6WCJe38`8W~MJ&Bgq4%G%Yh)KV-z@5h>%9h=u$+{7 z#31Zw70k_d!z7pE7rFghfS+{es`Vo&JMIr^#=9|W^7{5&r7)k)zHNO!I(pqHA1b*6 z&%U`vy#)L@A8*lED~?K45wz&c1vp5etUnj_p#{oputqMbpsNlM8WW>^?qMv{3_;YYgji zjcSMGJsF8S5icm^%wiWQ69mhETxN;Wmn1VBs4p}iW4+IYJxvbilpcL?WWirrg23=R zO9visE43x69a)=0qVQR5#n_31DUP>w&thKvwwHbPlTh1t^9>$&G8km$V0p36<;a$@ zQvpnTi%K7zg}u>OF%L~nk5J1esoQBI^Oqv86OL1oj%?QraBDwk{)B|0J zVrohqwc@DQm8B~1!@O0D@H2QL{ToVA*cvd?U1skI27XOuHiO@{P_k|w;(5U)R_s&P z7lIb9WGpCVyr-LsOOcFQ?{yiZr=lw!0Kg^r;M+8ce0pigVHTWNtgE0`44)+lebHY& z_=sHLU`wq%?5%sFnC+XD?#GMZ2W?z|xQizLl=JL+6chJz-5BNCc z+zNcG+LtLYt5#bILPFFTZ7FZ<9oQz%zB+!ke5NotYy6o!;>U-80#qnb1wQ&Gxo9lL z*@>wr^}z9Eulv-+?;}rzi{9mY|FUgs-76lRG1~8fvP$SV)Pu)_Wh3EIZafu$ho9ne zjYwwP^qAC&Y5G+p<|UG`lx`YL-+1>*{Ig&$gg5!q|?Jwq|ra4PTjNq3iI&e^WLcv?l+-rwMn_u zEheAtMp>mYX+Z`phCZi{C!pd&Vf`ec%*= z+VT;7f&`^sSV!X(Uf?sfJ&(6EekLPb`u485;zC_odSB$c-fUimzbd2w{<(*6`u9Bq zDp+itB;}On;$dZFWkc|D@$&QY@*;-V*jRXY`FJ0|*|@oQdHE1Le7tZT9&Q#mE9-5Q zmxq;&m5mL~!_CXX#lp(M%*x4)_}JO>k@b?QVzIwaZHYPv+xSfzO6f~g7-covo=JUD ztY2fP!k*#f91BhOg8Ad_9{U^Z$t(2gj2`q17tsyfM|;W?HZod9Y%c%V`hfbIV4o4X zxiP^rT9_ET=?;|5=rIKYhG-3|Yk6c>9eyok2sa_ovWHm?wdwtIUfG{R2s3sA-_- zwW&En(mj6KGM-u{E4`SQK&zh-Slq2^o3#;*ZT5@aXz=o z{{7X`#Bprr-`eYWL5Z1#+5xjL0r>8jaYFwvuhKvZv8g{y0vE;2^oMAu!SvLp2*(h_ z%(I97SB8ml&&BXN9jQP2Lc{K0L^YEhA9$z^Jc!lRw;l760jxTXw-hz*vpus)Qw}?Q zTM?ub@FmFB9{my8O(gfdDTMKsz@r+(nmL^Qz-6hMd zQ+6pLbnTkv^r!1bHAMRr{uk)Dk03V_J@iCcT~s8w&eECz1l&6#8aoMTf}Wq|6v)0k z{34*b*vz4Ljf@M0-^XV#?KdWe^lKlAxmKRDP3T`e%uSQ@T(mPqE_m4KCN(v2uyRgB z>;|K3H65(9c;YT2)JO56v>CF~x6|E5ydJG{LsKG(igm{yTUqHItZp2kMAp?#NjAeFJ(-qj25I>8lXFJG_WcQ9#QhEtEA{Os=Gj8wCK2hbDV!oCDaDTRP zhuG-^J{>ATH+?#G<2v^4!(=btP4!tUE7AV(s%&Uz_>voh{g<)D^hR#x(*k`z7nJ(t z4-sx%Vg+ZvWt0ir>@iyO#AyAugmPo%@3@^xkP(V11MKwv4zVx3VG%#AG2T6AaDa*B zX9~3{YNyH&d@Sp4YNqdNQI%1o!0=JSZe<*kPsRZ>@ov5i#D-}EWhz&2i8x?1x=%Nz z;e@--jvKs}G*Y>EB8=MmzNNi+94(^+xG*VNbZvuZQ=E02rG8ofZ}|9jjo5%{o$)P1VYW;;fE{ zvXcF(cns1>offMxWAZz@qoh-|v54m`j`KF--@zN4z3Yy8W-Sc1Zk7t@hv3Cu8d?FIHg=iZMC(K-_cw*vFct>-)o98@^fed9c;m4ySv znDq{?7s+wg{1Vs%`bpl8-@n5eYPp_MJdHTNy6S1T(|aj+obu&lR?qZqopROX+Rw`` z8a#@>{RnXdgzwQP3Hd_YD%;ogr;3z5ZS5LF$-B?zzDQpg(o!K1#{8V&7+U07Z$pa# zQ0*Dpqv|I0rTgUSXE+3R z&rd>RX(diHDrP&E)bx`nLMSHb*Vom#Tp`?*n)k)Wikyw>@;Jdep4-wozK-XIF6gk| ztWgKcVQ>i-LLVF``g)Wb_T>D(BFQ~ zEYu6~p-8kM@nH!Pk*}O+=FLA29W)d!YswT#rexx(4B579nfNDp>OUX#EN}sgzl}AL zWKRgg#}d+2a9MGJg{O8>7KVNrDbO(x|qtd04~pr*Xn&y zDMNQ!6|rJMEk4yI3#iqtc({1PamX+{W4APaJj-ZKrH_FN5l<&dglBi$=n!NR7vP%M z2(EA&)+;<&YCW}9>85Tp;3Qk2s7~6NvUi`j44ptdhKff$Mx}^T@!(>Rz-9mNi}Hg1 znpH#Ngj7TGp*L1HslQ;5cv+N6|A+ZDtx{4ba131vq{g#sY`9oWHnjkH{AJM$>l4a; zaph9bStfec$?J2zy(wgQL7o;bEM2OE1^d|wQ?Rg(F%v6HG-X`f&%;v>QRF#68##^k z@b7k@FBt!t!~YC`{%U1-nu1TQb2mUulIbODXy(0<*NIz2D;V8WpLgT3#9O_JTqSp& zqcZ;VBkUta2vJ%5Krxg`t088JWDvdb9nYyD8Wt2cLA~GKjG2?60)X$83fz`}`x!SZ zD2HqdK@XMA8e;ulmYOrqdQC9ZF=#gm2LFT=Ydto(9BpGXdoTFqa0r}VTrJxzh-gSi;MElFUmTz zA+q=wPnHbXz5H78jpqRNZPTsIH|(W?K=akvf`ANdv#eNp{l}Zc7h2`bS`J-T4yaJ9 zwgCirZod6Y} zf%fmAC{QffN$Sh?O*Ck`K-6_1y+il6s4lc|vU2xKkr>wUF#cKUk-)jA7Aam+c1{Qu1d3-;wrbjrjUMjC3|)R{YCiPZDky$# zer9GV?__A7d5{~GYVYzA`x3fzPmeK9R7x_j6+ew#Hg zFYLQI#x0%G-;;$3yH6{XdtU8Of_F`O6Zf2>Eb@|sc4y&`hzJOIam2<(%3^l``x3qP zk}-_L?B0)LyB|XZM~pAqpu7t+3s$vn&IgBSg``nt3!9W&X%!sMp%z-ISSJ~7P=MjX zOnQoPYE%04VThD;$2iVb)1)d#Q&9cqDBkIU+@VfL)>@ecL`%>cm>3(I%5>iI_8tB8Ux|j)k!REvOn+?i%UsTGU^Ob53%?&pt}7;h z0Q{_K2Qw@mqho#Q9GP`b@~A=~|J+KcU|$bwUoI&z+?M(Lred`1_4?}-*Zmul6K9?2 zW*!Pm-uZAz&eQng`OTC8?$3-zS}^obyQrFy#Q4+@ftEs@>XHWC{Zm2Lp`6x@O2ILg zhECrOb%PkTZG3D9l8Y5fSBO$F&9R8mo`8p3EP#rWP1Zqw(=H|6v=023?=6|~H$gFc zDGf=Eks%zVZJNROfHrZXt4CVA#C@Grzl|LE&Xbrk-;DjH00=7~S^TwyqSDRT!#FNs z4}ZOXh=xB|>(eBnlqd$Aeb{1_y{>I&t)^*ozB&`2x}d%w^*vbG4xDsbeP#dk)JrGW z^~w6s*6E*%f7+Xd2;{^9I; zW+s-KXs%-)y)7$PeY%Tr!$7gJgDX3;>C0H3MmmoGlPy?|M{lz@*-z#zw~^ytZ8b$} z16O;@OpZTkS4r3fE!+!2)B4;LX9R@a!Y~E)N|Aa4DoP-=ZIGFQ8|4{dFuNZ0y z7A}z|dpjW0-u)l}QjT$6cRxBh{NqczWX#|~sgGJMi&!em#UvTP-}?sW`;Y&=Z@B#) zLann(i-v=jr?a%~9{5!Q6E^};SN=XfzpT2dIKQlcl8}(#64T`4L0N#TN1az(Z?p$H@eBhz=T7S9jIv-#X5{2 za@>GO6jiebPefjuPDHDSTH8Re)gBSbyoT%&noQ2S@QmtwFz6^JV70_G9XofQy%6&E zQbi3=Nu&L=PlI+y|N3dbv*LD$@!K-z1uN*_A@v&CPa=nJ&!WZl%FnS;sGgg(>2p{L zK7zbAbMd}Dd{M_I;!E|b)z@e4LF&zq-kfI}vJ0;AkMP1YUB5Ct|K?GFyl2$TypRB= zTuj}0Kl9_H7HQtqLZAzT?KQXxL6>shL(P#M8 zTMf6=lYSpNg9ake4knedF%-ETgZVYsfK#8D()S#%ce}I1w0&!v7BkGA6y*K#Q4i-5 zq5`bAkP(3_g`cUuHBON;qcOkZHL)2W%R0|d2`_GUn4BLf;<>N-r8-0!H&vmjbXsQp znxr@u_;LA8#&%{f72~P1_d;pVdKS%nporBJWyUJ+;;=0O6?6H8$dUW|PpbPU@%1Ih zGGZDH;NC>@zc#upi?K22FLx&crTN~V90ZwWZQO9n;uVP&XoOl6gMMV zH1H>a$dD=sr@&kq8YLT+$KKIh@_f!IAFhWR)2Hv~{BeWTz@O+Nn;k1P#TR>>iZSWb zyzU?3=$06kHhgk$Re_jy%#a|*)0|H{u%A18Fume#^8lw z1&xCqZbP4E-vbLA1Z*H_BR-1BOTcEn?MP!&Tqg~?yAcEY#9*;@k2fpH>FoMVKvd`8 zY>V}fF^`&l=sSZ2hSw33e)liVW16C?1D-=SgdqS7;!iVb!^MiP57Egpz5}5%NP#qp zkl8WM@&|F+;+1_#>t;Wl@hAoql?Yy`(}$0;*noGkCi8)^ce zVFC#{`WxHKM`h;1@5z5W*zhU#u+m?R+1v@_wj87gr9!^cvG>=Ac%*v(8ERvZfBcG4Bwtr|JUP8n>eu1k| z8~<&M2=Bryk;?PA&Zgpk^~zNnYVJ($%?WyQ6KsBl-%!sm)yl8-6K+FxW9RUf z=un**)CY85kZ%?VsXJE2�L!ICar2S(AT0m!2gadm}(y$<_sa2T&)z z8=l_y{P4aAd2$8qoMi?^q}6%%_C_3zTya&@x%oO54$1>&dzz5a7aO=Q-f&^hqz@47 zx)w0eM#tGM8cC24Pr5pL||ibPeBiio2)|C|ITk1j|%_Kv#{ zAKew~h78*cPcRD?AG79|yijtSXE|MD9-nBvai*u6IF&>JTCMU{eml60*9enPy_Mf* zB7sg97@Kpz^9X>>_NUj|8D{7El36zqqp82VPP*m{xYoTo#0n_mbgInxMU<*_2pDMue_Uc|Ox_j}QE+wp(!UEK_~#tEK^ari1>#&awq zm&29+o$y1mVt&W3pVzIBM!Wm$W>b-!j!i)O@;3_{e}>v@_}8-VQfxly1;T5q#H$aF ztLW;d8N;^W>a!BuwgX7LwJJAQfNS&39J-|)SGuAi?TCRMS2>r6?TW@de%Jg^U8(N8 zhy1TA?^zV9KZ|el$KjBrfos@QdeVh0ye1cXUEv{h=3OR|6okU8>tB~A5BIZyO^**& z`Q(T6r$q0_F_?}>HhNwJA77o&PkYZcz$&t_SXQG#AB$wJA%N_#gY^U~dWup4lNqN9 z2s=PyJ+=4T@reW;-kXOxsDV{VO2u`uNDSbxup+Cqh0LF`r{m+(wQJMsA^zcK-A~?j zSx=OyC>MIjVVmN=+kG%A-K+KF67dsj5xe2OJ}UoxW1M)Z#A2(fyQ=%&0H{#f2&8qhsB3VEOoB zVNrlErjW1~GHmEA*3~fPIp))_2pA zChReztaJuOWJl{@Ii%oxK1uvckg#ZhS!R*_>rvEfg+Q7_yV*oC+0&Uj*g#$cRzs+L@0*T(XOWT{nz_3f@h(-L`zoe8iIVmp7Sqym zaxUCe2$8@8Nm@AzK&kv5~d_F#>r=A0sz0TtAd%DCP_tyt0C?${?cF(->NhAwE#xTf|U`0ab zftr|Bcj9Z#1yWI{`hwETF> z#PL_~vvB56Gh{p_mpTlJ15((s&Pvm~StiiP^51+fFuYHUCRgZnICkVRYoWphBo-g; zU6Pz-7e!4@>KSWBDU9Jf&5IEkrP+GiAE0fhoS!*O8ng ze)iSMVeq73Ym2VIGC3+_CFJ!N6u?3&<$aix90t%O;CpjZ(RzN9lSg}blT^_vW|w8u zd^~EOO7k;_&-bHo#o!NG&NqYkEyA37$}DWdIagnnOuTsfPp}hH+Mx#yqsA}ix5-{^ z<@?s#aJ|w`l(Hd`2>E7mbN!sUm)rBJ_{@%bhuDa*YSzzPX7D3zHv$bm_A)A#=z6SD zJe7k2bF@R^ZOQhd?izFeXV!!);NmyMr+4yZte}rwioZF=fH(vMz;DkM0eh&8H1EGs im7s%^w+g>CQ2zPU`nKnPtADk++-EmIg8xSL=lMVXV@?kM literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/organ1.ogg b/Resources/Audio/Medical/Surgery/organ1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..37eaffc1a34ceb6bd5978d4fdadf3cf006889a82 GIT binary patch literal 18912 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/organ2.ogg b/Resources/Audio/Medical/Surgery/organ2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..43b22f8354cee8f7a6eea1df9eb312f57dee36b8 GIT binary patch literal 18946 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 F2>=m?oZkQd literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/retractor1.ogg b/Resources/Audio/Medical/Surgery/retractor1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..70625c961cf982d3bdb93e106b91fd4a410211d1 GIT binary patch literal 11537 zcmb_?cUTn7((f!w&QSpgOA;0V$*?F<5m@rVl9S{mXH*2q0+Mr*oHIxe44_1joTFqB zQ6veH_@`6ICmmNmleExr>570l1gh9F<#>JLT-OUE( zfHBv(WDiq<3Gxf_^NaBd!?;jZmYxFkwp?0Kf+P zxd@{3KP%Y{AZ%zkqup{47&Y-?7+!?tB7)%k&+8UWMfFAYP6Kcbd=h;e0JMsXB1;H0 z>Y^|YV+o}Ni>C~3JuJnUZiL(=Ie~wtlCk;A34B$va#U>^oAN_7KS{aF?a@CTO(D8x}K)lz?~ zW#}JfSKsB)q!JkxlGoB!MT5!HSl7#H(#vzw%U3@&#PFrB{>u=LZui?@R`9s{AyK7&Uxn;%BV3pr0AvIhI$aq)fZ9Ouj=G8Hx=T*Ft4@Nd zxX{RdPXU*B0T;sZ+&bCLA73c;{-s*{LAJEH_;-l^NCG>A<*vfghtl`@5v1vBIi=JY zqwm7CGdP<|Q!_3t=rBOH0@@PZo7S0=Hk9r@phTQr_^0-eG6S!&bOdapThAozqPq|F z!;GZkl}_t{WA%s9KbJI9gSGI)49uG=D<6|5;!7!Cd0m&z!Wlt@tkc6F`n{VnDkwkj556%`k%o1m*)VW(*$4oWTJVbKzC-4njFC& z1OM$guGHOe3?JgymFw75M|k>oh1K_jhpFT>g;lj^jE8AFN3U3Ei5icJSdF5s#=Wej z8?6kReDxdua+p7EvoPuT56`)95mrR>iefzWzda|1D|%TxnoTL5T|fT%!(^NA^wPAf zjnX{A|L`2!h~m_U;;@MIuxPIEWK4K^S#zF4Z`EeY|Cs;fISOv?_eDlZYvTCewucR90)W3jk3a{l+kn!CoVx=81kV$D5S)bxBT8`IWLhCO zM-ipPN@o6u(uaaXTIGo61(X)ymEa%%54?zShhk|UGSmQIPK+Xiha{o~;Gbhry#i|t zC?ujdQ)>W$&lub*fcrd%9A3zvH308s2=0?z%M2Ql=i%VWX}a5RekVw0;GCQCi|LBI2xz^#Y&a>l9ecWvQb3S1Fea+ z($_}ods*opqID;Hl|ibO>NE`+-H4w4>4;ADUGhL1>sn18qV=!%8BT^Q9r!NMUT~fq z_XMf;C#>!_c`k5a(lK^uk!ZDthax%c~qVL26Y= zSshPV8Bcj##Yq{@W@AZNOJ#3eO-5DuX5$Z{cAm`^m$Is=^15#q)RxN4F4xT#{>Me| zk45EQTS{A6oHkor`x+e?^2@%y<^K4-rnm0LX3NcbPZmwI=X|2^iY~YgM^o=C!^4m| z$6KwHC%qtpkza^GXNG2Q*bAp?U|ZMT4e9&h(Szr=1S8U2@qJ52% ztQN$K^{+ZDh(#MtM&*@#ZQ=g-78E2f*X7Lcil4!FRum*Wud5{Twdgq{7_^`5ay^k) zIq=M{CMM{P0kHwOzy?*XOfJg}EPrtbfXlK@twqk=3G*OFeT5Zh3*fT2t06lX5;c%^ zEQw>>T`=uvrJl?LN~A43aRh~zTd0Aw&rO^_+1D10nSX~BTtQ-Z6Gsf}O1s7kA}K7$ z1=kBK2b2g3>n{i(tM!}$QaNN{0ktxcSEmmIa{h>{Vrc=TmQra0$f~g5iZW85k=oEn zV1fZ0Q9x;^1n;8Oa^&qwXX}E2tUg=_zm&0-nh3H=3yMb~E0f|;eVGXttb(GEO7O;b zqzX7IB(gRHW#Aw%k%@8;0cQoWibp!|b{QC|G0R-+`OGS_Ha133SKboxO7`w)$mRTA&EW#a2NFAE*QA);L;V+1`W{`P+O3* z7Se)tDWtXlbxZ3`D#uM{F(AtY57t0(!$ZiCN*sk?cumLv#&ZrsiFyp+g#PR!X2j;i z0--PuZ9#5|U=<{1X#l9vN>309g`Ir{c9r#0GWeAt6N1VdAQY@CJ5mj90KhkJLfD} z!@&b;px5L@IcW*Fg)J`^;SU4V7%31+Z5|=8o_Pl!-kA!|K>~Q& z1riYJ3>QVFd-T5plYiF;{y&Q-1>-CV9q?)0MSBhZPgH)7^77Wg;jbV)_0R1;V)lPW z@Bgi4XkQ6J?w zaeyd+!$J6f9-U}_Omjz}xH$@wFSd>`10*lV8;_%K0%ZqEk-#skAG;7WC94Q8oG^IC z3%VQL1)8Cd{9SOc)RW zi%u?pzhaGRXi~w8_rr^qwq^l?ZMjQrU%VKgKwIQopoQfw5=7MnMp%MDGyG`_j{R2~ zxy1S(Xn}xQ|I;r~L+%n<__<&koDl>W*JX_ZtP%VP;4Z-!ObLc^i6G}cZHbhijLYyY z5p{t`P&F5XOQ>Gf2v{!Eb=jHa&)ADt5QHf7Vi#un!k*vD>L9%I9;#v6g9QAE0l;<2 zZWBJy1MAETPF4<%bt5csuQT5M=z6iGA7|(gaf??P!VVw}_SpOg@rw7X<>M!3B zNXQqG{(1d|0N~qeJPC}IH60O68bcOK9!C*RnLw2Y!WRG*A^v25KRZrXSeSKme)|fP z{jOzjLB}dK$0hlqz{mgds)Bu4|LgVK;1BuY_54E2-GCBaei{n$ixl6~-qF!Lc7q2l zBrGJr!_6xoEVwi^{e?$}Ux-&oNMz{~H;=fOkf8V~!{BFm6M;wytO}-m5{dbG$5}6| z8LQJDJj_S{FXvJMJHTXpy54vShk!fXW%^&ZZ&o>v$C?5J<~V8-M?iBPGCxjrqkEb z-SlPZt81;ld5s#2mbE5~acf`B;-4od3fG)IEg`dTb+gQ~(v?1~r|wH3KJ51$cRMH$ ziQVp)Dp5$+hmkp_gsY?+3l_WxP8X~AW?Q>X6fI(`~osDY`Vc<&-Fm@2*^249WvP zQFbv`JeSF#wUxCMk|wtPd%{Ny&htVqBoxRbSplhu>Mtz6&~~9*D$7hBf$~+)&p?lb zsL{98tV!`hzN+&i@L1lAzjo>Yv&hsru%u^W2R?~(Se&U6UM=A_Fu;67<|-K%Mu?MP zVE`{RD3||_-|E@N$wX4EjfW~HI$PR_th_VIp*r*-1VkK`Xpwy_O8okHV>WtI_;&q3}} z4p4TCsJ5rDQ_g14alWy|-LruJivlxx4T2?doeyty`bAfK^9Y5p>U_Hni?sbr154@> zzq;PUD`xAx$d&9n-NaCX3xH;D_YoH1>!Qr92v0E7NoU6ihK?s*XT-Qu%b33M{PyeD z`Jyp{gT=%1vCpG2gKZ|O2Yk-9+D}e|^%eOCE7iR0`e&j~C(>vl391(j8E3EZO$OVa z(^m5JOTHkx>ec1)8SY`D2i?D4iJuZjVkxf&xC;9C+*rpY{@N^!l=^NpknONc*qyH+Y1x7$#qiP=i-K$|X+1-x6$z^)t2IoNnNJ>yD6kMH2uYj>eC8!C`CKYn~xXP#DzVPb*<1_0wjw( z1EpEVp4d5%>3iN-&d9o%* z@dXU5GN0#X;rwnf$xy->k+!V6&bTTA{9LUeWUe1tG>4?4J@5Ns+?{^>fNE;Q`{0MR z)s0CfnY;c`=cmV8h+;aR%rF1QF*TcBV5Lo$S6ic=*C!ObUq6syk(%kkHF>gyE_oC^PWpPSDxbtc^w&KJBh$*9JH)UP$Be$~QDesV zSJN6tA5T1y;?kH@&EBd@60>L9QdPavWCYpYiO^(4+)tb>Xk^A2+92FD6e>+8+$Ul= zAUc1=CuHtJUPRzNu~1;CzNRwReRyQSOPdLKrs+tm`c7keS-90aAOgCrIkZtG?%l~b zlN3`*WW-4r;}jothbCK9V?d=hCt23x%xhQ%iC1KHQ_KAT_jL%=mbRaMpT47_T>P<( zIDpz&#r;XM+YXKW{!=gWsERvBoBb3=sR%sR+|R+L$R^i3U9BLXc5=8x=c;4|kB>ka2sWo29(===s=VodB<{Tag=H zn*rR@_vf4LJPj<*-m`WT6rE@mPtx-%&uCG5{&R(!KB(TxCfRgmXL?0_CxogGQhl7- z&!vUTZ#sF;fp*!H>#~%x!5;T<^yaqUN_MOEEA%C#otZD@R*1-ywx;mIpx2x(}_q_?X>TEC?>1E%medRVY-bYtCw=RlZ9kTRkSXj)} zMc6V%%F5n**aAEV&uMbbznwvsTWV$5hBRs<#e^DJVi=-2_IdI0fBqofSo_5(`T^sl z&QBN@X0pgL@?60^FfCoN>XCiAFXf};yT=Up$=0DB^F>*udgt#1?}ez!u#xT_A77c* zk57D+mMVUC>KS2Jhcxd}=evbYcF|X!I#`cTZ1Oi=4ApN$2-LO6I1oPnI4LE(N^F8H z^Sdn=J7S>RT+Yw^w`e_GR0P&3Zip5$6GAL`T=L6ad8MM>5H0bLI(Q~uw@bMu_QYsw ztiNfY&o4>T-S%OIr`y1QkJvEfPuR?0_;lmO$*iC@7y+4_jlJ!g7Hw2x+niczeQKin zYbq_ZQ4Ko6+I(&B17EL?z3&r#vtrYCg<2lBo=H-l_$4U=+{uw0Ic=+c!BY|?=qKKH zt8Go$H}-BkOfwy`2?~4QUjpSkztE+zV5=KUB)XtNdi9hR9dW+@ah&(Snj#;_MU~ zXj@M|^OC-GI4vk`_9|s(_sCsgLG)W>MxsC(tTD{tAn$OsUmNvZ6OC)3uP6ZH%OsC+DZCaPI4kbBoON!YwE{b+_Ff z5~EOF-TWFN5gakZKP&c~{n7Tmpe=y`%cCuOt23fTQHH!CsN5)JWv6HVTZyk<^C!Or zt-vZ}Qi}vK%aAj~GSatzw)1DRlJn{LVw;}xC5TThS-Zc>;%eiLg<}vwpV3H9=P9@F z-1)*{0iWIhn18+Gd!B2Lak{y zRm08gUn<+g52zqgZyB7Zk8BO)6x$xUM#|tGq~c35Wym<5(`M24`H?Ia$T~F7-s9=_ zad)i(#=ci6k{$}kw7KEMLauLPZ>MD>0m>L_U7Nb#Oig;tTlcE=R6cylt2n^Jo!jW8 z?V-&wJDE(s+n^^DP@-JD#)DQJXBDk}%=yEq)mItfn^HXOO_$Bl|11+Fo9|$gxZ^c^ zFxcl7xnq4Yu2^TbP*49rHiYb`*J7$*;;G@&qsX{h+(yb08)w%ITt0C?S9f05*U{D8 zmhIo1z0<{m=Oh`m;_|FnR1FUg?t;SH5SSe|WtBTH+j>fS_i^AVcu1M0W>jEczabl%?H z7{BFXcdIo$$(O;1(0J;n0oDA*z9@~SbSPt*4_q!dbP(t}t3t=zYjn+@eKIZ6Af61Z zRwaoOF2NlTE`5~cs8v0A<0<6RCxiRNo*jHQ^VFZsFa)|l=tbtfIS}W*oVntkxutKF z6lJ0imzx49!ssTEXFSHGK5iy~0G127*0ubSl{e>7ttU2%XL--&zne~!_77Hm*?$aG z5SegTxr*3x+{(_c2G3n&!pZE^^ZTC_hcr{-&OcDGHGGxx(d;=5>(OV)fy86aqyUG* z*Ck!*a0=d5Rko{Xc`vrgw+*l;3ixN&^gT;|+R?pd2f~QMtMn^Ccl=Q;v}+r%)13kxL)LpAuxH9#CII9{g_*D z1s4xnRCG?*Xh!hrarsgE(Cj;()83nhlnqn)%<)PO5{+3oSu^E8x zMf*M9(L@Kex{EiRF$|O%>guLw~HD;~#82ovTT4TDsdM)P2+xO6KX2J0WQ8sdH>}Q3Cbnf)Z zbz@=ly<3)D3Ug0yyT`qk z&C=h#NRKv_@}R~xs2DdI5wes|e20f#E7nb3q13ch$6LRb#Yq=jacv#oxd+M_u-y^C( zYm&;}uVz`Nu_>`hKQinnPW`B@SC}=0&_Q2Du2y183C%3LX`ChB&RKzJ4Bt{;4SE4J zwOpvMJjo;|z&kzbjmNVc^xhuMzOG?s0DYaHbH^#&#oR5DmuOinH*5ctKkufis&aVc zMCjzBj@xjo`k!6}^s(1Eoiu!=8lW0ex;N#HegU#D(f+Auf!u+2`Cnu*TmPWce-*q(D zU7kgdK?*i{1=vuOB&0h^0QYBq#8vkX4Vu|WzkKhPx819~?YR;##G`*mCZAlC{hI*SP()eS8`Wbx6f62St>RaEY(Kcq7}nK^#S%1w8_|sy~l-2L7r3S-+%((+Pkjchif9MmNV$V z@!gp%ANW;Vxw}gM$r_YLWSwjq5~sl;*g@QDkA2gd;j@-iMeM%$Y?gTC!NU=Q1^d@) z1?D!+XBkz$SA)(<=N?JiEN1}!F3D2tyPsBvTet8|Dq*18))6aJ2aWt}5mE@%;FY@e zOKAPacT*}a)3x8V5BX{G`Q9ipoZ6(!GOn_nDhN2UJ@JSZ`mSQ4O|R-s}cs^!(E1Tk)7 z`r1dy&uNn1#NKQWXvya+#uR;>qfLq7GXVdkkrMBtPpKiq=^r7ClWx6DZz`c7!sx3$ zVS($9MUJa3`D^*t4TS|O-v+hm^EYd@Wu#L5NiOvE?TS@*Ca6iS77yGuOg1f-_)tCH zvsXgSOrZV5%N%7N&GkY&;{`{cS@34~M%vM^oqy?3d?$y;fjp%KJe?ztkx}+YUxy0A zvO|p6K5Gc`Uh{rA>Q~jf8(k$ASmiXofafYy`iX_4-sk>fLYs}kcU4IGnO}Q(!nIa4 zJgI6eny9;*X2sL#;VYcq$%h=?M$&C(!2C;i-Zu`cKcQf@f=Y??5yXWGEKwo%BvXrP zumB5srjL8C<4-W;fJ}l@r0Z{*(K6$W%x)v*>cecC>!aLo<_0U~o7#C*1!zqO@Zh<~ ztt2NBMm!TeGXvB(1*j8|MkT@AL#Q!c29cEXA4yqDh;=Y$yHiO9&MQjf3Cu?KMl~iq*YVs4UKM zKH)~FDIU7J?a%R_rT+>kf-%WygP(nypR^WBw_!OLBPyAE^P$=qB%b1NCZc^7bh!C( zXLTir?~w|=Vd`S<*ej7CYAPDio`C;xwJ;e&W7_WrUPouct_Z-=R?~v5LE(U>E)R@~%eS+yru%%ly$}*D^uFdB zBDDU~#$5K-W*yda!>2y)S`WWHU3D}2)Kz|c*qv#Md~I{`{*YoQ+0#aItEV{cN4}Si z(35s+r1cBh2bEY65(ZxR*sRnS!e>ZkKZAi{kYj9plf|$*Dr~dsh0EU0ns5!=6J|Y( zrKEvRqJ6B!6@6*Jr$oHPOmyvmq_m^R6Uu9z{QN&(fTvp%t=GIBl9A2KiuPFOAkxwp#*F^Tr!Gqc1791twP4Og2;`ALV!qe~Tt z!(F5~0RP{6^Tn%2-vY?4O21v3UVW0TvOts}eJ)&4H7fFh3#Illsg#(}3`PWC`F|A; zFW(rgzb{YunB#g~><`&p#FEO(^8KvlOpfV@2LmmxA!C~CW}47^mI}8yrz>sY@}h(1 zr;|VQ&+hS!)yL=cnomwTZ$wpS_pk^3RJBiN+8MJZBl@6SX$sb(#6Fijv(JbI=F2>l&nc5w-`>E%q0V@kC`D zR{B^mb1T36xu?uqs`wL2sy6O%H~oD%4O{Ow$%MZ%vhL@V4VCbB7}}V3Tz99T3u?_! z?|~z=eT4uu2w-!36L>4KYNxMMRw#pal4zG*p21LqWto%nv*5NxVZmlGHemZ?+9t&F z(`@Z|^;(8I{N%>?aqrT}k+bx3^-LQrs^>!CYm0ePrJ`uAIjcqmZ@ypiH`2h+Z)v+) zyVwWzs{FA(DaY6A%?*r%E^OW2r4sc<(W8m-9XB0$@*=`M}c6(9YiT6}D_Z8*KrAJo?qI7cMZRc3v z7aDBO`U_oF;goc)TgDix6s=h9QzrtP?QyxL+{?T#qaTi^37%QELYiUu0D|^1lJI`zE75B#u-Yj z7wAdf{g{m+p6vqyFqodjh^ZcS)TKDz>}huti8()7Sn(Cnx%)Zn&D)uL;#%z6n6y`B zKvw_iF(%ILgN#%W1B-ZQ2`t_(lb|GXVno|6Bzy7c%U>I~1kw=grn@=4fzE`3Po+is zr>-*5#=4Fcb4OX#ioN?HoCh?;stYgY8*rz5aN!Y4lF{Ow*EWA4%zkI^LVtchfrCpBl&gcGx>*Q z9O`Uy78ZcM`>)*gk}d6GDg$|-b(T!U#0~h&tEa~1a#qWhF@8DAW*?X`hNh1L^tLD literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/retractor2.ogg b/Resources/Audio/Medical/Surgery/retractor2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..94548ec2504ae8da2ab7c9bc7348f2284491a6ef GIT binary patch literal 9915 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Medical/Surgery/scalpel2.ogg b/Resources/Audio/Medical/Surgery/scalpel2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7335f3d9cefa069550ecbac001fea9e997b21f8e GIT binary patch literal 13098 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 +# Organ Manipulation +These surgeries allow you to remove or replace organs from a patient for healthy ones. Which can help treat conditions on their bodies. + +## Anatomy +Normally a body has the following organs: + + + + + + + + + + + + + +Certain species might have more or less organs, such as Diona having a combined organ that serves multiple functions, but this is the rough outline of what you'll see. +To remove an organ, you'll need to apply the respective Organ Removal surgery on it, which will then remove it without harming the patient. + +However if you want to transplant an organ, you'll need to apply the respective Organ Transplant surgery where it originally was. + +## What does each organ transplant do? + +- Transplanting a [color=#a4885c]brain[/color] will allow the patient to take over another body. An excellent alternative to cloning if you can afford to spare another body. +- Transplanting a [color=#a4885c]liver[/color] will cure severe poisoning from a patient's body. +- Transplanting [color=#a4885c]lungs[/color] will help cure patients from severe asphyxiation. +- Transplanting a [color=#a4885c]heart[/color] will cure a patient's body of rot and decay. +- Transplanting [color=#a4885c]eyes[/color] will allow the patient to see again, and heal any eye damage. + +## Where do I get more organs? + +Normally when your patients come in needing new organs, they'll need to get a new one, as their old ones will be either missing, or damaged beyond repair. +For this you can use the Medical Biofabricator with some Biomass. Which can manufacture Biosynthetic organs for all species. + + + + + + + +By default, every Chief Medical Officer has access to a Medical Biofabricator board in their locker. + +## Why didn't the organ transplant +## do anything? + +Your patient's body rejected the organ as it is in a bad shape, try using a fresh organ from a donor, or getting a new one from the Medical Biofabricator. + + diff --git a/Resources/ServerInfo/Guidebook/Medical/PartManipulation.xml b/Resources/ServerInfo/Guidebook/Medical/PartManipulation.xml new file mode 100644 index 00000000000..2de5facee63 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Medical/PartManipulation.xml @@ -0,0 +1,51 @@ + +# Part Manipulation +This is how you will turn felinids into humans, or vice versa if you're feeling particularly cruel. + +## Anatomy +Normally a body has 10 main parts. Those being: + + + + + + + + + + + + + + + + + + +Certain species might have more or less parts, such as tails, wings, or extra limbs, but this is the rough outline of what you'll see. +To detach a limb, you'll need to apply the Remove Part surgery on it, which will then remove it without harming the patient. + +However if you want to reattach the limb, you'll need to apply the Attach Part surgery where you want it attached. +Hands are attached to the arms, feet are attached to the legs. And everything else is attached to the torso. + + +## Where do I get more parts? + +Normally when your patients come in needing new limbs, they'll need to get a new one, as their old ones will be either missing, or damaged beyond repair. +For this you can use the Medical Biofabricator with some Biomass. Which can manufacture Biosynthetic limbs for all species. + + + + + + + +By default, every Chief Medical Officer has access to a Medical Biofabricator board in their locker. + +## I reattached my patient's limb, but +## it's not working? + +Your patient has taken enough damage to the point that their limb's nerves were badly damaged, and they need to be healed properly before it can work again. +For this you can try the Tend Wounds surgeries, or letting them use topicals on their wounds. + + diff --git a/Resources/ServerInfo/Guidebook/Medical/Surgery.xml b/Resources/ServerInfo/Guidebook/Medical/Surgery.xml new file mode 100644 index 00000000000..b37005e0038 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Medical/Surgery.xml @@ -0,0 +1,40 @@ + +# Surgery +Your usual weekly activity. By performing surgical operations on your patients, you can heal wounds, remove or add body parts, organs, and more. + +## The Basics +To start surgery your patient needs to be laying down, and ideally sedated. + +If they are not sedated, they will be in a lot of pain, which decreases their mood, and will make surgical wounds worse. + + + + + + +You also need to wear protective gear such as a mask and gloves to prevent harming the patient due to contamination. + + + + + + +## Getting Started + +To engage in surgery, you'll need a set of surgical tools. + + + + + + + + + + + + + +Once you've got tools in hand, interact with your patient to begin surgery. You'll be able to choose which part you want to operate on. + + diff --git a/Resources/ServerInfo/Guidebook/Medical/UtilitySurgeries.xml b/Resources/ServerInfo/Guidebook/Medical/UtilitySurgeries.xml new file mode 100644 index 00000000000..0a6841e1f34 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Medical/UtilitySurgeries.xml @@ -0,0 +1,24 @@ + +# Utility Surgeries + +## Tend Wounds + +Tend Wounds is a surgery that allows you to heal brute or burn damage from a patient without the need for topicals. +To begin you need to open an incision on the patient's body, and then apply a Hemostat to it until the part is fully healed. +At which point then you can close the incision with a Cautery. + + + + + + + +This surgery performs best the more damaged your patient is, especially if they are still alive. And allows you to bring otherwise unrecoverable +patients, such as the dumb Technical Assistant that just walked into the burn chamber. + +## Cavity Implant + +This surgery allows you to implant any Tiny or Small item into a patient's torso. To begin you need to open an incision, and then open their ribcage. +Your patient cannot access the implanted item normally, though there may be uses for this, such as hiding the Nuclear Authentication Disk. + + diff --git a/Resources/Textures/Interface/Ashen/target_doll.png b/Resources/Textures/Interface/Ashen/target_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eb2f52717b08c7124e99ddf4e2196a958b9362 GIT binary patch literal 422 zcmV;X0a^ZuP)B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Clockwork/target_doll.png b/Resources/Textures/Interface/Clockwork/target_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..8426d42299a09f42051f2e351fdc74b8f3b60c27 GIT binary patch literal 1219 zcmV;!1U&nRP)Z zPe>zI9LGPVGj?oJn=v?UD27c4%eEc#P+>(BHuchz*B*1&s|RrpUb?5<+hSRYUJ5-3 zg|fYMPi3J*h!h12RYLI~MwBw$Y0bFl32U(ZyI6w#^EX7zdS;E z)#yxq_uNQ}4@?`h#La9TmNh+*GAy%+mH-LxHaBhfPh<9i=*`1Ov+#vq#?y+0Nl+Nzq#)T ze)?p+q9vt(VDq>YA4y7jadylbTUpxF&Er;Jt$EyvFMc_$`(>z_%=~9bV`14yTV@l} z#ytXY=C?8m0FNH7RRA6@PU?>yu2oX;cN~Bt=PaJjDuK-binC*^EN$w$)rPmW?wkQo zw_3=jZ@XAjH5n}dF;8O~{ycD9^zq`P{&;axfBIy-lFurRs>w8adjgxUENup!#o00P zSw(O5_QX|9reBo+=vO6FP4<52;a-Lmu*@dV_5lbwNfZNh=L{_=aj>;VW;91(Y5>4{ z9&GIeEcP={w_0(*OnSIC5atpQ5ZZedBqda2$2@LTO68hfXwSX;ahtoh6C7;qQ7YFk zk6V>|R&fBD$2}gK5baN03aEWC$A9MHzo4t`oKd%06{zWjsR8cZc4;e>YwT7V6~H@h z863eRfRGc;F1~ z%>i^pLl~DbplWj9U05Cty-a(HT)AjkxAZI)1C8Am)p+V`xc9 z->o*{etA*sUdVv(WN_o%rEf3N`h%@KcJ^&bm>Qr|uHB2=IfQ&x(fxViGC#O71L5QY(NR&D8Xz;83)F`H#egV2qU!k(6%D0w zje?jf*Dht?+)OBgLa;(YcPbX>S0%(Z{o5@Z3o&*P1Hb?31g~U6O6Oec*U{F)%`x!tr*T-X zqiQndZ*)2%fVJvLdj3Juh-%ON_^Szxpy1p`eUW1y4tBFBWPbIn+kJI)M$;21Dlisnyww+$jRXH!SXObo-%vG~Kxbr`P3C6Yo=w%{ zfHSI^d{3lUKZ@i129SZywXB^VGM3rg2rDe)il=Eqk7&B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Minimalist/target_doll.png b/Resources/Textures/Interface/Minimalist/target_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eb2f52717b08c7124e99ddf4e2196a958b9362 GIT binary patch literal 422 zcmV;X0a^ZuP)B!WNgi#Ry4AL+$E_3_uFqG4dg>tn??69QH5lvm-Ll}lhpd9N#+YW% zasLXji1&+wmlEqi2;ZTeheu^_Y$rnaVE}n~a3r{2Cn*r|%S-3nOz1*N2_u>aRX`%5 z1hn{*z%>*?uj4?dHCEw-Q1+>9Q)euM(t%tZl+h3~0i}H8T=sKDX$U?EdG?W(P0}VjAg!8)cZ@$o{WHe@4;JDYw)l`f Q3jhEB07*qoM6N<$g4h?VQ2+n{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Plasmafire/target_doll.png b/Resources/Textures/Interface/Plasmafire/target_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..57262d67028b03c02f37300c70b7c86d9dc066ae GIT binary patch literal 462 zcmV;<0WtoGP);043`B7PLs~nf6~#%~{Qq}W8ry{Zp#$fDv2@X5Rh2tbRk_oloEhx< zCj)n`O^pcvpZrpvT{39f%iFs*A%p-?&o23Y=|zUF zTR$Om1W4e8HKF(43_)ZNVGw<lAhm=O>#2=`?`MobCN^uYi$4=o6m1arbb!T_HUa{{cA`~|pL5lBu3 zh+72xw;I^3`*BTBr$d6CrD+Tsbzn1t_995GGd*K+xEJ5#m1x^(%&E zD~4ygLwLH`=&^~8ZJm!^7R!VaSgOhJj^huiJjU_=1B90xZ-OR$IRF3v07*qoM6N<$ Eg5+YkBme*a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Retro/target_doll.png b/Resources/Textures/Interface/Retro/target_doll.png new file mode 100644 index 0000000000000000000000000000000000000000..a147539c3ae627b06ea0fcfe67a9228dd21ae5cd GIT binary patch literal 383 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/eyes_hover.png b/Resources/Textures/Interface/Targeting/Doll/eyes_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..72a30d73b8426fed3a93dfa2b5fb3609c02b952d GIT binary patch literal 6856 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 q9~u)6+vB#bTBxqBu8|mMpA3Un$baVF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/groin.png b/Resources/Textures/Interface/Targeting/Doll/groin.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1a3debdaaffb23acce3d308e55eef9bae1bfc4 GIT binary patch literal 5485 zcmeHLc~lcu7Y|fXS)>)INJV4ZaG7K#nIw~GB4|JoFo+OWY|CV30)u2>5==lUxWEy& zinIb&>)KXrK@^dytw;r1v2|BI)E;TA{itQJmQBT;?)J? zZ;2jfO|J{DNqjSL;(+ktqwJ}Z?;JmT^-}J_Kc*uW&Wud=d&BVvZ4wEqh%M?+zZI8%F9D%zIa0SNmtk0{m<2aE2l5M<5Lzh z&aGHo=qBD`Ejkeswz}{@Rkn*Ie!=u%w`&4C)vR_)QXE!QSt@8;&^g=#DsO9GQZ4q8 z{pO7K+g#DdGVpaRhb*V#W_YW{RI|0k8?%Yp30>0X`*&3o>K-`jm6zkX8ON4a+} zo^OuAeQ!m2^+B0YC!bk#|>k3CD+xs9XFZctp&qMszrj;Y;Wq&gEC zF>&q>(MjVs=k4hi1l5xWno0w-Lh-f>PsuxQ?*|1McdMA3TJ8J zWlgQ69~6;~T5p!+8^2rHWVp9+`6KdO;#62b(=LzLpKJ2pymRR6fwZ!mBFVUK5FUAIw%Z?p+tN za~)S);N`C476^3PTI2FN$NT^I`|8+3U0<%x$Y11cy*0LDa`~()GrBz6LK~-Mn zQ7WUy{{UTe^skUPp|O!ZA#0rps-5q3l9Qs9GjQ3g5o2HVFia^&Ci_oH zUWM)1>wm{%c)sts*sWLD_rxt{-tzmJnLM%h@`zB+h}C0UUJ>pO-0A5-To*^r9Q(8U z?)RgTy9Tjmew?&Cmvr&nyKzKN=cumcqQdPTuz9Ytcl=g;B(&Nz~GkPGvor0HOwVH8(z-F`YZ6dyjjTay?nM?o+1wtVNG$2c= z(Ms4Mqh*W(q8lTGwva4iwlXFo*MUjsOet0cj|b+tPy92OHJYdJMoSM1fDeJ4Fbfbq zEHD@Zy)7)(&?Nw*$Du#9uxP=)E{LWrrWBT>LzmD->zLjU6#3NNoWdqK!=Xq4okSae zss*fy^jR`Yt%-VS;h-R%F_@iJfb2e+R!0AftUkUuW}M;lb_AF|#qFd0BzC7V(9&q| z5EGf=a8Dhg;5pXEDHF+1xN}H~#273V=^;Iekr1j!5s1KO7?PlR9YKLaVN$vml-g*q z5=N4CKml+*18^ueYbwW`jKEuQs2#`+3K*ZAmvoYQ|;UFBJ z7Nu73gnam!Br1up>VX010mev~Y?fzJTE;-fSP2K8h*X3i7y{}Og+*di@=R$i&00V$ zI#3aqFA_Ru9Erg}IDlHhQKj?z`^W zB*xiHT&}Y%aDwa(!9pydDW{(Rt9yz}AdK-e*gtv-_KBSNlVZ@pLPSOgVF;Fy1cXvj zkU>m{L9m3Dh!L@jBuRZ=bc;!EwGk{mEgtX)xB><0x&hlzEFUXQ>KC=&^U(g+3-q)q}MI#h(}B|;%ei~G9!7sHb{!UIJi zME{NO5R8(@D4Ku}k_7!HlF|?+5y22C6AE=wL`Q)r|JLxNS{TNKQd}(kH^QS4874yX zplT2q1)&l>4e4|g4MwmYBS=gN13&t7#b39MgiQ=X6iCJ5I!Z@Y6%bKez&bezC}N@%w_V7j!)r1J9-WqPkwt^;`@*m-371 z`rGJofA*wL8^Pam8+eYd`)g=dpgf)dMuW_%1r`p+!^d&CaJFpq z1Hu7TwI*~xgU2AB39qZmJU$1aaCOKu?ZDcUvj<-Z4j#(6*s)DDUK-s$aN6Vd?rL;^}cK{s&?y(xCtV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/groin_hover.png b/Resources/Textures/Interface/Targeting/Doll/groin_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..313b6a1124c38adbcc7948afb59fd7ce4525b431 GIT binary patch literal 6452 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/head.png b/Resources/Textures/Interface/Targeting/Doll/head.png new file mode 100644 index 0000000000000000000000000000000000000000..9c645d2353c88f96bbf8e92fed127ce532d950d4 GIT binary patch literal 5663 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/leftfoot.png b/Resources/Textures/Interface/Targeting/Doll/leftfoot.png new file mode 100644 index 0000000000000000000000000000000000000000..07da8e67b7544af6097d5fd978fd36a563621bb2 GIT binary patch literal 5462 zcmeHLdr%YC8V}VA%0uvhRjZN)z2alZZgw}>T@!gEJR$}WBdC3`*=!&{9wdPTM2jE{ zYVj(*mGLoh>!TI5ScKw>tAL>OQ58pQN3iAA2Zh_KB35wjNrH&e&fIav_AfKD$=P$h z?{~iMcYfbF*Ic*!GWvEbJgT!V(#zYn`Cd&c3s)0w4QXo;n*T%*aL z(WbIoOQwT41Xbh$3+>CKl{tZ#_AB-SmE zjy*hM(r)j_?;c;ejrQh;-kjZ-{BiPBx7lS?rZcDiQGN9KckAMpZ2oFV*2cZkF1Lb! zx@SK;8Ju$)zo`+4xK;FKkkumAF3 z#Ki|4PkLs0O^lNISEL3N9Y2*Q?J5WjxUhNc_@uDzVZnDAsYPnK|`CsdqcW+}8^Che9;#kGI>7bLv&ywaI?mMGlrWeWyEV8-w*NAHA$*05;@~UR3_3ey$l7V% zgBuo=<`kJL>qhPQXJez!lyhlYm#>&Te9-o3UWZL_?SALiNUkZdFOuiYzj5GTWJ6fg z)VMpbsej+Je!nkj{-WtaadlRj`N{o*Cf^UYEspy7{?|=SE#)<)GwrVVP0_R3F6{lh zyd>kdMVFe6EY0d@jyl$HqDyEyce)p8JlwixO~#e{gO;|aL#CT;@h6(k#%(Xw?4Zsc zy;pv*tF+?C^Vm}%MMC`J($FhAu5s}tTXt1OV_RIt?485aFXz0sE$?RQ2Gp%8A>&%* zgAKz=UCTp4JO@7v`*Qun_7S&bdEfh`MQ!?|^4HGdsO25oe_GbowX(Tz=kAk*KkS8z zvxY?bdD<95dEC|lW!mwH)pP5&w^*O~NrMWOdG>zdIaL2y_k$<=rf87d=|GnwagoI$`%w-^J;0)g$k1 z*rcg}YjRU+YIfEh$Xi`rHmod{+db$`drRqE-sEMQM=d^UGg`enmv)~2!I~4pN3XYU z8La$PP<&+HmWHxbA04_Y^>$4vio9^`$NjaKxc-JDJNuN!!x^351Vx-GM#r{{T>0}B z{lc^Fokh2Ax|q3>IJc@eG&@>MU;f)lzpB9Mp1P`*!>7@_aEhEee$r?U-Hc<%^l{VD zRuHB8#7Mw0 zt6y5rP*cNC)0VGeTzvPf9Us)~*VA!u>&_jf_3zBv^{}=gs4l1Mqh0gLf9Ygy=}S1z z6I*7dJe{7N(6#>2;wX;^E_t_3*QQ6Uf0A>4LPEEEvuDG)9xOk5qAh5Tq46E*vEa^a zw~qarjP}dH9w$F_C5XXw9ve<{{Mymcb+Y$^tL?YF3-V2ewki${=Wu*RYQbK#P%(#M z47xyCZBVg+Hk}ddRUD2u$Y!LO6xPC3v58u}gx6VpipSNeCA@fC0V|ABHc1~|u@;(Z)1~Uolug2O;8LJ%@8R6X9qFhUKAXzw zfT0m^ETMuh91}vMh$JAEB~Tn@1+-8t8~`!bqy?&^QwK(6 zhf)J5R77ARl}ZDkFad-S2n!J!Ap&V|4G2Yqt5g{3fKoG5xWS~O!E$PKbRx?)>JuFU zcEYKU7`cQe2!vnu#H7*|4R8Q8pw+7lR`bgtrB=tzx6pPz5fO?Yga9K@QhTeJyHWvwqaS2LNlh$mF_@GFL#l*l4~lE|>>pNuf>P5K zT1Hz~0168*3PC8CR0>cEMkoO~9R`g7_6D_9lllLw?d8K2I~P4tYXl0b9fAk6VMZfkB#GpYDQp4h4^;%?6FdN}Je_M8G593JBD}6*r)7siwXfjWvn2uLGbA zLJ$bXln6<|0tyxK_NevANa19G#v!11Q+a&(XDY)FXle`wcZ|QnV*K0BGTE=hH^_H&JV&Jum->U14 z(dGW~NuSk&zvou)98c8EdkWqGxT>NeWRAB1oTt+2PeE&_F>;Za!|@ntzg#%mO2&Xr zH;Y^m=62U(=qQ(WPxSovIp`wfvJmBv8;ZsduN>HiQ&W}8DY^dM;{Obid*$SGbw9eY vG+J0(kh|txYm7CUfF{RJx+JcD)BMa#-U6LS9tVyM%1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/leftfoot_hover.png b/Resources/Textures/Interface/Targeting/Doll/leftfoot_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9f9e38df46d02146b3875717a9ff840faee264 GIT binary patch literal 5476 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/lefthand_hover.png b/Resources/Textures/Interface/Targeting/Doll/lefthand_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff52eae555b870e68bb83de31a192057d27fdf5 GIT binary patch literal 6174 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/leftleg.png b/Resources/Textures/Interface/Targeting/Doll/leftleg.png new file mode 100644 index 0000000000000000000000000000000000000000..99dc24ce62ece522e0099552bfac0170da399f1d GIT binary patch literal 5488 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 T)k~kCmKb+uAE(kKVJZIsYnLPV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/mouth.png b/Resources/Textures/Interface/Targeting/Doll/mouth.png new file mode 100644 index 0000000000000000000000000000000000000000..202f411874e1bfebf30b7edf2642593cc4424c14 GIT binary patch literal 5219 zcmeHKX;c(f7H-f8(ikLhB|4N1MiHyKs;hdb3at?u*=$4v6^&qR4K4Iycd{!IA15~_fk4nFC{P^^etUq&-mw?>-pFg+K)Ypb#56vfN`_2kqgI!|L42x- zgSZr(Rv<|E<>8u1KinGW?EgBdVzgb5W9IEyNaX%SQLny2LQ5NNZ;g3s+~TZWBk^@8 zSp2wjen6YU5_9XyDxcg99>Jq_m?}=(ifo+iwY@spKWXB{*1oBwv+^2px88j?zxMtx zQ(}LQm!bxJsd7`y>H|++`o~T5#J(G>uJh%Dy<;SC!m9Wvbl~AVA<7Fo>*`{3kBV`e zuCX^}*VI+6JXVA_J@)c+-R&4-cP1@-W!AvO^5C^AOh3Y-j(d#r{paoblbl3uSXIll z`)jYM=H@5<4Jx@3Tr#s^c;&Opr3W3ZJdK#rSbAQ5jO%xAJ`7>TOwP}+zB;t3kTiEaj$uF z)#Y?vz=F6tKV19PyS&0DXF2kD@y{pwsN)`NYYcugGv;i=D5wBC`#7VYXX}riAAcXC zSTOq1CnM_n?YZT9?XVzx@s9pw^+P=EWuJUM;d0(`$4p*O=s46N!=*12+2pt?C$QIN zcL~`Tbb8S)XG{9f+`)kbEV|b#+|GM=#jAY{*Zm^>a|*SxM0ooChSjpW38~Rp)#c&H z!33?LqHx)WsTU1R(Io@K3qvM{h^LgS4)?yZE3ByP$jSU`i(H5+`8Uq|W$4$dx5^VX zuUU8K*IlXJyOWx(%$eWv>+U~Gj&0&;?~V7Xu+2%&qb`tptCud$Ub@03p>5>WF$MZv zb&W0sm$#o@R>dE1kWD*p=)JBcGgK=$JL;3x}G}ny{ud-(BZ7E;=di7U%_r4Bn`r>eM)$@`?wW6erC)ZYuRL<-B=%?ra zFRAm6o6oSOG35hKZEkhX|K?J_J&zXG=ktb@9aFtdf9>3wp=1j}2dI}RgZnR=m4BfB^hBh%#bq7t=_OvV zFuts8b4B5zW&4XhE?Nk+^|<+5Y#SJBlW{>~v89(JzM!jbvTLh2V;_yo`UK8-ir=e+1` zu51{!Ae*u4U$An>*f#eUO}p1_-ek_PpS0z1#i6mM(~D+qnY905GgE8WAb1s99~}S8 zJ8@QPPRsNV;ZVCpwI?bPLvo&`pB*}@EhyKyGW!L-B<)WrW49WAviCduW%Ih)!*_^K z_jLTp>}S1{%ATi%tB*DPyQ!)5_{$krAJn-lU1Hv|Rq4Pxyf@wBbd4I z48e-Vj&bryApwA%<0&XbpJ1?%DJqc-mjrEVw?qWlO!#<}XqqMr@-vz_2p8jG1oltS zB}qkNoFE@Ft0lwL<2xY0n@SYN^CnUvNls1{Cu3rxIaY!a1R+7B5~&mh7O*ANz*8x( z!Qx?sXva`<7RIbI@j9acvSL!SF_Bk^L|`0x6QACs(R9KaEFCNWJ|roWNrH+IiC!=1 z>S5vilK@CZK)>r@i2(b$B%HGt6U_|gpTrq>kFF3b)9G(YG$+{7VHpXR!0Cah1x&j8Y05#^sa@rnMLiD`=WkDi8&ZDv2&oK?Vy?85qtA z1;E8RfTQ40g_4#Mu#&>$Fs@*5m{y`RjA0DM$`QE?WAQE!6U{oHN-CjiR8}Y!KuKu? zXBhYH6~l$4n^qn++?1z@`)-i6jg$UKye&H+oQH2PT|ZJphYVx ziik0(&D~lU5~KsDrL0N?0JeUR4e4j*DBfs}Fd7q7A}a)B_3RwhfCa@;Jf)_14uB$3 zoJ3I)AtI!hwINe_BN&Nvu{W|hZR&rswk{vYr@iQbIt!RT)z;O%rY3W9+TYq=6Lhx4 z1VOfCK~hY63KlAfV{LH)to9)$jxxk@VE^b4?3;ew?}$N0FbYH|MPM0A%V1neps-R4 z3aVuZgkTUQ#?ef7bc<2TCsSr_TrA)ba0LWv;|dztQ7W(Q_Q`RawGMzX7)4Kj%i^WQ^;Y8pp`H|-~=XB-~>grtEQ8@KbW2(0zpVjPRfY? zM|w(x##jv3!UTpjPcy z#K1cle^A%|j4r3QS7FWo{=X)Ji|$S>J{eq+d(j~QYTI>L@XYV%e9-D`3XHM{1j0|P zkDXxMhC!gyfe+I7JKPiY?k6Pe&yBYOUG72ZaS@I+AC;lt9`4u^x_}%~tnnHW-B&*0 b`pNt`E{SyxIoSrb#0nndAF3|$owe{kU37F` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/mouth_hover.png b/Resources/Textures/Interface/Targeting/Doll/mouth_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a5014f42ca3db0a388ddf896159d75a6c4cd5106 GIT binary patch literal 5208 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 Sge(HMy!hxOMeSrw(SHDU=oxna literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/rightarm_hover.png b/Resources/Textures/Interface/Targeting/Doll/rightarm_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..7121c80830df2fa38f689ab9050edf0f918c64a1 GIT binary patch literal 6592 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/righthand.png b/Resources/Textures/Interface/Targeting/Doll/righthand.png new file mode 100644 index 0000000000000000000000000000000000000000..e71f8de80ed087cb7adea8ca430681c53120a505 GIT binary patch literal 5467 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/righthand_hover.png b/Resources/Textures/Interface/Targeting/Doll/righthand_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..d51910da1735eae1f8cd1ac6621aaba45d280ada GIT binary patch literal 6207 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 E0F#f?zyJUM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/rightleg_hover.png b/Resources/Textures/Interface/Targeting/Doll/rightleg_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..b0936de0a0988200facc73e57f9acb8fee7e2891 GIT binary patch literal 5908 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/torso.png b/Resources/Textures/Interface/Targeting/Doll/torso.png new file mode 100644 index 0000000000000000000000000000000000000000..44297c96c3271250a96874abef4cacc3e397c34c GIT binary patch literal 5284 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Doll/torso_hover.png b/Resources/Textures/Interface/Targeting/Doll/torso_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..70f5e5969c0e4f785950a19a2f1c592bae45d605 GIT binary patch literal 5672 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 b(-6`!tD(BsYYi)bH_6-GSCl(5Y~{ZJA-QRJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_0.png b/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2e46e3a8cf1db046c2c06ac090df412c212feb73 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z$Oe?FXU)|rTBV%O-?XRoK2VCaB*-tA;Xe?_Tu=ja)Jcw;s&1sCywwi w`Sk1%bzsP2)e&e2X5=ssEMZp!%Ed4+)UYtPAAVBv4XBO5)78&qol`;+0ARK(JOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_2.png b/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6e3add67f7a291a76514fd82b795cf10e81070 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#04>|n9Q(u8AE9bL*Z9>51Ixyt1>IgIhGjbRRmar=VFVdQ&MBb@04ZiGk^lez literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_3.png b/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7966fc14190edf38b2d63e198f3c2944052822 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#5pjmC}h}M$586WFrj3}JD?P6NswPK!+#)Ixyt1>IgIhGjbRRmar=VFVdQ&MBb@07$_r{Qv*} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_4.png b/Resources/Textures/Interface/Targeting/Status/groin.rsi/groin_4.png new file mode 100644 index 0000000000000000000000000000000000000000..cc36cf23ca46540663073a1f24171aa7d3b36643 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#3?bXuwmHi#89fqkYf4b3{Z--B*-tA;Xe?_Tu=j%1Yy=`evXSj*=k1V21w?aP?G(5m3y;)5S5wqBl7~ zf^~6&&w)cnP8~aT>e!JEZ$@QdVPlSs4@?>-&XsK`&|+XzYkH@!Btc{XH^WvthKvKX S_h$h0GkCiCxvXFVdQ&MBb@0EKBN5&!@I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_1.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba1a77dfd9a8755f1793921a8c583cd40f5767e GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#L2(R|S1>Hw%aC5m zU{Q1NJy43VB*-tA!Qt7BG$2RY)5S4FV`6fGf;0!$f=`lDMFLq{rc4c(${{H&C=}py k`Ou3;9{af68ILkB%>2r9ye>3(0#F-+r>mdKI;Vst0Ak1|qyPW_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_2.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb55b4fe97f7c31bd11c3a899fd4ef2feb8b6bf GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aX}0#CNu0^#!#BV zQ215e11QB<666=m;PC858jz#y>EaloF)=woL7IbW!6(V7B7v+eQ>F$?<&cyX6bf*< keCWj^kA2+kj7J$5W`1QlUKg4?0jQ0^)78&qol`;+04^XV`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_3.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d797b40a16129e062c7a105896b1d9a0784102be GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aSjYC3K{m+F_ii- zOeop$4k*P~666=m;PC858jz#y>EaloF)=woL7IbW!6(V7B7v+eQ>F$?<&cyX6bf*< keCWj^kA2+kj7J$5W`1QlUKg4?0jQ0^)78&qol`;+087s&WdHyG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_4.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc1678ce5dacc75e2bbeea26616cf509326c462 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aY_s;Y#8=BF_daD zq*%T<1C(Mc3GxeOaCmkj4am{FVdQ&MBb@0Pj^MSO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_5.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f6caf62d4058d5de67d165425d3c4759984dfec1 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#aV!ig*ctY+F_f|} z#J_VB1xhiN1o;IsI6S+N2IOdax;TbtOiWHtkmlf8@JVv2NFZy=l&JwzIV7b8g#w%| kAA0e~V;{FW<532NnO~WX*M%le0BU3KboFyt=akR{0DB!I`v3p{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_6.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_6.png new file mode 100644 index 0000000000000000000000000000000000000000..74b58c642bbb81375ac68067edc66aaa7dad4983 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#dU|@n!NGBHaaLAV z*XF-v1xhiN1o;IsI6S+N2IOdax;TbtOiWHtkmlf8@JVv2NFZy=l&JwzIV7b8g#w%| kAA0e~V;{FW<532NnO~WX*M%le0BU3KboFyt=akR{01!?lxBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_7.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_7.png new file mode 100644 index 0000000000000000000000000000000000000000..74b58c642bbb81375ac68067edc66aaa7dad4983 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SBC!#dU|@n!NGBHaaLAV z*XF-v1xhiN1o;IsI6S+N2IOdax;TbtOiWHtkmlf8@JVv2NFZy=l&JwzIV7b8g#w%| kAA0e~V;{FW<532NnO~WX*M%le0BU3KboFyt=akR{01!?lxBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/head_8.png b/Resources/Textures/Interface/Targeting/Status/head.rsi/head_8.png new file mode 100644 index 0000000000000000000000000000000000000000..4d024c61f7f2c0bc5fd3e850e0d7af7d2eb1c05f GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSBC!#3m6#m^z?#*gHJFp z#Kpz^XJD|hvJ(B-yc4K~u_VYZn8D%MjWi&~(9^{+L}Oxdf`T-M=7LW%eR={|Lwx22 zPSsf6wt$PHot1k*mZ96_Ln?6|`?%d1k1{X>JZ4Fr_DE+JP&0$4tDnm{r-UW|Q%fr_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/head.rsi/meta.json b/Resources/Textures/Interface/Targeting/Status/head.rsi/meta.json new file mode 100644 index 00000000000..2c34f86c28e --- /dev/null +++ b/Resources/Textures/Interface/Targeting/Status/head.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "head_0" + }, + { + "name": "head_1" + }, + { + "name": "head_2" + }, + { + "name": "head_3" + }, + { + "name": "head_4" + }, + { + "name": "head_5" + }, + { + "name": "head_6" + }, + { + "name": "head_7" + }, + { + "name": "head_8" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_0.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_0.png new file mode 100644 index 0000000000000000000000000000000000000000..22c7982489b70ff16db2cb15624b07f8a3de7ca9 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z$Oe?FXU+X#I@Ja!$XpWS7tHYgze~V1MIcwr)5S5wqBl7~f^`dXPm73wV9-Gq4_0AC m(ViZbvk59MdIAlc7#W;zGsrAoyrCPYgTd3)&t;ucLK6V3)h4|F literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_1.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3b5d4c1c8dcde3933519ebbb0bc9dc4f9fbfc0 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@TKr;B5VMQ?I~1nU;&o)!@U!JvaK9<0KO mqCGtF)}#cW{_FFctbZ(2ZN`ppUXO@geCx^F(#J) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_2.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e4db19616792928b1dbebd853069562e1fe392fd GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcwr)5S5wqBl7~f^`dXPm73wV9-Gq4_0AC m(ViZbvk59MdIAlc7#W;zGsrAoyrCPYgTd3)&t;ucLK6Up_9jLE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_3.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a204a18a9cdece9985776c6faa1d9cb6a98d73 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$Pz7|0TZw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_4.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9e81508b33ad3544c5d44f04a6c14ef249e34c GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$Pzlqb5TD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_5.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_5.png new file mode 100644 index 0000000000000000000000000000000000000000..930a7b52ed1cb8bd36bb84e653a1c7d5cef2167a GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#IZ1}U}yNpwyO>($XpWS7tHYgze~V1MIcwr)5S5wqBl7~f^`dXPm73wV9-Gq4_0AC m(ViZbvk59MdIAlc7#W;zGsrAoyrCPYgTd3)&t;ucLK6UOk0ts5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_6.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_6.png new file mode 100644 index 0000000000000000000000000000000000000000..efc7380c270a1ef691f11aa0e478b2304e32c53e GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$PzVJ|+tQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_7.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_7.png new file mode 100644 index 0000000000000000000000000000000000000000..efc7380c270a1ef691f11aa0e478b2304e32c53e GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9N=*>Eak-(VLtg!McUHr$xj-FzBF*2dl86 mXipEz*#wmrJ%I*Jj111V8Dy3(-p~!y!QkoY=d#Wzp$PzVJ|+tQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_8.png b/Resources/Textures/Interface/Targeting/Status/leftarm.rsi/leftarm_8.png new file mode 100644 index 0000000000000000000000000000000000000000..a00a6b1822e796f1cb38c52e4aa16f445ed3115c GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`U5U|56jtvlr+T$J%I*Jj0`cw4C*55F3ycPa#zuyM m0S8WW__GR21l)}L!N?#c&Y<|GG;bqNIfJLGpUXO@geCy^pC?rS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_1.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e10c8c48c228683e8de51710e707e4c86e4f41 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zOkTkd6vwb^FT?wp{QW?2mXaX9V21zy|8LfH=m7GSJzX3_EP9g@Bv=waPKc#safyx;?UHx3vIVCg!04^>k`2YX_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_2.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..31feb63b7bcc2e66bdf2ae1d4f3453a2e4677947 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zteDIY7sRl48N&qKEw_N;EG0pH!3_WZ|KF_Z&;jHtd%8G=So9_*NU$zW5V^o;U}$V) oC>U_yM2A1CutdPk$RCUhV&V*ne@gQ<0+lm(y85}Sb4q9e05}pT9smFU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_3.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..274855e4194b5d05834a62a87f33995572ee10cd GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztSDrNb70t8$G{{hYYY@;DGBlmX88aA|7Kl>4j^CI)5S5wqBl7~f^~6%$OT3NLt`UD n!GHrNI{aCMB?4|n{$OMf6K7ETQ<}FCsGPym)z4*}Q$iB}i2Nnu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_4.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e5dfefa166a79b05b1a4d0531a8aa8142235e7 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztgvB-Q)1Zb#GueH{Vq_Pr6kBNnBo8b|C@CkI)Hp-PZ!4!i{9h}3D(64A{Q7942_Kp n1p^M8=yQ nf&m9kbojFhO9b4E{K3c|CeEPvr!;RPP&tFAtDnm{r-UW|jmahn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_6.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_6.png new file mode 100644 index 0000000000000000000000000000000000000000..9822dfba4cb714b81e32705f429ce563e2427f60 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1P2G}>FLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CI)5S5wqBl7~f^~6%$OT3NLt`UD n!GHrNI{aCMB?4|n{$OMf6K7ETQ<}FCsGPym)z4*}Q$iB}4k9O| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_7.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9822dfba4cb714b81e32705f429ce563e2427f60 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1P2G}>FLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CI)5S5wqBl7~f^~6%$OT3NLt`UD n!GHrNI{aCMB?4|n{$OMf6K7ETQ<}FCsGPym)z4*}Q$iB}4k9O| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_8.png b/Resources/Textures/Interface/Targeting/Status/leftfoot.rsi/leftfoot_8.png new file mode 100644 index 0000000000000000000000000000000000000000..bdaec2557cb5c485bc4173a6f4e7dd0e7b033cc6 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwTp9i| zoM2!G4h~+x0Aw=g>FLGA#m!`3cA7#LJ0G6+v7zO@pllEKr}&t;ucLK6UZOCzuV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_1.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a7aea1b40fa2e1227e2ae1d7312ed50f16ba20 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@TMr;B5VMQ?I~1nc4kfrOMK6$Ss5Ol)pU epB5)LFfgc0WDuTEd}}38C4;A{pUXO@geCxP*CUDm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_2.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_2.png new file mode 100644 index 0000000000000000000000000000000000000000..43c72f0b2109137d0a8072d0e27d424ce07263fd GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcws)5S5wqBl7~f^~6&Ktf8Aih}=2CN?*w ePm2>A7#LJ0G6+v7zO@pllEKr}&t;ucLK6U2BqKQh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_3.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3114a1995cdfbaca9693d435046fedbe1ede8c22 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$PylWg@Zw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_4.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_4.png new file mode 100644 index 0000000000000000000000000000000000000000..83c4daefabf1aa53bb56177cd30a59bc033f609c GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$Py|=_57( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_5.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_5.png new file mode 100644 index 0000000000000000000000000000000000000000..06946c97c745f7ea70046dcb325f547a42003e6c GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#IZ1}U}yNpwyO>($XpWS7tHYgze~V1MIcws)5S5wqBl7~f^~6&Ktf8Aih}=2CN?*w ePm2>A7#LJ0G6+v7zO@pllEKr}&t;ucLK6T!9U|=j literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_6.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_6.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2ed496616e2767b566168b4a5ab2d4156a6111 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$Py)L?ZqG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_7.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_7.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2ed496616e2767b566168b4a5ab2d4156a6111 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9JTR>Eak-(VLtg!MeCXAR#45MZte16Pp{; er^N{l3=Aq08H6Vk-&zS&$>8bg=d#Wzp$Py)L?ZqG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_8.png b/Resources/Textures/Interface/Targeting/Status/lefthand.rsi/lefthand_8.png new file mode 100644 index 0000000000000000000000000000000000000000..2b33680d43842bc7cab7aeaf2efd290ce5798e63 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`U5U|*9n7%x-ROYJa$9 iaB3t-v2eAiFff>|Wzg-ZUwjp)l)=;0&t;ucLK6T;uq8?W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_1.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0c3e410daebde3b664a5051ee922b41c502ec5 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| zOkTkd6vwb^FT?wp{QW?2mXaX9V21zy|8LfH=m7HNJzX3_EP9g@Bv=4j^CN)5S5wqBl7~f^~7i1ZFokH?==p jGdML8q*%DxR2Udc*D~n#)GxjYRLbD#>gTe~DWM4f-pV7_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_4.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcd84fffdf08bb6afa4e24643e5754bb42ffe67 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztgvB-Q)1Zb#GueH{Vq_Pr6kBNnBo8b|C@CkI)Hq6PZ!4!i{9h}3D(646PVrH+|>SX j&EV8XkYeF#Q(<5*UCW@`Q@{8sP$`3_tDnm{r-UW|D`+I~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_5.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_5.png new file mode 100644 index 0000000000000000000000000000000000000000..4e302cda6492c72b10abe7adc4af9a0bd24bc0ef GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| ztYBw|V`13K#-OyhBN!;oQWE4B%<%vJ|INA%9YDUkr;B5VMQ?I~1nc623CwP8ZfbwH jW^igGNU?CWsW32@u4T~esb72*sFcCe)z4*}Q$iB};`<~1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_6.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_6.png new file mode 100644 index 0000000000000000000000000000000000000000..d36a43c441db820231e3346d15e4571c4bd66705 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1P2G}>FLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i1ZFokH?==p jGdML8q*%DxR2Udc*D~n#)GxjYRLbD#>gTe~DWM4fT;wI1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_7.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_7.png new file mode 100644 index 0000000000000000000000000000000000000000..d36a43c441db820231e3346d15e4571c4bd66705 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1P2G}>FLGA#U;G@V+#~#DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i1ZFokH?==p jGdML8q*%DxR2Udc*D~n#)GxjYRLbD#>gTe~DWM4fT;wI1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_8.png b/Resources/Textures/Interface/Targeting/Status/leftleg.rsi/leftleg_8.png new file mode 100644 index 0000000000000000000000000000000000000000..75bd581d69b23e914f915868d69b5e8ad04b74ca GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwTp9i| zoM2!G4h~+x0Aw=g>FLGA#m!`3c|n9LAUah@9}$XpWS7tHYgze~V1MIcwx)5S5wqBl7~g7pe}Ps@{;948-#GfX+Y qnnB}y$93KwpO!fmTyBg43=FQU3^K=dELsfI#Ng@b=d#Wzp$PzZk128h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_3.png b/Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd974fdeea6f52a03ae3e4c44048df5ec4d83f5e GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#5pjmC}hwQnAHvxWG)Hv3ugHL-zDIhB9N=;>Eak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPsEak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPs($XpWS7tHYgze~V1MIcwx)5S5wqBl7~g7pe}Ps@{;948-#GfX+Y qnnB}y$93KwpO!fmTyBg43=FQU3^K=dELsfI#Ng@b=d#Wzp$Pz7L@6c! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_6.png b/Resources/Textures/Interface/Targeting/Status/rightarm.rsi/rightarm_6.png new file mode 100644 index 0000000000000000000000000000000000000000..35eec2905a589c16da56548c94ff65c360ea589a GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9N=;>Eak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPsEak-(VLtg!Fq+gr{&2^j+2kW8KxXx q&7g6<<2rATPs6cY~Ol5@kv8w?Y8HU9GlomO3X?7*3Wr$79>7uj}P+N$$f|7kg~ zBpHTHGAV|-41s(Mk$>La)Q!4fpY`lOI|IY-8QgErE&crvXd8p4tDnm{r-UW|y3ja{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_1.png b/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..967639b3fd1ab59ac776dca393efce1f977b7148 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1jR8-UcsbP0l+XkKDcC65 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_2.png b/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bff7d8016d0aa34190d2a21f08606564f3095d92 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#04>|n9Q(u8N-$0A|9YPOG%JlFvI`<|2OM8bO8BEo-U3d7QM*{60D08L@tOJ7#SHF nKboALq_lv6XT@8cBnAdydj_d1|GqT?RWo?H`njxgN@xNA|FkGb literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_3.png b/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d74824df983c9e2c4571bd2ebe4fd5b0da4ee7d7 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#5pjmC}h}M$M8{N{wJU~OG%JlFvI`<|2OM8bO8BEo-U3d7QM*{60D08L@tOJ7#SHF nKboALq_lv6XT@8cBnAdydj_d1|GqT?RWo?H`njxgN@xNAAZ94R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_4.png b/Resources/Textures/Interface/Targeting/Status/rightfoot.rsi/rightfoot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..50f6abc2c3493932b95c919b9ec8e43fd3501e17 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#3?bXuwmHi#IV8bt}#%Yr6kBNnBo8b|C@CkI)Hp7PZ!4!i{9h}3D(64A{RsqjEoG8 nA5BhAQd+>kv*N8z5(9&4j^C2)5S5wqBl7~f^~6%$ORDtBO^oO mN0ZZ&lol}Xtaz)F#K0hI&meW>-?wI4j^C2)5S5wqBl7~f^~6%$ORDtBO^oO mN0ZZ&lol}Xtaz)F#K0hI&meW>-?wIEU|7Jw5EmEspMk;P^3h_T0``(1zhH*{V6e1)*>9kbx~Gd{h(&L5f&}a0 z1d$6O8w`v#8a|qso|2T7lzK3mL0KU1cH|KT2H7tRI&;<^Z31dx@O1TaS?83{1OTZc BG5G)h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/meta.json b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/meta.json new file mode 100644 index 00000000000..61c5b77862c --- /dev/null +++ b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Edited by Mocho from the original tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "righthand_0" + }, + { + "name": "righthand_1" + }, + { + "name": "righthand_2" + }, + { + "name": "righthand_3" + }, + { + "name": "righthand_4" + }, + { + "name": "righthand_5" + }, + { + "name": "righthand_6" + }, + { + "name": "righthand_7" + }, + { + "name": "righthand_8" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_0.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a69056bb651613cf0373d6463343d5a1a77732ec GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z$Oe?FXU+X#I@Ja!$XpWS7tHYgze~V1MIcwf)5S5wqBl7~f^{*2uz``GP>_QIt0OB< g56ctxg9n%yRO=apt55Wa1JyEky85}Sb4q9e0E{OhtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_1.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e14168b2e7d274acd23f5bd8ac0ffcc7b3bdf673 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z1jR8-UcvC|7`p{fkhvttFPP!~f0ux3ia@S{r;B5VMQ?I~1nXi3VFM#Wp&$nbR!3Hz g9+oHW2M;hasMa$GSD)w;2dZW8boFyt=akR{0D@;Ch5!Hn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_2.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b12b15e883b39f3f0b24ee9dfb8ea87d3c2a0deb GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#04>|n9LAUah@9}$XpWS7tHYgze~V1MIcwf)5S5wqBl7~f^{*2uz``GP>_QIt0OB< g56ctxg9n%yRO=apt55Wa1JyEky85}Sb4q9e0BRBEak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!06|3|t^fc4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_4.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4afd3e7f53131f6cc8a2439b08eed334157435a3 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z#3?bXuwm#i?SBLmWG)Hv3ugHL-zDIhB9N=#>Eak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!0A($XpWS7tHYgze~V1MIcwf)5S5wqBl7~f^{*2uz``GP>_QIt0OB< g56ctxg9n%yRO=apt55Wa1JyEky85}Sb4q9e08n!w=>Px# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_6.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_6.png new file mode 100644 index 0000000000000000000000000000000000000000..87e8f18ef82614f9b10061639b22fd21f04193f2 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9N=#>Eak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!09L#q`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_7.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_7.png new file mode 100644 index 0000000000000000000000000000000000000000..87e8f18ef82614f9b10061639b22fd21f04193f2 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|I0Jk_Tp9i| z=;`SN2M4d76Jr4sWG)Hv3ugHL-zDIhB9N=#>Eak-(VLtg!Md11*ucn8D9FKq)sdB_ ghvkX;!2`?;s`U)Q)hGJIfod5%UHx3vIVCg!09L#q`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_8.png b/Resources/Textures/Interface/Targeting/Status/righthand.rsi/righthand_8.png new file mode 100644 index 0000000000000000000000000000000000000000..797e0683e8b2b453220a4df0e6ae10ba30836206 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`S#U|I}ei(k> r$eA-8_gTc4xFjSvBMiCNQ z#W5tpJvl*wb+Mv>6cZYuY|A3y$;oiD;nV+^psWI2^X00Om&nhK^;u%Uux#4Q=IJuI z5nm@fWtiZ3f8O0iUCJlQ7(#Q{rHo!NWVJq7VF@&?#F>FX)0yqo?d7cbK>HXxUHx3v IIVCg!0E0I)jsO4v literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_1.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..786b0777c38cc7425ad85f8ca833f6798ccbce1c GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z1jR8-Ucs|n9Q(u8N-$0A|9YPOG%JlFvI`<|2OM8bO8DCo-U3d7QM*{60D08J}|kdsi`q> j&EV8ZkjY?m7H42E+rXg1_{^gasFcCe)z4*}Q$iB}Iz%Jo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_3.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9690690d72a2be8182a5b4fde5ffaac6c252e4 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#5pjmC}h}M$M8{N{wJU~OG%JlFvI`<|2OM8bO8DCo-U3d7QM*{60D08J}|kdsi`q> j&EV8ZkjY?m7H42E+rXg1_{^gasFcCe)z4*}Q$iB}S$rg3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_4.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec62ccb0627d4b41348a43414fd1307746a28a83 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#3?bXuwmHi#IV8bt}#%Yr6kBNnBo8b|C@CkI)Hq6PZ!4!i{9h}3D(64ADGgTe~DWM4f16?CK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_5.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_5.png new file mode 100644 index 0000000000000000000000000000000000000000..d30e124e64d0a0410302091ffcc642193a22e52b GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z#IZ1}U}xCN#&CA`))JsNOG%JlFvI`<|2OM8bO8DCo-U3d7QM*{60D08J}|kdsi`q> j&EV8ZkjY?m7H42E+rXg1_{^gasFcCe)z4*}Q$iB}2sk5G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_6.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_6.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4ee1f90383d727ece0ef7e402bfc181671a459 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z=;`SN2M5Q+#eH#KZweG=DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i2PQW)H8m!# j8Jt=PG8wGS;tULC8yIvLpLrAll`?p``njxgN@xNA8!sb{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_7.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_7.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4ee1f90383d727ece0ef7e402bfc181671a459 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|cmjMvTp9i| z=;`SN2M5Q+#eH#KZweG=DGBlmX88aA|7Kl>4j^CN)5S5wqBl7~f^~7i2PQW)H8m!# j8Jt=PG8wGS;tULC8yIvLpLrAll`?p``njxgN@xNA8!sb{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_8.png b/Resources/Textures/Interface/Targeting/Status/rightleg.rsi/rightleg_8.png new file mode 100644 index 0000000000000000000000000000000000000000..70ccb309add238bae2e54d34edc459ea25e12070 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|L<4+6Tp9i| z=;`SN2M3>EU|7Jw5EmEspMk;P^3h_T0``(1zhH*{V6e1)*>9kbj;D)bh(&L5f&}a0 zgbz$^YH4bFxFTjm%=|d}z?oAX2e{1sa5aQ&2uM46ft4Zf7=z2<%H0A$eGHzielF{r G5}E+?-ZjSn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/meta.json b/Resources/Textures/Interface/Targeting/Status/torso.rsi/meta.json new file mode 100644 index 00000000000..7baeebd0801 --- /dev/null +++ b/Resources/Textures/Interface/Targeting/Status/torso.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Edited by Mocho from the original tgstation sprites taken at commit https://github.com/tgstation/tgstation/commit/c7e14784b35b1a136351c396d3a546f461ee2451", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "torso_0" + }, + { + "name": "torso_1" + }, + { + "name": "torso_2" + }, + { + "name": "torso_3" + }, + { + "name": "torso_4" + }, + { + "name": "torso_5" + }, + { + "name": "torso_6" + }, + { + "name": "torso_7" + }, + { + "name": "torso_8" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_0.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b20ce001ba61861a3aa92b565589686fd607802f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z$Oe?FXU)|rTBV%O-?XRoK2VCaB*-tA;Xe?_Tu=jFVdQ&MBb@0LMEl AQ~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_1.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_1.png new file mode 100644 index 0000000000000000000000000000000000000000..591b6a5bab5ae843376516c4b6ec7ff84745a0f7 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z1jR8-Ucsa)Jb_2}6&M!hw!x zMqy(PgNI=Uco;=yICwBBhcNnu3xybPwb?Q-Sl2PM?z*#lK2Rrvr>mdKI;Vst0HK&G A<^TWy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_2.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_2.png new file mode 100644 index 0000000000000000000000000000000000000000..71f09fc7f6b9bd060464f2194375919c69f0f400 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#04>|n9Q(u8AE9bL*Z9>518F~p)bIYENegrUbr;Xp?; zqp&fD!NafvJd7eU96T76Lm2(Sg+dIt+H4sZtm_zBcimY&AE=YT)78&qol`;+0BA}p AJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_3.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9f954321ca062b2e99e196306e10b6c1ef3e71 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#5pjmC}h}M$586WFrj3}JD?P6NswPK!+#)8F~p)bIYENegrUbr;Xp?; zqp&fD!NafvJd7eU96T76Lm2(Sg+dIt+H4sZtm_zBcimY&AE=YT)78&qol`;+0Ep%* ArvLx| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_4.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ada865a05feb185577dd430bd00969d23bfcd6aa GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#3?bXuwmHi#89fqkYf4b3{Z--B*-tA;Xe?_Tu=jFVdQ&MBb@03{$Q Ang9R* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_5.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3a6ad7d0e9c1c43f6ed6e0beb727b9aebedead GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z#IZ1}U}xCN#!$+_5dY3i6ez`7666=m@E-_dE~tS_((`n246*1pF(kU3Zqx2kK<-boFyt=akR{0H;nV AJpcdz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_6.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_6.png new file mode 100644 index 0000000000000000000000000000000000000000..c289a454bdb5a9074999e863762f2703f3d301bc GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`SN2M5Q+#aUTdU7P=w6)448666=m@E-_dE~tS_((`n246*1pF(kU3Zqx2kK<-boFyt=akR{07$AT A`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_7.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_7.png new file mode 100644 index 0000000000000000000000000000000000000000..c289a454bdb5a9074999e863762f2703f3d301bc GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|_yc@GTp9i| z=;`SN2M5Q+#aUTdU7P=w6)448666=m@E-_dE~tS_((`n246*1pF(kU3Zqx2kK<-boFyt=akR{07$AT A`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_8.png b/Resources/Textures/Interface/Targeting/Status/torso.rsi/torso_8.png new file mode 100644 index 0000000000000000000000000000000000000000..eefec17cf6057f69452a6cb4da15774d87e6ad7d GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Bm#UwTp9i| zEMQ;=4h}xSz@Vq6_n(0wE-uc>%1Yy=`evXSj*=k1V21w?aP?G(5m3y=)5S5wqBl7~ zg4Kkf$H(W4kB`m{QG<<}Hg4Qx_%MuN5}VQ;t{DflW}MvKG?6ohH7|UV!`cIndjk#5 aFfwR`GrXC!cS0-B90pHUKbLh*2~7YCBs|Li literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Misc/Pizza/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Misc/Pizza/parts.rsi/l_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..d2838e8b7d4224fcd118e2980b1b694ba6091fe7 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WChBd@pN$vsfc@fYri+Mp$Pkj@Pqaa=7q%~N6#KSx-dZGpkw#sCee$r?&5`I zpZQ-rc%UG{&MqjkMPX5F*Y%(e*Ok^zc9xY{tUvu!<&~n`xRwLonV(L2{q>^Fq}`Wn zn1J>%DE^+Ue9FXiXV>lYzNA@O)2nRe3I5$A)Bkvv!n_8tue+2cv8=SH7xZ^XOH|5v zBNtU)`L9Nq!}-qJO4KFFM(J^R5u)uop{KNbmDUb4T`$BO$_>~Wy( zmt94hSe9*nAN;=ies-Di^4|v?Z7&9O`2Ssau&!#wlv11GQ}(aSmS3@Yc|A7GVddhS z+bSO_>-N`eTND4s^7FL+6(5$(^w@s=cELB1AF6Xrds}wxy?5xp3dpNa;Lzjywc~qz z_wBI$in$F-q}R=@nBDNgZ52>-I%fypy=_%TcC#GWej&G0-61KqOexk@XDI+|85 zZkFHtzqz@oIY1_+L^zNo_Q*D|KT%z!n=XjG5!?BA)z;ieyHyUwR@QkJ{e84o{Uz(9 z=|KA!4jjD~wO_St>$0fy**C1J?E0dQzF95tviIuASEA10>lh<;vMTr0*xuYF%lyE8 zQ|*E8$(xmHR`1T5`*Vt_Xj3l3o6{?Qil55UyL7yIUY?Qa$G&?JbJxVVskJO)ydw8= z`(%~-vrg%@v@!f>*Wa%(b>@PF2eW7SiNCa|JTERTyum7R@76g^8C7gg&T%F6R|s63 znRsjOf(aF#*=zj5)~~T=+%V}>@}@hu zS2i4a9qzK)yC&z>lhqM-Cpx+IyfI}7;It1qe@>9DboFyt=akR{00tQgI{*Lx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel.png b/Resources/Textures/Objects/Specific/Medical/Surgery/bone_gel.rsi/bone-gel.png new file mode 100644 index 0000000000000000000000000000000000000000..f66bf6cdf9eb1aea9b77e8819b3f0cd71609ab3b GIT binary patch literal 432 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_openpanel.png b/Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_openpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..cc174c7d8b9612da38c3952579702f93c9c01961 GIT binary patch literal 3981 zcmV;84|4E{P)t|M}mu-|t3MTv;qATa@T2>g(&%o^!k1^gM@thTQoo3OAP< zpz|A{(P*I8>!DVwq1LFOQEPC{1*3554Rdhx=us?NwhYl|G?^gI$-{djfPq9I@J)oT z?*|`*?;9Xr6}QLnl?#GUc*AHUiSdQ)u*GcPc^)MtC762IGz=Ov80*)sXNjT-Fjbh~ z_qHKu@sUd?29$t8;D;?i_BseZ;`;b$@qL7!_}oB3wfpT|_}&kOBj}d$SAl_yc@szU^O;uTbtzb1|>KTGR9ZY|2Dnd%ncf66@In&4NRf? zFZ}^iXWfrK-aZ8nuYL#($Lnzas!iDX>O$Of+hcIp?D)y_aX3-kJRo=?^3A7%sL0nC20xlryRd}ZeN$pWB#8V!q@V;MD@ zEy*|0%+n~cTM>v07-mR6Z%)7s1`XRETxNkvZ9pUv#pg$AQBhu&@+K4#pWbMTMLeKX za!`>1AXt$fBYb`4_#Fih5|4$+X{*5o11WJq5TMYiNR3k^?A>lcq4D)v4dZhfWmfsBt{2gB0xTvA^km2n z@}x-y+Zdd_+gV(U5D)0cxl^relFyBr?iPMAZ3Tfu;c}UvQ>yS;LmlZ@OHoPs(Ab)1 zVYOOu@X%*yZfS+XUX-#X%8f5602`U&DHLLwqO^1f$Y8cfK&K)+2I-}XA6D|0FJ-P|0X6yLMV;LP(+sVtqKudN1Eg=jSjVBJLk&Fao0^V&^6@9PZof_Spf?v zeL4%!YPE<8V#z1Mp%KBgAu=#R9FSJt|1{g)yx?lIdBa%#+GhOf8$ZYXV-bAT{<)!M z0Y|+Yrc54;>zqa$4(RaL$M3**E}kUGWUly!0vbI3_?-jebD7J3vH*C0M`O_I3>~ix zR;UQDm86J19ki-DYCu(072DFq28~K>5rbD=HVUSnuLZaE$5?RlX#DY|LvXvbIB%F4 zt)B*2Ef{<5NZJR2^ubx->rFZ`eN<+Z|ItSu^_qVgr9fJ~qzjrtR(SjQSaQD;3u-br z1<9)LkdMc?WVP5<8^i}6e1KG8b{JV5U3BeeENDOG3-f63gc0%i*}jfUGrPvBZ`iS5 zN5=!N0r6+8#-iYoKJg!)Y{Q}tJ*oN1?))7)cJ!M6`!*ixk)JF8g)xR3E;eJ%JG>;* zv0%sZ?s$yHP(24j`=I*2hP{ZKiYL#XR4VZ`(&XmdJspqEx?Yl~+EY=MiTwc++Yg08 zlJk_m?n5u$@D7}xDo%$_;|qUg^Z)ysm*Rn!?oP|^whrLEWKfAl5F*#@yx^=4iy7m| zfONz!LLc1Oi18Xd##IR7$WLMmSAj`S{u2{+7_dcGht0b=jE|Ubq9u%ITzYd7%|8({ zNd>rd{lNLZGb!NM@ykB*H|+A^wc0fNP~Y?aw$+2pd;f&-p;%hJqyTPMcMJ-%9!+&k z7(GE+FoVh5w*yn#AbJu#%V~n1fvJ1FA z&-^vVJg`_Z%vV}T)9I3)PW)s6#O*w8pLRE%cxx%z0v=NO?Q?e_f*6_mQgApNBC~|{ z52)>U;=t$ZO}3F1;dpHu_C5LwXy(pEWc4aw@nT$Y@4fifgAW4p=i{p7%dutNJa!!O ze}+(Ptz;1Va`S(imM>`m_dj(n%wg#>j%YZ_wsiIP`q86sX%%dW7Kub~{-x&$hGH#h zPE?BzpUA}{t5&r`=HtEFZX+YBxW9$$Cyul2t+#fofpX+`v;ZN7-Log){P&NcrLj4g zfKa$&u&S#&j#e^OISGq?f&J8D&$8oJTz5GFfe4zP`x_QMx&kwuC0IwcOIn8l&tJmc za}U}7gV~NxUi>?IKy~7J=^$Njd|I~!DgQ+6u|Dyaw}udTUJVV_U|t%2M*%2Q`1Xba zI3DED;%P!_8)NGg`^bD=N}S_<~>P2md(vH<@u$@w?4}Or-A% zwTh)qm*7T|jm!uH*fi4RIqf@_EnNWna5EHIHRv;}dDmSGmum(N9y(06PF7<}O9w+m zD7CdGQC8-J)9!@V=S8~6Hs4`)z~}Sz$Pcu%Pd!NsI2}HhhTqtDl5Hu!sj&&guHtU| zZUx}=1Q8Ad!IL>}L#=qD+M?q0skvF~8tD9(4j_B>?BTEn7%_2(FudFbe;`VrwRrvY zSD37Wu0}OVEyAHN3?@BPN;R&%=32N*+-Yw>F8EY#QYd^@06X{W6lTnvfnQ%Y0lb@s zU=%R(mJulvc;i)r5cP$iB1`M4cdLYnV<&R72A*sVut&KYUtNpM|JZ_Ow{666Pbo~E z&oH=DjY*R(#MW(l@wc_Bara%n!I3XIzR$}vf6L}A5ZZu+>vu}{Teema{xccpb1C=` zMnLe^;F0In_Q+=iK;b5{1~G>ZDza!Xv{}KsqNpgXK*c!~xbmv0xMtEdc;t~sSm}MR z?_C@r0}_F=i|}Mnp%0_zBUu`u7lz?(0&CW+!GsADuzmaXl>I1u9)8i4Q!#e+#~5l|$&Q(61m8O|m1WE(ja z2uMGlN&cJ@g#XG&a%53n_#+Abo7Rgl?G>8;W!T+?Z!Iz;`N;w>y2KR*7a%haJ)rX# z5!Q=y;>{m#MyXruw|DN`+427NR@~HdGMR{x?g}ir=ShSkal}YJI%cFpl1Tcs91Vj( znpwH>lLg@OMp!fK93GDcp2ikT9X}P1ZC}BT1%u+Uo7R}l!IN={4np*ci92t9AbI?S zHGd*2$QazDc6oha%>4c${O6q~ux6qkX|$@XunxCyF&Uh?2;%$QMZ7Lf=!^O-*Y(uacGq8EL%a#a_6h^t&dmA+@GMzw>~~DbAN&=-}?C7GWRE_@~w~W%^%Q}pKE_Yw)t!pluvy; zUt)eYe?YGF@u~RKACTbZ!yk}Kem8$WuJ!S$_%srH>JLcp`|S@f5dO%* zicd3|;Il+_=I6+tkSl&#e?U?nuU6z$pWk19z_{VoB;Q=~33l(@mpA^v z`~e~F8L7`#tCSu55taGnpY;bQ-BW56F~0zOz0*ojyJlf1v(=>gvOAIHmlC`jaSeI}47V z7k@yu_4yk%o;m!C_ybbu^`h|c|&&m0YVCW{$v78==8P2oJ=22#i_aQ2PE|Qopt&(=jD#yIscvSgEtn= zjXz)x)5lL>&p}LEjnHdXrq#!1gP+jnUqNrK)ri^e=@HnpFsJ^6ME)s%CG`hvqWNEU z)*oP%gFj%&Upn;h56#cLKL1SOXT=}TIqtY8_xk)ZiJy0WK>PIvB=I|w`FZyT$UXAz z50HE0-5((L$h$v4?okl_069mW`~f>HMOoG7%Q5=o4=8rHQQ@+~sLYN&Uyjjde}F$G zU}zTn0dkGr{Q>>_{ruC_$ICsseIY~cFVseL&h+t+d35s!kYRw-cr#+;-l!BpPWAb6 zjFkQW`Z$6LQgfk?mwObHKR}MrFMohC3;qDPMppd+8lC#I_4#rQNf(sS-_P&I@Au0w zB>n&znfU$uRMDG0U#=l(0h#*!{QmxazZ^qS09pC{{8W)fpD)Kq=@0Pxy*bzC%QaH^ z10wMVTM-LFZuR+cjFkR>))o&Ey>+hi`Erdu`2(`4&zEZyoIgNrQE>hMxkc9e0iE^v zopt)x%x>$Z&zEy##UIdBpWj)hpGu!E=g5jbpsPOryIMW2_63`^Y|$&E^GJNWg|yqJuCZOv@l? z5fGJ9oDNVsLzz+^IM&M089}fVr64efgNl97iL^r@!n7l?mI-yF4TK<65lk@h$cBVX z_I-En?%vz)-n-f565tQ`{>a($oqNvrJKy8?oft~$N+kV&9(R)7-rn1;`FuWkoxxp- zK{jry=3t3i!LlqY77L6+Wn2(N5v8T2Xnc4MDk>^*@ZdoOlnlV;w;>jdQp=S?%j(71~r?-ZX>OoLV0=l-2)g|QO!^s zC0$J#Ofn1qYt8vZui1~z^POlux(~^sYtYF?IX##VAUOejC@UMk>-Z}GoK<#%Ll=U`85nLWGoE9U*nDLGWQ#d7?*MwMK3V{>( z&DW)OJ*a!h4$7#S41yl^;FgAc*39qFC!qS=5$Dj z5;8*Sj>ad9a>BLhdDNxSaG&eI@&BC%&nFNJ4#4Aa=Rp{5K7`JP(Q1T+MqZ?l@Dath z{B?0j36dgUrnSLvM6<8B&4X@V*qd||0*8-GSWvHVZ$~3(Xr_+h^7cL?= z5QfKHq=3)>aCt1CG@u*Xks*@?odnMA(ij>PL{!M=Zoc{S&5H4=$|5y%ta`KzV!vL8 zC+W9*dz;OHa44v(x!rC_10XWU!{p% zETvmpIU{|;!dYadnCda2S>+VJUIm;^6LrTT2=rb@^PyJ!^e2yNLy#5Kk+Ey5g~{a% zOL!4uVZaa7fXq_7D_>g z#g)04h)v@GomI`aZ{uRYsE$E~FZBCtMkEqqz!_9zUtBu{VKAFtzpmHgA-i--P(6cb z9D>7XL4TkhW9qdxsHEEO%B0ax zOf=G}gHL3!-^*gpU_Zn!)pGQWZNQoMXIQZ>ggeTZ#^E8zx<#y<^AdLbV>9CMDBWIl zb6OIRq1u-Xr&39(lH3NP8@tYZqkQD5aY$EsA~^HrvtU=OfUsvbuxS%!u33YBZQKZ~ zUX9t?wxMO!Dn*agKS#2sXLu5>duI*oDN2;ApfDn}0;Gw{Ws%wMFue=CCY@5Ef*|1j zX%i)`#DuP^ooe%;!-d_ub4FI<)8)&7+`NV6LwaRgy7VRwNEw`5R*(BXyNvKa2t(0I zrjmJpfxs1nDOZchmi&NyXZ!n#e&&MdNF)RVfB$E!e{%;G7MEf_jjxAC0DqjSeDgBR zU$MLK<=($24eII>Puv7RXTT4d&*2I$A`}fG98RJrmsqj{1qoRyK{*t~tWNR3h0b1l z^6^2GloTr-Xq-9^9kFxRN#9E|rebFxkl!zrH7IkbtPBi|9Xb85ZfK*}CkAq*M{cm% zTvQPfT&$L!|jhrP{m@^f+^Gq=TXP|n#N+qV`XKPFp!o0zJ8Q=OQ;Ka zs2{}g=L`c74e>}Nc!*T<*LtFgE|OLQ5)7(cOy&nUf!f>K8MFhV8>*yH)h@&nY4r8= z;PBzUDbIR~%?ws=LMoX8XQKwEH{!ARk15Z64S=@xHfi3%dHCgmdWb#|l2yXOC8KdG z`Qhveq+>}Kh*~?2bw~~48yMLG*MkY@2-t@Q_MzoS3we+BGhLcdigscCvIt&!;aBMX zwzmL4Hg2=C$arEf5NU7`Cq!=={xU!O_xUkvb|dCbo{z0tw<_rWbLJSjdoF{FtC6Cl zlADp-lGVs@R7G9G#^lZ_@~!|+aT)cPn3jm*eQ8*82MmcR$)UP>v|@bwjvZ)fYC?T| zJz85^HE|pg`91L9tVYya{T$zOPQgt1a!xCLWU^pxjK{K1Em*N)F|j5`RTIimF_bTr1zn%wC-cPKiZ=kp%BQRtnjB%%B;d2Z!vdHtW7 zenSkJfsec!jis>g#~bkPf9}H3*3$(546l}0oR<$xYuwxUMkn5VV-M~mG7r3c;5ozt vDrq@>TUdJri(p7tlz0!x*s--r70L2{5nFoI$&gW)00000NkvXXu0mjfL90K> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_unfill.png b/Resources/Textures/Structures/Machines/limbgrower.rsi/limbgrower_unfill.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa57f247e2a662abf1fa970c6cc3a0d8688aff1 GIT binary patch literal 9104 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 HE(!k!t;RL{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/limbgrower.rsi/meta.json b/Resources/Textures/Structures/Machines/limbgrower.rsi/meta.json new file mode 100644 index 00000000000..1b5f86463ff --- /dev/null +++ b/Resources/Textures/Structures/Machines/limbgrower.rsi/meta.json @@ -0,0 +1,85 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from /tg/station at commit 85c26c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "limbgrower_fill", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "limbgrower_unfill", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "limbgrower_openpanel", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "limbgrower_idleoff", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "limbgrower_idleon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "limbgrower_panelopen" + } + ] +} diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 87df8c1eec8..904190fcf55 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -70,21 +70,27 @@ binds: - function: CameraRotateLeft type: State key: NumpadNum7 + mod1: Control - function: CameraRotateRight type: State key: NumpadNum9 + mod1: Control - function: CameraReset type: State key: NumpadNum8 + mod1: Control - function: ZoomOut type: State key: NumpadNum4 + mod1: Control - function: ZoomIn type: State key: NumpadNum6 + mod1: Control - function: ResetZoom type: State key: NumpadNum5 + mod1: Control # Misc - function: ShowEscapeMenu type: State @@ -556,3 +562,22 @@ binds: - function: LookUp type: State key: Space +# Targeting +- function: TargetHead + type: State + key: NumpadNum8 +- function: TargetTorso + type: State + key: NumpadNum5 +- function: TargetLeftArm + type: State + key: NumpadNum6 +- function: TargetRightArm + type: State + key: NumpadNum4 +- function: TargetLeftLeg + type: State + key: NumpadNum3 +- function: TargetRightLeg + type: State + key: NumpadNum1 From ea9a07616fb2b419e89811fa2f753a19aee0da73 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 17 Nov 2024 00:32:54 +0000 Subject: [PATCH 014/182] Automatic Changelog Update (#1159) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5a868f558fb..5ad5850237e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7919,3 +7919,10 @@ Entries: id: 6522 time: '2024-11-16T22:41:37.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1229 +- author: Mocho + changes: + - type: Add + message: A week has passed. Surgery is here. + id: 6523 + time: '2024-11-17T00:32:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1159 From bdbc394a8ee4599ab783e83047abf9fa4db6bec8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 17:41:50 -0800 Subject: [PATCH 015/182] Update Credits (#1235) This is an automated Pull Request. This PR updates the GitHub contributors in the credits section. Co-authored-by: SimpleStation Changelogs --- 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 3400d8c76a7..736a888ebff 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Aerocrux, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, Aidenkrz, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, armoks, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedPugilist, BasedUser, beck-thompson, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, bloodrizer, Bloody2372, blueDev2, BlueHNT, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, BYONDFuckery, c0rigin, c4llv07e, CaasGit, CakeQ, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, CilliePaint, civilCornball, clorl, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DeltaV-Bot, DerbyX, derek, dersheppard, dexlerxd, dffdff2423, dge21, digitalic, DinoWattz, DJB1gYAPPA, DjfjdfofdjfjD, docnite, DoctorBeard, DogZeroX, dolgovmi, dontbetank, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, drakewill-CRL, Drayff, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Emisse, emmafornash, EmoGarbage404, Endecc, enumerate0, eoineoineoin, eris, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, Evgencheg, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, Fansana, Feluk6174, fenndragon, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, FluffiestFloof, FluidRock, flybik, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, FoxxoTrystan, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, GalacticChimp, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, ghost581x, Git-Nivrak, gituhabu, GlassEclipse, gluesniffler, GNF54, Golinth, GoodWheatley, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, h3half, Haltell, Hanzdegloker, Hardly3D, harikattar, Hebi, Henry, HerCoyote23, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, icekot8, icesickleone, Ichaie, iczero, iglov, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jjtParadox, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justin, justintether, JustinTrotter, justtne, k3yw, Kadeo64, KaiShibaa, kalane15, kalanosh, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, komunre, koteq, Krunklehorn, Kukutis96513, Kupie, kxvvv, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, Leander-0, leonardo-dabepis, leonsfriedrich, lettern, LetterN, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, Lomcastar, LordCarve, LordEclipse, LovelyLophi, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, michaelcu, micheel665, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, MLGTASTICa, Mnemotechnician, moderatelyaware, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, namespace-Memory, Nannek, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, not-gavnaed, notafet, notquitehadouken, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OCOtheOmega, OctoRocket, OldDanceJacket, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixelTheKermit, PJB3005, Plasmaguy, PlasmaRaptor, plinyvic, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, Rinkashikachi, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, router, RumiTiger, S1ss3l, Saakra, Salex08, sam, Samsterious, SaphireLattice, SapphicOverload, SaveliyM360, sBasalto, ScalyChimp, scrato, Scribbles0, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, ShadowCommander, shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, siyengar04, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, sleepyyapril, Slyfox333, snebl, sniperchance, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, Spatison, SpeltIncorrectyl, sphirai, SplinterGP, spoogemonster, sporekto, Squishy77, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, takemysoult, TaralGit, Taran, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, theOperand, TherapyGoth, TheShuEd, thevinter, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, tin-man-tim, Tirochora, Titian3, tk-a369, tkdrg, Tmanzxd, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, Tornado-Technology, tosatur, TotallyLemon, truepaintgit, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, unusualcrow, Uriende, UristMcDorf, user424242420, v0idRift, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, volotomite, volundr-, Voomra, Vordenburg, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, yunii, yuriykiss, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, zelezniciar1, ZelteHonor, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zymem, zzylex +0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Aerocrux, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, Aidenkrz, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, armoks, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedPugilist, BasedUser, beck-thompson, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, bloodrizer, Bloody2372, blueDev2, BlueHNT, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, BYONDFuckery, c0rigin, c4llv07e, CaasGit, CakeQ, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, CilliePaint, civilCornball, clorl, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DeltaV-Bot, DerbyX, derek, dersheppard, dexlerxd, dffdff2423, dge21, digitalic, DinoWattz, DJB1gYAPPA, DjfjdfofdjfjD, DocNITE, DoctorBeard, DogZeroX, dolgovmi, dontbetank, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, drakewill-CRL, Drayff, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Emisse, emmafornash, EmoGarbage404, Endecc, enumerate0, eoineoineoin, eris, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, Evgencheg, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, Fansana, Feluk6174, fenndragon, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, FluffiestFloof, FluffMe, FluidRock, flybik, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, FoxxoTrystan, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, GalacticChimp, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, ghost581x, Git-Nivrak, gituhabu, GlassEclipse, gluesniffler, GNF54, Golinth, GoodWheatley, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, h3half, Haltell, Hanzdegloker, Hardly3D, harikattar, Hebi, Henry, HerCoyote23, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, icekot8, icesickleone, Ichaie, iczero, iglov, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jjtParadox, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justin, justintether, JustinTrotter, justtne, k3yw, Kadeo64, KaiShibaa, kalane15, kalanosh, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, komunre, koteq, Krunklehorn, Kukutis96513, Kupie, kxvvv, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, Leander-0, leonardo-dabepis, leonsfriedrich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, Lomcastar, LordCarve, LordEclipse, LovelyLophi, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, michaelcu, micheel665, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, MLGTASTICa, Mnemotechnician, moderatelyaware, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, namespace-Memory, Nannek, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, not-gavnaed, notafet, notquitehadouken, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OCOtheOmega, OctoRocket, OldDanceJacket, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixelTheKermit, PJB3005, Plasmaguy, PlasmaRaptor, plinyvic, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, Rinkashikachi, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, router, RumiTiger, S1ss3l, Saakra, Salex08, sam, Samsterious, SaphireLattice, SapphicOverload, SaveliyM360, sBasalto, ScalyChimp, scrato, Scribbles0, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, ShadowCommander, shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, siyengar04, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, sleepyyapril, Slyfox333, snebl, sniperchance, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, Spatison, SpeltIncorrectyl, sphirai, SplinterGP, spoogemonster, sporekto, Squishy77, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, suraru, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, takemysoult, TaralGit, Taran, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, theOperand, TherapyGoth, TheShuEd, thevinter, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, tin-man-tim, Tirochora, Titian3, tk-a369, tkdrg, Tmanzxd, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, Tornado-Technology, tosatur, TotallyLemon, truepaintgit, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, unusualcrow, Uriende, UristMcDorf, user424242420, v0idRift, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, volotomite, volundr-, Voomra, Vordenburg, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, zelezniciar1, ZelteHonor, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zymem, zzylex From f95774b3ce4300012b8dbaa60829499ba6a68203 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sun, 17 Nov 2024 15:47:11 -0400 Subject: [PATCH 016/182] Mass Engine Update (#1220) # Description An attempt to do all engine updates in one go. Not focusing on content associated, only what's needed for it to run and any bug fixes. --- # TODO - [x] Fix bug where unbuckling resets you to lying down. - [x] Fix bug where you can no longer get up after lying down. - [x] See what else I broke. --- --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Co-authored-by: Tayrtahn Co-authored-by: VMSolidus Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Co-authored-by: Plykiya <58439124+Plykiya@users.noreply.github.com> Co-authored-by: plykiya Co-authored-by: Pieter-Jan Briers Co-authored-by: metalgearsloth Co-authored-by: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> --- Content.Client/Alerts/ClientAlertsSystem.cs | 2 +- Content.Client/Audio/AmbientSoundSystem.cs | 6 +- .../Audio/ClientGlobalSoundSystem.cs | 4 +- .../Audio/ContentAudioSystem.AmbientMusic.cs | 2 +- .../Audio/ContentAudioSystem.LobbyMusic.cs | 6 +- Content.Client/Buckle/BuckleSystem.cs | 66 +- .../Clickable/ClickableComponent.cs | 152 +- Content.Client/Clickable/ClickableSystem.cs | 168 ++ Content.Client/Entry/EntryPoint.cs | 3 - Content.Client/Explosion/ExplosionOverlay.cs | 3 +- Content.Client/Gameplay/GameplayStateBase.cs | 44 +- .../Guidebook/Controls/GuidebookWindow.xaml | 2 +- .../Guidebook/DocumentParsingManager.cs | 19 + Content.Client/Info/InfoSystem.cs | 25 - Content.Client/Info/RulesAndInfoWindow.cs | 14 +- Content.Client/Info/RulesControl.xaml | 24 +- Content.Client/Info/RulesControl.xaml.cs | 45 +- Content.Client/Info/RulesManager.cs | 105 - Content.Client/Info/RulesPopup.xaml | 10 +- Content.Client/Info/RulesPopup.xaml.cs | 2 - Content.Client/IoC/ClientContentIoC.cs | 40 +- .../Movement/Systems/WaddleAnimationSystem.cs | 4 +- .../Visualizers/DeepFriedVisualizer.cs | 3 +- .../Visualizers/DeepFryerVisualizer.cs | 4 +- Content.Client/Nyanotrasen/Mail/MailSystem.cs | 3 +- .../Outline/InteractionOutlineSystem.cs | 6 +- Content.Client/Revenant/RevenantSystem.cs | 3 +- Content.Client/Sandbox/SandboxSystem.cs | 2 +- Content.Client/Shuttles/FtlArrivalOverlay.cs | 82 + .../Systems/ShuttleSystem.EmergencyConsole.cs | 3 +- .../Shuttles/Systems/ShuttleSystem.cs | 21 + Content.Client/Traits/ParacusiaSystem.cs | 6 +- .../Systems/Alerts/AlertsUIController.cs | 3 +- .../Systems/Alerts/Widgets/AlertsUI.xaml.cs | 13 +- .../Systems/Info/InfoUIController.cs | 101 +- .../Systems/Storage/Controls/ItemGridPiece.cs | 4 +- Content.Client/Weather/WeatherSystem.cs | 14 +- .../Tests/Actions/ActionPvsDetachTest.cs | 22 +- .../Tests/Actions/ActionsAddedTest.cs | 2 +- .../Tests/Body/GibTest.cs | 2 +- .../Tests/Body/LegTest.cs | 8 +- .../Tests/Body/LungTest.cs | 8 +- .../Tests/Body/SaveLoadReparentTest.cs | 5 +- .../Tests/Buckle/BuckleDragTest.cs | 60 + .../Tests/Buckle/BuckleTest.Interact.cs | 108 + .../Tests/Buckle/BuckleTest.cs | 22 +- Content.IntegrationTests/Tests/CargoTest.cs | 19 +- .../Tests/Chemistry/DispenserTest.cs | 2 +- .../Chemistry/FixedPoint2SerializationTest.cs | 8 +- .../Tests/Chemistry/SolutionRoundingTest.cs | 4 +- .../Tests/Chemistry/SolutionSystemTests.cs | 12 +- .../Tests/Chemistry/TryAllReactionsTest.cs | 4 +- .../Tests/ClickableTest.cs | 4 +- .../Tests/Climbing/ClimbingTest.cs | 1 + .../Tests/Commands/PardonCommand.cs | 10 +- .../Tests/Commands/RejuvenateTest.cs | 6 +- .../Tests/Commands/RestartRoundTest.cs | 2 +- .../Interaction/ComputerContruction.cs | 10 +- .../Construction/Interaction/CraftingTests.cs | 56 +- .../Interaction/GrilleWindowConstruction.cs | 13 +- .../Interaction/MachineConstruction.cs | 7 +- .../Construction/Interaction/PanelScrewing.cs | 12 +- .../Interaction/PlaceableDeconstruction.cs | 4 +- .../Interaction/WallConstruction.cs | 9 +- .../Interaction/WindowConstruction.cs | 8 +- .../Construction/Interaction/WindowRepair.cs | 2 +- .../Tests/ContainerOcclusionTest.cs | 18 +- .../Tests/Damageable/DamageSpecifierTest.cs | 44 +- .../Tests/Damageable/DamageableTest.cs | 5 +- .../DestructibleDestructionTest.cs | 1 + .../Tests/DoAfter/DoAfterCancellationTests.cs | 39 +- .../Tests/Doors/AirlockTest.cs | 20 +- .../Tests/DummyIconTest.cs | 2 +- .../EncryptionKeys/RemoveEncryptionKeys.cs | 16 +- Content.IntegrationTests/Tests/EntityTest.cs | 12 +- .../Tests/Fluids/FluidSpillTest.cs | 27 +- .../Tests/Fluids/PuddleTest.cs | 14 +- .../Tests/FollowerSystemTest.cs | 5 +- .../Components/ActionBlocking/HandCuffTest.cs | 7 +- .../Components/Mobs/AlertsComponentTests.cs | 15 +- .../Tests/GameRules/AntagPreferenceTest.cs | 2 +- .../Tests/GameRules/FailAndStartPresetTest.cs | 24 +- .../Tests/GameRules/RuleMaxTimeRestartTest.cs | 10 +- .../Tests/Gravity/WeightlessStatusTests.cs | 8 +- .../Tests/GravityGridTest.cs | 30 +- .../Click/InteractionSystemTests.cs | 50 +- .../Tests/Interaction/InRangeUnobstructed.cs | 5 +- .../InteractionTest.EntitySpecifier.cs | 8 +- .../Interaction/InteractionTest.Helpers.cs | 403 +++- .../Tests/Interaction/InteractionTest.cs | 48 +- .../Tests/Linter/StaticFieldValidationTest.cs | 118 +- .../Tests/MachineBoardTest.cs | 11 +- .../Tests/Mapping/MappingTests.cs | 2 +- .../Tests/MaterialArbitrageTest.cs | 17 +- .../Tests/Minds/GhostTests.cs | 44 +- .../Tests/Minds/MindTests.Helpers.cs | 2 +- .../Tests/Movement/BuckleMovementTest.cs | 63 + .../{Interaction => Movement}/MovementTest.cs | 5 +- .../Tests/Movement/PullingTest.cs | 73 + .../{Slipping => Movement}/SlippingTest.cs | 6 +- .../Tests/Networking/PvsCommandTest.cs | 4 +- .../Networking/SimplePredictReconcileTest.cs | 9 +- .../Tests/Payload/ModularGrenadeTests.cs | 14 +- .../Tests/PostMapInitTest.cs | 33 +- .../Tests/Power/PowerTest.cs | 272 ++- .../Tests/PrototypeSaveTest.cs | 5 +- .../Tests/Puller/PullerTest.cs | 2 +- .../Tests/ResearchTest.cs | 4 +- Content.IntegrationTests/Tests/SalvageTest.cs | 4 +- .../Tests/SaveLoadMapTest.cs | 21 +- .../Tests/SaveLoadSaveTest.cs | 20 +- .../Tests/Serialization/SerializationTest.cs | 16 +- .../Tests/Shuttle/DockTest.cs | 5 +- Content.IntegrationTests/Tests/ShuttleTest.cs | 19 +- .../Tests/Sprite/ItemSpriteTest.cs | 10 +- .../Tests/{Minds => Station}/JobTests.cs | 0 .../Tests/Storage/StorageInteractionTest.cs | 75 + Content.IntegrationTests/Tests/Tag/TagTest.cs | 26 +- .../Tests/Tiles/TileConstructionTests.cs | 16 +- .../Tests/Toolshed/ToolshedTest.cs | 8 +- .../Tests/VendingMachineRestockTest.cs | 3 +- .../Tests/Weldable/WeldableTests.cs | 2 +- ...0606065731_RemoveLastReadRules.Designer.cs | 1909 +++++++++++++++++ .../20240606065731_RemoveLastReadRules.cs | 29 + .../PostgresServerDbContextModelSnapshot.cs | 4 - ...0606065717_RemoveLastReadRules.Designer.cs | 1834 ++++++++++++++++ .../20240606065717_RemoveLastReadRules.cs | 29 + .../SqliteServerDbContextModelSnapshot.cs | 4 - Content.Server.Database/Model.cs | 2 - .../Abilities/Mime/MimePowersComponent.cs | 8 + .../Abilities/Mime/MimePowersSystem.cs | 11 +- .../Administration/Managers/AdminManager.cs | 2 + Content.Server/Administration/ServerApi.cs | 2 +- .../Systems/AdminVerbSystem.Smites.cs | 6 +- Content.Server/Alert/Commands/ClearAlert.cs | 7 +- Content.Server/Alert/Commands/ShowAlert.cs | 7 +- Content.Server/Antag/AntagSelectionSystem.cs | 2 +- .../Components/AntagSelectionComponent.cs | 2 +- .../Antag/MobReplacementRuleSystem.cs | 11 +- .../Atmos/Components/BarotraumaComponent.cs | 10 + .../Atmos/Components/FlammableComponent.cs | 4 + .../Atmos/EntitySystems/BarotraumaSystem.cs | 11 +- .../Atmos/EntitySystems/FlammableSystem.cs | 4 +- .../Atmos/EntitySystems/GasAnalyzerSystem.cs | 6 +- .../EntitySystems/GasTileOverlaySystem.cs | 12 +- .../Unary/EntitySystems/GasPortableSystem.cs | 8 +- .../BarSign/Systems/BarSignSystem.cs | 2 +- Content.Server/Bed/BedSystem.cs | 49 +- .../Bed/Components/HealOnBuckleComponent.cs | 21 +- .../Bed/Components/HealOnBuckleHealing.cs | 1 + .../Bed/Components/StasisBedComponent.cs | 3 +- .../Body/Components/BloodstreamComponent.cs | 4 + .../Body/Components/InternalsComponent.cs | 6 + .../Body/Components/LungComponent.cs | 4 +- .../Body/Systems/BloodstreamSystem.cs | 7 +- .../Body/Systems/InternalsSystem.cs | 14 +- .../Body/Systems/MetabolizerSystem.cs | 6 + .../Body/Systems/RespiratorSystem.cs | 3 + .../Cargo/Systems/CargoSystem.Shuttle.cs | 42 +- Content.Server/Cargo/Systems/CargoSystem.cs | 3 + Content.Server/Carrying/CarryingSystem.cs | 4 +- Content.Server/Chat/Systems/ChatSystem.cs | 6 +- Content.Server/Chat/TelepathicChatSystem.cs | 10 +- .../Chemistry/ReagentEffects/AdjustAlert.cs | 8 +- Content.Server/Clothing/MagbootsSystem.cs | 4 +- .../Systems/ChameleonClothingSystem.cs | 4 +- .../Construction/PartExchangerSystem.cs | 7 +- Content.Server/Database/ServerDbBase.cs | 24 - Content.Server/Database/ServerDbManager.cs | 19 - Content.Server/Decals/DecalSystem.cs | 5 +- .../Behaviors/SpawnEntitiesBehavior.cs | 7 +- .../Destructible/Thresholds/MinMax.cs | 26 - .../Systems/NetworkConfiguratorSystem.cs | 2 +- .../Disposal/Tube/DisposalTubeSystem.cs | 16 +- .../Unit/EntitySystems/DisposalUnitSystem.cs | 11 +- Content.Server/Dragon/DragonRiftSystem.cs | 2 +- .../Ensnaring/EnsnareableSystem.Ensnaring.cs | 10 +- Content.Server/Ensnaring/EnsnareableSystem.cs | 2 +- Content.Server/Entry/EntryPoint.cs | 2 - .../GameTicking/GameTicker.GameRule.cs | 3 +- .../GameTicking/GameTicker.Spawning.cs | 15 +- .../GameTicking/Rules/DeathMatchRuleSystem.cs | 2 +- .../GameTicking/Rules/GameRulePrototype.cs | 15 - .../Rules/GameRuleSystem.Utility.cs | 2 +- .../GameTicking/Rules/GameRuleSystem.cs | 2 +- .../Rules/InactivityTimeRestartRuleSystem.cs | 2 +- .../Rules/KillCalloutRuleSystem.cs | 2 +- .../GameTicking/Rules/LoadMapRuleSystem.cs | 4 +- .../Rules/MaxTimeRestartRuleSystem.cs | 2 +- .../GameTicking/Rules/NukeopsRuleSystem.cs | 6 +- .../GameTicking/Rules/RespawnRuleSystem.cs | 3 +- .../Rules/RevolutionaryRuleSystem.cs | 2 +- .../RoundstartStationVariationRuleSystem.cs | 2 +- .../GameTicking/Rules/SandboxRuleSystem.cs | 2 +- .../GameTicking/Rules/SecretRuleSystem.cs | 2 +- .../GameTicking/Rules/SubGamemodesSystem.cs | 2 +- .../GameTicking/Rules/TraitorRuleSystem.cs | 6 +- .../GameTicking/Rules/ZombieRuleSystem.cs | 4 +- Content.Server/Geras/GerasComponent.cs | 2 +- Content.Server/Ghost/GhostSystem.cs | 28 +- Content.Server/Gravity/GravitySystem.cs | 4 +- .../Holiday/Christmas/RandomGiftSystem.cs | 2 +- Content.Server/HotPotato/HotPotatoSystem.cs | 4 +- .../HumanoidAppearanceSystem.Modifier.cs | 6 +- .../Systems/HumanoidAppearanceSystem.cs | 13 +- Content.Server/Info/InfoSystem.cs | 35 - Content.Server/Info/RulesManager.cs | 48 - Content.Server/Info/ShowRulesCommand.cs | 14 +- .../Instruments/SwappableInstrumentSystem.cs | 2 +- .../Actions/ChangeStandingStateAction.cs | 2 +- Content.Server/IoC/ServerContentIoC.cs | 2 - .../Kitchen/EntitySystems/MicrowaveSystem.cs | 8 +- .../EntitySystems/ReagentGrinderSystem.cs | 10 +- .../EntitySystems/RotatingLightSystem.cs | 2 +- Content.Server/Lightning/LightningSystem.cs | 22 +- .../Materials/MaterialReclaimerSystem.cs | 2 +- .../EntitySystems/MechGrabberSystem.cs | 10 +- Content.Server/Mech/Systems/MechSystem.cs | 10 +- Content.Server/Mood/MoodComponent.cs | 30 +- Content.Server/Mood/MoodSystem.cs | 4 +- .../Operators/Combat/UnbuckleOperator.cs | 7 +- Content.Server/NPC/Systems/NPCJukeSystem.cs | 10 +- .../Systems/NPCSteeringSystem.Obstacles.cs | 2 +- .../NPC/Systems/NPCSteeringSystem.cs | 1 + .../NameIdentifier/NameIdentifierSystem.cs | 2 +- .../Ninja/Systems/SpaceNinjaSystem.cs | 11 +- .../Commands/TileWindowsCommand.cs | 20 +- .../PlayTimeTrackingManager.Whitelist.cs | 2 +- .../StationEvents/Events/MidRoundAntagRule.cs | 2 +- Content.Server/Objectives/ObjectivesSystem.cs | 2 +- Content.Server/OfferItem/OfferItemSystem.cs | 4 +- .../Physics/Controllers/ConveyorController.cs | 4 +- Content.Server/Pinpointer/NavMapSystem.cs | 14 +- .../PowerMonitoringConsoleSystem.cs | 2 +- .../PowerCell/PowerCellSystem.Draw.cs | 4 +- Content.Server/Psionics/Dreams/DreamSystem.cs | 2 +- .../Research/Systems/ResearchSystem.Server.cs | 8 +- .../Systems/ResearchSystem.Technology.cs | 8 +- .../Revenant/EntitySystems/RevenantSystem.cs | 2 +- .../Salvage/SalvageSystem.Runner.cs | 8 +- Content.Server/Shadowkin/ShadowkinSystem.cs | 12 +- .../Shuttles/Systems/ShuttleConsoleSystem.cs | 6 +- .../Systems/ShuttleSystem.FasterThanLight.cs | 32 +- .../Shuttles/Systems/ShuttleSystem.cs | 2 + .../Charge/Systems/SiliconChargeSystem.cs | 12 +- Content.Server/Silicons/Borgs/BorgSystem.cs | 22 +- .../Components/EntityTableSpawnerComponent.cs | 30 + .../EntitySystems/ConditionalSpawnerSystem.cs | 31 +- Content.Server/Sprite/RandomSpriteSystem.cs | 2 +- .../BasicStationEventSchedulerSystem.cs | 4 +- .../Events/AlertLevelInterceptionRule.cs | 4 +- .../StationEvents/Events/AnomalySpawnRule.cs | 5 +- .../Events/BluespaceArtifactRule.cs | 3 +- .../Events/BluespaceLockerRule.cs | 2 +- .../StationEvents/Events/BreakerFlipRule.cs | 3 +- .../Events/BureaucraticErrorRule.cs | 2 +- .../StationEvents/Events/CargoGiftsRule.cs | 3 +- .../StationEvents/Events/ClericalErrorRule.cs | 2 +- .../StationEvents/Events/FalseAlarmRule.cs | 3 +- .../StationEvents/Events/FreeProberRule.cs | 15 +- .../StationEvents/Events/GasLeakRule.cs | 2 +- .../Events/GlimmerEventSystem.cs | 2 +- .../Events/GlimmerMobSpawnRule.cs | 2 +- .../Events/GlimmerRandomSentienceRule.cs | 2 +- .../Events/GlimmerRevenantSpawnRule.cs | 2 +- .../StationEvents/Events/ImmovableRodRule.cs | 4 +- .../StationEvents/Events/IonStormRule.cs | 2 +- .../StationEvents/Events/KudzuGrowthRule.cs | 2 +- .../Events/MassHallucinationsRule.cs | 2 +- .../StationEvents/Events/MassMindSwapRule.cs | 2 +- .../StationEvents/Events/MeteorSwarmRule.cs | 2 +- .../StationEvents/Events/NinjaSpawnRule.cs | 2 +- .../StationEvents/Events/NoosphericFryRule.cs | 13 +- .../Events/NoosphericStormRule.cs | 2 +- .../StationEvents/Events/NoosphericZapRule.cs | 2 +- .../Events/PirateRadioSpawnRule.cs | 2 +- .../Events/PowerGridCheckRule.cs | 2 +- .../Events/PsionicCatGotYourTongueRule.cs | 2 +- .../Events/RandomEntityStorageSpawnRule.cs | 2 +- .../Events/RandomSentienceRule.cs | 7 +- .../StationEvents/Events/RandomSpawnRule.cs | 2 +- .../StationEvents/Events/SolarFlareRule.cs | 2 +- .../Events/StationEventSystem.cs | 2 +- .../StationEvents/Events/VentClogRule.cs | 2 +- .../StationEvents/Events/VentCrittersRule.cs | 2 +- .../OscillatingStationEventScheduler.cs | 2 +- .../RampingStationEventSchedulerSystem.cs | 2 +- .../Components/TemperatureComponent.cs | 8 + .../Temperature/Systems/TemperatureSystem.cs | 14 +- .../Assorted/ForeignerTraitComponent.cs | 2 +- .../Traits/Assorted/ParacusiaSystem.cs | 6 +- .../Ranged/Systems/GunSystem.Battery.cs | 2 +- .../Ranged/Systems/GunSystem.Revolver.cs | 2 +- .../Systems/RandomInstrumentArtifactSystem.cs | 2 +- .../Zombies/ZombieSystem.Transform.cs | 2 +- .../Actions/Events/FabricateActionEvent.cs | 2 +- Content.Shared/Alert/AlertCategory.cs | 21 - .../Alert/AlertCategoryPrototype.cs | 14 + Content.Shared/Alert/AlertKey.cs | 12 +- Content.Shared/Alert/AlertOrderPrototype.cs | 35 +- Content.Shared/Alert/AlertPrototype.cs | 206 +- Content.Shared/Alert/AlertState.cs | 3 +- Content.Shared/Alert/AlertType.cs | 78 - Content.Shared/Alert/AlertsSystem.cs | 26 +- Content.Shared/Alert/ClickAlertEvent.cs | 7 +- .../Buckle/Components/BuckleComponent.cs | 113 +- .../Buckle/Components/StrapComponent.cs | 53 +- .../Buckle/SharedBuckleSystem.Buckle.cs | 571 +++-- .../Buckle/SharedBuckleSystem.Interaction.cs | 200 ++ .../Buckle/SharedBuckleSystem.Strap.cs | 257 +-- Content.Shared/Buckle/SharedBuckleSystem.cs | 49 +- Content.Shared/CCVar/CCVars.cs | 18 +- .../Chapel/SharedSacrificialAltarSystem.cs | 4 +- .../Climbing/Systems/ClimbSystem.cs | 6 +- .../SharedChameleonClothingSystem.cs | 2 +- .../Loadouts/Systems/LoadoutSystem.cs | 3 +- Content.Shared/Clothing/MagbootsComponent.cs | 4 + .../Pacification/PacificationSystem.cs | 5 +- .../Pacification/PacifiedComponent.cs | 4 + .../Containers/ContainerFillSystem.cs | 37 + .../EntityTableContainerFillComponent.cs | 13 + .../Containers/ItemSlot/ItemSlotsSystem.cs | 6 +- .../Cuffs/Components/CuffableComponent.cs | 5 + Content.Shared/Cuffs/SharedCuffableSystem.cs | 34 +- .../Damage/Components/StaminaComponent.cs | 7 +- .../Damage/Systems/StaminaSystem.cs | 17 +- Content.Shared/Decals/SharedDecalSystem.cs | 2 +- .../Destructible/Thresholds/MinMax.cs | 24 + Content.Shared/Dice/SharedDiceSystem.cs | 2 +- .../SharedElectrocutionSystem.cs | 2 +- Content.Shared/Emoting/EmoteSystem.cs | 2 +- .../Components/EnsnareableComponent.cs | 5 + .../EntitySelectors/AllSelector.cs | 25 + .../EntitySelectors/EntSelector.cs | 27 + .../EntitySelectors/EntityTableSelector.cs | 49 + .../EntitySelectors/GroupSelector.cs | 28 + .../EntitySelectors/NestedSelector.cs | 20 + .../EntitySelectors/NoneSelector.cs | 16 + .../EntityTable/EntityTablePrototype.cs | 18 + .../EntityTable/EntityTableSystem.cs | 20 + .../ValueSelector/ConstantNumberSelector.cs | 22 + .../ValueSelector/NumberSelector.cs | 16 + .../ValueSelector/RangeNumberSelector.cs | 19 + Content.Shared/Examine/ExamineSystemShared.cs | 30 +- .../OnTrigger/SmokeOnTriggerComponent.cs | 2 +- Content.Shared/Foldable/FoldableSystem.cs | 6 +- .../Friction/TileFrictionController.cs | 2 +- .../Components/ActiveGameRuleComponent.cs | 6 +- .../Components/DelayedStartRuleComponent.cs | 2 +- .../Components/EndedGameRuleComponent.cs | 6 +- .../Components/GameRuleComponent.cs | 5 +- .../Gravity/SharedFloatingVisualizerSystem.cs | 2 +- .../Gravity/SharedGravitySystem.Shake.cs | 4 +- Content.Shared/Gravity/SharedGravitySystem.cs | 15 +- .../EntitySystems/SharedHandsSystem.Drop.cs | 4 +- .../SharedHumanoidAppearanceSystem.cs | 24 +- .../Implants/SharedImplanterSystem.cs | 4 +- Content.Shared/Info/RulesMessages.cs | 25 + Content.Shared/Info/SharedInfo.cs | 28 - Content.Shared/Info/SharedRulesManager.cs | 60 - .../Instruments/SharedInstrumentSystem.cs | 4 +- .../Interaction/RotateToFaceSystem.cs | 32 +- .../Interaction/SharedInteractionSystem.cs | 2 +- .../Item/ItemToggle/SharedItemToggleSystem.cs | 19 +- .../Light/SharedHandheldLightSystem.cs | 2 +- .../Light/SharedRgbLightControllerSystem.cs | 6 +- .../Mech/EntitySystems/SharedMechSystem.cs | 6 +- .../Medical/CPR/Systems/CPRSystem.cs | 8 +- .../Mobs/Components/MobThresholdsComponent.cs | 28 +- .../Systems/MobStateSystem.Subscribers.cs | 18 +- .../Mobs/Systems/MobThresholdSystem.cs | 2 +- .../Pulling/Components/PullableComponent.cs | 4 + .../Pulling/Components/PullerComponent.cs | 6 +- .../Pulling/Events/PullStartedMessage.cs | 11 +- .../Pulling/Events/PullStoppedMessage.cs | 13 +- .../Movement/Pulling/Systems/PullingSystem.cs | 66 +- .../Movement/Systems/SharedMoverController.cs | 2 +- .../Systems/SpeedModifierContactsSystem.cs | 2 +- .../Ninja/Components/SpaceNinjaComponent.cs | 4 + .../Nutrition/Components/HungerComponent.cs | 14 +- .../Nutrition/Components/ThirstComponent.cs | 12 +- .../Nutrition/EntitySystems/HungerSystem.cs | 8 +- .../Nutrition/EntitySystems/ThirstSystem.cs | 2 +- .../OfferItem/OfferItemComponent.cs | 5 + Content.Shared/PAI/PAIComponent.cs | 2 +- .../Controllers/SharedConveyorController.cs | 4 +- .../Preferences/HumanoidCharacterProfile.cs | 36 +- Content.Shared/RCD/Systems/RCDAmmoSystem.cs | 4 +- .../Random/Helpers/SharedRandomExtensions.cs | 48 +- .../Revenant/Components/RevenantComponent.cs | 4 + .../Shadowkin/ShadowkinComponent.cs | 5 + Content.Shared/Showers/SharedShowerSystem.cs | 7 +- .../Shuttles/Components/FTLComponent.cs | 16 +- .../Components/FtlVisualizerComponent.cs | 23 + .../Shuttles/Components/PilotComponent.cs | 5 + .../Silicon/Systems/SharedSiliconSystem.cs | 4 +- .../Borgs/Components/BorgChassisComponent.cs | 10 +- .../EntitySystems/SharedEventHorizonSystem.cs | 8 +- Content.Shared/Stacks/SharedStackSystem.cs | 6 +- .../Standing/SharedLayingDownSystem.cs | 4 +- .../Standing/StandingStateSystem.cs | 6 +- .../StationRecordKeyStorageSystem.cs | 2 +- .../StatusEffect/StatusEffectPrototype.cs | 2 +- .../StatusEffect/StatusEffectsSystem.cs | 14 +- .../Storage/EntitySystems/BinSystem.cs | 6 +- Content.Shared/Stunnable/SharedStunSystem.cs | 24 +- .../SubFloor/SharedTrayScannerSystem.cs | 2 +- Content.Shared/Tag/TagSystem.cs | 54 +- .../Systems/LinkedEntitySystem.cs | 6 +- .../Assorted/Systems/LegsParalyzedSystem.cs | 27 +- .../Assorted/Systems/SharedSingerSystem.cs | 2 +- .../Marker/SharedDamageMarkerSystem.cs | 4 +- .../Weapons/Misc/SharedTetherGunSystem.cs | 22 +- .../Systems/RechargeBasicEntityAmmoSystem.cs | 8 +- .../Ranged/Systems/RechargeCycleAmmoSystem.cs | 2 +- .../Weapons/Ranged/Systems/SharedGunSystem.cs | 2 +- .../Weapons/Reflect/ReflectSystem.cs | 7 +- Content.Shared/Weather/SharedWeatherSystem.cs | 20 +- .../Shared/Alert/AlertManagerTests.cs | 17 +- .../Shared/Alert/AlertOrderPrototypeTests.cs | 26 +- .../Shared/Alert/AlertPrototypeTests.cs | 6 +- .../EinsteinEngines/default.toml | 3 +- Resources/Locale/en-US/guidebook/guides.ftl | 55 + Resources/Locale/en-US/info/rules.ftl | 3 + Resources/Prototypes/Actions/borgs.yml | 2 +- Resources/Prototypes/Actions/crit.yml | 6 +- Resources/Prototypes/Actions/diona.yml | 4 +- Resources/Prototypes/Actions/internals.yml | 2 +- Resources/Prototypes/Actions/mech.yml | 6 +- Resources/Prototypes/Actions/misc.yml | 2 +- Resources/Prototypes/Actions/ninja.yml | 12 +- Resources/Prototypes/Actions/polymorph.yml | 8 +- Resources/Prototypes/Actions/psionics.yml | 40 +- Resources/Prototypes/Actions/revenant.yml | 10 +- Resources/Prototypes/Actions/speech.yml | 2 +- Resources/Prototypes/Actions/spider.yml | 4 +- Resources/Prototypes/Actions/types.yml | 60 +- Resources/Prototypes/Alerts/categories.yml | 38 + .../Prototypes/Body/Organs/Animal/animal.yml | 12 +- .../Body/Organs/Animal/bloodsucker.yml | 6 +- .../Body/Organs/Animal/ruminant.yml | 2 +- .../Prototypes/Body/Organs/Friendstomach.yml | 2 +- Resources/Prototypes/Body/Organs/arachnid.yml | 4 +- Resources/Prototypes/Body/Organs/diona.yml | 12 +- Resources/Prototypes/Body/Organs/moth.yml | 2 +- .../Prototypes/Body/Organs/reptilian.yml | 2 +- Resources/Prototypes/Body/Parts/animal.yml | 8 +- Resources/Prototypes/Body/Parts/rat.yml | 2 +- Resources/Prototypes/Body/Parts/silicon.yml | 2 +- .../Fills/Backpacks/StarterGear/backpack.yml | 67 +- .../Fills/Backpacks/StarterGear/duffelbag.yml | 54 +- .../Fills/Backpacks/StarterGear/satchel.yml | 56 +- .../Prototypes/Catalog/Fills/Crates/fun.yml | 98 + .../Catalog/Fills/Crates/salvage.yml | 2 +- .../Prototypes/Catalog/Fills/Lockers/misc.yml | 461 ++-- .../DeltaV/Body/Organs/vulpkanin.yml | 2 +- .../Fills/Backpacks/StarterGear/backpack.yml | 6 +- .../Fills/Backpacks/StarterGear/duffelbag.yml | 6 +- .../Fills/Backpacks/StarterGear/satchel.yml | 6 +- .../Clothing/Head/hardsuit-helmets.yml | 8 +- .../Entities/Markers/Spawners/ghost_roles.yml | 2 +- .../DeltaV/Entities/Mobs/Player/human.yml | 2 +- .../Entities/Mobs/Species/vulpkanin.yml | 2 +- .../Objects/Misc/subdermal_implants.yml | 2 +- .../Entities/Objects/Specific/Mail/mail.yml | 120 +- .../Objects/Specific/Mail/mail_civilian.yml | 24 +- .../Objects/Specific/Mail/mail_command.yml | 6 +- .../Specific/Mail/mail_engineering.yml | 14 +- .../Specific/Mail/mail_epistemology.yml | 8 +- .../Objects/Specific/Mail/mail_medical.yml | 14 +- .../Objects/Specific/Mail/mail_security.yml | 14 +- .../Ammunition/Projectiles/replicated.yml | 2 +- .../Guns/Ammunition/Projectiles/special.yml | 14 +- .../Weapons/Guns/Projectiles/impacts.yml | 2 +- .../Prototypes/DeltaV/GameRules/events.yml | 8 +- .../Prototypes/DeltaV/GameRules/midround.yml | 2 +- .../DeltaV/Objectives/paradox_anomaly.yml | 6 +- .../Prototypes/DeltaV/Objectives/traitor.yml | 6 +- .../DeltaV/Roles/Jobs/NPC/syndicateNPCs.yml | 2 +- .../Prototypes/Entities/Clothing/Eyes/hud.yml | 2 +- .../Clothing/Head/base_clothinghead.yml | 8 +- .../Clothing/Head/hardsuit-helmets.yml | 2 +- .../Entities/Clothing/Head/hoods.yml | 56 +- .../Clothing/Masks/base_clothingmask.yml | 2 +- .../Entities/Clothing/Neck/misc.yml | 2 +- .../Clothing/OuterClothing/wintercoats.yml | 2 +- .../Entities/Clothing/Shoes/magboots.yml | 10 +- .../Entities/Clothing/Shoes/misc.yml | 2 +- .../Entities/Debugging/clicktest.yml | 2 +- .../Entities/Debugging/debug_sweps.yml | 2 +- .../Prototypes/Entities/Debugging/tippy.yml | 2 +- .../Entities/Effects/ambient_sounds.yml | 2 +- .../Entities/Effects/bluespace_flash.yml | 14 +- .../Entities/Effects/chemistry_effects.yml | 10 +- .../Entities/Effects/emp_effects.yml | 4 +- .../Entities/Effects/exclamation.yml | 4 +- .../Entities/Effects/explosion_light.yml | 2 +- .../Prototypes/Entities/Effects/hearts.yml | 2 +- .../Prototypes/Entities/Effects/lightning.yml | 12 +- .../Prototypes/Entities/Effects/mobspawn.yml | 2 +- .../Prototypes/Entities/Effects/radiation.yml | 2 +- Resources/Prototypes/Entities/Effects/rcd.yml | 22 +- .../Prototypes/Entities/Effects/shuttle.yml | 12 + .../Prototypes/Entities/Effects/sparks.yml | 4 +- .../Entities/Effects/weapon_arc.yml | 22 +- .../Markers/Spawners/Random/maintenance.yml | 792 ++++--- .../Entities/Markers/Spawners/corpses.yml | 2 +- .../Entities/Markers/Spawners/ghost_roles.yml | 6 +- .../Entities/Markers/clientsideclone.yml | 2 +- .../Entities/Markers/construction_ghost.yml | 2 +- .../Entities/Markers/drag_shadow.yml | 2 +- .../Entities/Markers/hover_entity.yml | 2 +- .../Entities/Mobs/Corpses/corpses.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/Rslimes.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 2 +- .../Entities/Mobs/NPCs/regalrat.yml | 14 +- .../Prototypes/Entities/Mobs/NPCs/slimes.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/xenopet.yml | 14 +- .../Entities/Mobs/Player/admin_ghost.yml | 14 +- .../Prototypes/Entities/Mobs/Player/diona.yml | 2 +- .../Entities/Mobs/Player/dragon.yml | 8 +- .../Entities/Mobs/Player/guardian.yml | 2 +- .../Prototypes/Entities/Mobs/Player/human.yml | 6 +- .../Prototypes/Entities/Mobs/Player/ipc.yml | 2 +- .../Entities/Mobs/Player/observer.yml | 12 +- .../Entities/Mobs/Player/replay_observer.yml | 2 +- .../Entities/Mobs/Player/silicon.yml | 2 +- .../Entities/Mobs/Species/arachne.yml | 2 +- .../Entities/Mobs/Species/arachnid.yml | 2 +- .../Entities/Mobs/Species/diona.yml | 2 +- .../Entities/Mobs/Species/dwarf.yml | 2 +- .../Entities/Mobs/Species/gingerbread.yml | 2 +- .../Entities/Mobs/Species/harpy.yml | 6 +- .../Entities/Mobs/Species/human.yml | 2 +- .../Prototypes/Entities/Mobs/Species/moth.yml | 2 +- .../Entities/Mobs/Species/reptilian.yml | 2 +- .../Entities/Mobs/Species/shadowkin.yml | 2 +- .../Entities/Mobs/Species/skeleton.yml | 2 +- .../Entities/Mobs/Species/slime.yml | 2 +- .../Prototypes/Entities/Mobs/Species/vox.yml | 2 +- .../Consumable/Food/Containers/box.yml | 2 +- .../Objects/Consumable/Food/snacks.yml | 60 +- .../Consumable/Smokeables/Vapes/vape.yml | 2 +- .../Entities/Objects/Decoration/present.yml | 2 +- .../Objects/Devices/chameleon_projector.yml | 6 +- .../Objects/Devices/translator_implants.yml | 22 +- .../Entities/Objects/Devices/translators.yml | 8 +- .../Objects/Fun/Tabletop/backgammon.yml | 2 +- .../Entities/Objects/Fun/Tabletop/base.yml | 2 +- .../Objects/Fun/Tabletop/checkers.yml | 2 +- .../Entities/Objects/Fun/Tabletop/chess.yml | 2 +- .../Entities/Objects/Fun/Tabletop/dnd.yml | 10 +- .../Entities/Objects/Fun/Tabletop/parchis.yml | 2 +- .../Prototypes/Entities/Objects/Fun/pai.yml | 4 +- .../Entities/Objects/Fun/spray_paint.yml | 2 +- .../Entities/Objects/Misc/buffering.yml | 2 +- .../Objects/Misc/fire_extinguisher.yml | 2 +- .../Entities/Objects/Misc/paper.yml | 2 +- .../Objects/Misc/subdermal_implants.yml | 30 +- .../Entities/Objects/Power/lights.yml | 2 +- .../Objects/Specific/Chapel/bibles.yml | 2 +- .../Objects/Specific/Forensics/forensics.yml | 2 +- .../Objects/Specific/Janitorial/soap.yml | 2 +- .../Objects/Specific/Janitorial/spray.yml | 4 +- .../Objects/Specific/Mail/Items/misc.yml | 6 +- .../Objects/Specific/Mail/base_mail_large.yml | 2 +- .../Specific/Robotics/borg_modules.yml | 2 +- .../Objects/Specific/chemical-containers.yml | 48 +- .../Entities/Objects/Tools/fulton.yml | 2 +- .../Entities/Objects/Tools/glowstick.yml | 12 +- .../Entities/Objects/Tools/jetpacks.yml | 4 +- .../Entities/Objects/Weapons/Bombs/funny.yml | 2 +- .../Ammunition/Projectiles/antimateriel.yml | 2 +- .../Ammunition/Projectiles/caseless_rifle.yml | 6 +- .../Guns/Ammunition/Projectiles/grenade.yml | 6 +- .../Ammunition/Projectiles/heavy_rifle.yml | 4 +- .../Ammunition/Projectiles/light_rifle.yml | 10 +- .../Guns/Ammunition/Projectiles/magnum.yml | 12 +- .../Guns/Ammunition/Projectiles/pistol.yml | 10 +- .../Guns/Ammunition/Projectiles/rifle.yml | 10 +- .../Guns/Ammunition/Projectiles/shotgun.yml | 22 +- .../Weapons/Guns/Projectiles/hitscan.yml | 2 +- .../Weapons/Guns/Projectiles/impacts.yml | 8 +- .../Weapons/Guns/Projectiles/magic.yml | 24 +- .../Weapons/Guns/Projectiles/meteors.yml | 2 +- .../Weapons/Guns/Projectiles/projectiles.yml | 80 +- .../Objects/Weapons/Throwable/grenades.yml | 4 +- .../Entities/Stations/nanotrasen.yml | 8 +- .../Entities/Stations/syndicate.yml | 2 +- .../Prototypes/Entities/Stations/test.yml | 2 +- .../Entities/Structures/Furniture/chairs.yml | 2 + .../Structures/Furniture/rollerbeds.yml | 7 + .../Structures/Piping/Disposal/pipes.yml | 2 +- .../Power/Generation/PA/particles.yml | 4 +- .../Structures/Power/Generation/ame.yml | 2 +- .../Power/Generation/generators.yml | 2 +- .../Structures/Power/Generation/solar.yml | 2 +- .../Structures/Power/Generation/teg.yml | 2 +- .../Entities/Structures/Power/apc.yml | 4 +- .../Entities/Structures/Power/substation.yml | 4 +- .../Storage/Canisters/gas_canisters.yml | 22 +- .../Storage/Crates/base_structurecrates.yml | 4 +- .../Structures/Wallmounts/Signs/bar_sign.yml | 2 +- .../Entities/Structures/Wallmounts/switch.yml | 4 +- .../Entities/Structures/Wallmounts/timer.yml | 2 +- .../Prototypes/Entities/Virtual/beam.yml | 2 +- .../Entities/Virtual/electrocution.yml | 6 +- .../Entities/Virtual/stripping_hidden.yml | 2 +- .../Prototypes/Entities/Virtual/tether.yml | 2 +- .../Entities/Virtual/virtual_item.yml | 2 +- .../Entities/World/Debris/asteroids.yml | 16 +- .../Entities/World/Debris/wrecks.yml | 6 +- Resources/Prototypes/Entities/World/chunk.yml | 2 +- .../Prototypes/GameRules/cargo_gifts.yml | 20 +- Resources/Prototypes/GameRules/events.yml | 60 +- Resources/Prototypes/GameRules/midround.yml | 8 +- Resources/Prototypes/GameRules/roundstart.yml | 34 +- .../Prototypes/GameRules/unknown_shuttles.yml | 10 +- Resources/Prototypes/GameRules/variation.yml | 16 +- Resources/Prototypes/Guidebook/rules.yml | 362 ++++ Resources/Prototypes/Guidebook/ss14.yml | 1 + Resources/Prototypes/Magic/event_spells.yml | 2 +- .../Prototypes/Magic/forcewall_spells.yml | 2 +- Resources/Prototypes/Magic/knock_spell.yml | 2 +- .../Prototypes/Magic/projectile_spells.yml | 6 +- Resources/Prototypes/Magic/rune_spells.yml | 8 +- Resources/Prototypes/Magic/smite_spells.yml | 2 +- Resources/Prototypes/Magic/spawn_spells.yml | 2 +- Resources/Prototypes/Magic/staves.yml | 2 +- .../Prototypes/Magic/teleport_spells.yml | 2 +- Resources/Prototypes/Magic/utility_spells.yml | 2 +- .../Prototypes/Nyanotrasen/Actions/types.yml | 4 +- .../Fills/Backpacks/StarterGear/backpack.yml | 2 +- .../Fills/Backpacks/StarterGear/duffelbag.yml | 2 +- .../Fills/Backpacks/StarterGear/satchel.yml | 2 +- .../Nyanotrasen/Catalog/Fills/Books/lore.yml | 2 +- .../Catalog/Fills/Paper/salvage_lore.yml | 8 +- .../Clothing/Head/hardsuit-helmets.yml | 6 +- .../Entities/Effects/lightning.yml | 2 +- .../Entities/Markers/Spawners/ghost_roles.yml | 6 +- .../Entities/Mobs/Player/special.yml | 2 +- .../Nyanotrasen/Entities/Mobs/Species/Oni.yml | 2 +- .../Entities/Mobs/Species/felinid.yml | 2 +- .../Objects/Consumable/Food/ration.yml | 2 +- .../Objects/Specific/Mail/base_mail.yml | 2 +- .../Weapons/Guns/Projectiles/shotgun.yml | 2 +- .../Nyanotrasen/GameRules/events.yml | 30 +- .../Nyanotrasen/Objectives/traitor.yml | 6 +- Resources/Prototypes/Objectives/dragon.yml | 4 +- Resources/Prototypes/Objectives/ninja.yml | 12 +- Resources/Prototypes/Objectives/thief.yml | 82 +- Resources/Prototypes/Objectives/traitor.yml | 42 +- .../Prototypes/Roles/Jobs/Civilian/mime.yml | 2 +- .../Guidebook/ServerRules/BanDurations.xml | 17 + .../Guidebook/ServerRules/BanTypes.xml | 11 + .../ServerRules/CoreRules/RuleC0.xml | 19 + .../ServerRules/CoreRules/RuleC10AHelp.xml | 29 + .../CoreRules/RuleC11AhelpThreats.xml | 20 + .../ServerRules/CoreRules/RuleC12MinAge.xml | 6 + .../CoreRules/RuleC13CharacterNames.xml | 66 + .../ServerRules/CoreRules/RuleC14ICinOOC.xml | 13 + .../ServerRules/CoreRules/RuleC1Admins.xml | 6 + .../ServerRules/CoreRules/RuleC2DBAD.xml | 7 + .../ServerRules/CoreRules/RuleC3NoHate.xml | 20 + .../ServerRules/CoreRules/RuleC4NoERP.xml | 23 + .../ServerRules/CoreRules/RuleC5Metacomms.xml | 18 + .../CoreRules/RuleC6BanEvasion.xml | 15 + .../CoreRules/RuleC7EnglishOnly.xml | 10 + .../ServerRules/CoreRules/RuleC8Exploits.xml | 12 + .../ServerRules/CoreRules/RuleC9Multikey.xml | 7 + .../Guidebook/ServerRules/DefaultRules.xml | 5 + .../Guidebook/ServerRules/README.txt | 5 + .../Guidebook/ServerRules/RoleTypes.xml | 21 + .../ServerRules/RoleplayRules/RuleR0.xml | 26 + .../RoleplayRules/RuleR10Subordination.xml | 26 + .../RuleR11-1AnimalEscalation.xml | 36 + .../RoleplayRules/RuleR11-2ConflictTypes.xml | 30 + .../RoleplayRules/RuleR11Escalation.xml | 67 + .../RoleplayRules/RuleR12RoleAbandonment.xml | 28 + .../RoleplayRules/RuleR13PerformRole.xml | 26 + .../RoleplayRules/RuleR14SecComStandard.xml | 37 + .../RoleplayRules/RuleR15SpaceLaw.xml | 21 + .../RoleplayRules/RuleR1Silicons.xml | 4 + .../RoleplayRules/RuleR2Familiars.xml | 6 + .../RoleplayRules/RuleR3NormalRP.xml | 20 + .../RoleplayRules/RuleR4Metashield.xml | 103 + .../RoleplayRules/RuleR5Arrivals.xml | 22 + .../RoleplayRules/RuleR6SelfAntag.xml | 22 + .../RoleplayRules/RuleR7RoundStalling.xml | 16 + .../RoleplayRules/RuleR8NoFriendlyAntag.xml | 22 + .../RoleplayRules/RuleR9MassSabotage.xml | 23 + .../ServerRules/SiliconRules/RuleS0.xml | 15 + .../SiliconRules/RuleS10OrderConflicts.xml | 9 + .../ServerRules/SiliconRules/RuleS1Laws.xml | 6 + .../SiliconRules/RuleS2LawPriority.xml | 9 + .../SiliconRules/RuleS3LawRedefinition.xml | 8 + .../SiliconRules/RuleS4RequestChanges.xml | 6 + .../SiliconRules/RuleS5FreeSilicon.xml | 4 + .../SiliconRules/RuleS6UnreasonableOrders.xml | 22 + .../SiliconRules/RuleS7Consistency.xml | 6 + .../RuleS8DefaultCrewDefinition.xml | 4 + .../RuleS9DefaultHarmDefinition.xml | 25 + .../SpaceLaw/SLControlledSubstances.xml | 14 + .../ServerRules/SpaceLaw/SLRestrictedGear.xml | 21 + .../SpaceLaw/SLRestrictedWeapons.xml | 11 + .../ServerRules/SpaceLaw/SpaceLaw.xml | 67 + .../ServerRules/WizDenCoreOnlyRules.xml | 26 + .../Guidebook/ServerRules/WizDenLRPRules.xml | 65 + .../Guidebook/ServerRules/WizDenMRPRules.xml | 65 + Resources/ServerInfo/Rules.txt | 60 - .../Effects/medi_holo.rsi/medi_holo.png | Bin 0 -> 1286 bytes .../Textures/Effects/medi_holo.rsi/meta.json | 26 + RobustToolbox | 2 +- 713 files changed, 11681 insertions(+), 4685 deletions(-) create mode 100644 Content.Client/Clickable/ClickableSystem.cs delete mode 100644 Content.Client/Info/InfoSystem.cs delete mode 100644 Content.Client/Info/RulesManager.cs create mode 100644 Content.Client/Shuttles/FtlArrivalOverlay.cs create mode 100644 Content.Client/Shuttles/Systems/ShuttleSystem.cs create mode 100644 Content.IntegrationTests/Tests/Buckle/BuckleDragTest.cs create mode 100644 Content.IntegrationTests/Tests/Buckle/BuckleTest.Interact.cs create mode 100644 Content.IntegrationTests/Tests/Movement/BuckleMovementTest.cs rename Content.IntegrationTests/Tests/{Interaction => Movement}/MovementTest.cs (93%) create mode 100644 Content.IntegrationTests/Tests/Movement/PullingTest.cs rename Content.IntegrationTests/Tests/{Slipping => Movement}/SlippingTest.cs (92%) rename Content.IntegrationTests/Tests/{Minds => Station}/JobTests.cs (100%) create mode 100644 Content.IntegrationTests/Tests/Storage/StorageInteractionTest.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20240606065731_RemoveLastReadRules.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20240606065731_RemoveLastReadRules.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240606065717_RemoveLastReadRules.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240606065717_RemoveLastReadRules.cs delete mode 100644 Content.Server/Destructible/Thresholds/MinMax.cs delete mode 100644 Content.Server/GameTicking/Rules/GameRulePrototype.cs delete mode 100644 Content.Server/Info/InfoSystem.cs delete mode 100644 Content.Server/Info/RulesManager.cs create mode 100644 Content.Server/Spawners/Components/EntityTableSpawnerComponent.cs delete mode 100644 Content.Shared/Alert/AlertCategory.cs create mode 100644 Content.Shared/Alert/AlertCategoryPrototype.cs delete mode 100644 Content.Shared/Alert/AlertType.cs create mode 100644 Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs create mode 100644 Content.Shared/Containers/EntityTableContainerFillComponent.cs create mode 100644 Content.Shared/Destructible/Thresholds/MinMax.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/AllSelector.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/EntSelector.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/EntityTableSelector.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/GroupSelector.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/NestedSelector.cs create mode 100644 Content.Shared/EntityTable/EntitySelectors/NoneSelector.cs create mode 100644 Content.Shared/EntityTable/EntityTablePrototype.cs create mode 100644 Content.Shared/EntityTable/EntityTableSystem.cs create mode 100644 Content.Shared/EntityTable/ValueSelector/ConstantNumberSelector.cs create mode 100644 Content.Shared/EntityTable/ValueSelector/NumberSelector.cs create mode 100644 Content.Shared/EntityTable/ValueSelector/RangeNumberSelector.cs rename {Content.Server => Content.Shared}/GameTicking/Components/ActiveGameRuleComponent.cs (67%) rename {Content.Server => Content.Shared}/GameTicking/Components/DelayedStartRuleComponent.cs (91%) rename {Content.Server => Content.Shared}/GameTicking/Components/EndedGameRuleComponent.cs (61%) rename {Content.Server => Content.Shared}/GameTicking/Components/GameRuleComponent.cs (92%) create mode 100644 Content.Shared/Info/RulesMessages.cs delete mode 100644 Content.Shared/Info/SharedInfo.cs delete mode 100644 Content.Shared/Info/SharedRulesManager.cs rename {Content.Server => Content.Shared}/Shuttles/Components/FTLComponent.cs (81%) create mode 100644 Content.Shared/Shuttles/Components/FtlVisualizerComponent.cs create mode 100644 Resources/Prototypes/Alerts/categories.yml create mode 100644 Resources/Prototypes/Entities/Effects/shuttle.yml create mode 100644 Resources/Prototypes/Guidebook/rules.yml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/BanDurations.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/BanTypes.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/README.txt create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleTypes.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml delete mode 100644 Resources/ServerInfo/Rules.txt create mode 100644 Resources/Textures/Effects/medi_holo.rsi/medi_holo.png create mode 100644 Resources/Textures/Effects/medi_holo.rsi/meta.json diff --git a/Content.Client/Alerts/ClientAlertsSystem.cs b/Content.Client/Alerts/ClientAlertsSystem.cs index 223bf7876ac..359c8957f9d 100644 --- a/Content.Client/Alerts/ClientAlertsSystem.cs +++ b/Content.Client/Alerts/ClientAlertsSystem.cs @@ -91,7 +91,7 @@ private void OnPlayerDetached(EntityUid uid, AlertsComponent component, LocalPla ClearAlerts?.Invoke(this, EventArgs.Empty); } - public void AlertClicked(AlertType alertType) + public void AlertClicked(ProtoId alertType) { RaiseNetworkEvent(new ClickAlertEvent(alertType)); } diff --git a/Content.Client/Audio/AmbientSoundSystem.cs b/Content.Client/Audio/AmbientSoundSystem.cs index 0206017baef..f4e755a013c 100644 --- a/Content.Client/Audio/AmbientSoundSystem.cs +++ b/Content.Client/Audio/AmbientSoundSystem.cs @@ -303,7 +303,11 @@ private void ProcessNearbyAmbience(TransformComponent playerXform) .WithMaxDistance(comp.Range); var stream = _audio.PlayEntity(comp.Sound, Filter.Local(), uid, false, audioParams); - _playingSounds[comp] = (stream.Value.Entity, comp.Sound, key); + + if (stream == null) + continue; + + _playingSounds[comp] = (stream!.Value.Entity, comp.Sound, key); playingCount++; if (_playingSounds.Count >= _maxAmbientCount) diff --git a/Content.Client/Audio/ClientGlobalSoundSystem.cs b/Content.Client/Audio/ClientGlobalSoundSystem.cs index 7c77865f741..6619285a96a 100644 --- a/Content.Client/Audio/ClientGlobalSoundSystem.cs +++ b/Content.Client/Audio/ClientGlobalSoundSystem.cs @@ -67,7 +67,7 @@ private void PlayAdminSound(AdminSoundEvent soundEvent) if(!_adminAudioEnabled) return; var stream = _audio.PlayGlobal(soundEvent.Filename, Filter.Local(), false, soundEvent.AudioParams); - _adminAudio.Add(stream.Value.Entity); + _adminAudio.Add(stream!.Value.Entity); } private void PlayStationEventMusic(StationEventMusicEvent soundEvent) @@ -76,7 +76,7 @@ private void PlayStationEventMusic(StationEventMusicEvent soundEvent) if(!_eventAudioEnabled || _eventAudio.ContainsKey(soundEvent.Type)) return; var stream = _audio.PlayGlobal(soundEvent.Filename, Filter.Local(), false, soundEvent.AudioParams); - _eventAudio.Add(soundEvent.Type, stream.Value.Entity); + _eventAudio.Add(soundEvent.Type, stream!.Value.Entity); } private void PlayGameSound(GameGlobalSoundEvent soundEvent) diff --git a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs index 84b787a4ec9..58cd026da49 100644 --- a/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs +++ b/Content.Client/Audio/ContentAudioSystem.AmbientMusic.cs @@ -210,7 +210,7 @@ private void UpdateAmbientMusic() track.ToString(), Filter.Local(), false, - AudioParams.Default.WithVolume(_musicProto.Sound.Params.Volume + _volumeSlider)); + AudioParams.Default.WithVolume(_musicProto.Sound.Params.Volume + _volumeSlider))!; _ambientMusicStream = strim.Value.Entity; diff --git a/Content.Client/Audio/ContentAudioSystem.LobbyMusic.cs b/Content.Client/Audio/ContentAudioSystem.LobbyMusic.cs index 92c5b7a4191..60b81b1c2df 100644 --- a/Content.Client/Audio/ContentAudioSystem.LobbyMusic.cs +++ b/Content.Client/Audio/ContentAudioSystem.LobbyMusic.cs @@ -185,7 +185,11 @@ private void PlaySoundtrack(string soundtrackFilename) false, _lobbySoundtrackParams.WithVolume(_lobbySoundtrackParams.Volume + SharedAudioSystem.GainToVolume(_configManager.GetCVar(CCVars.LobbyMusicVolume))) ); - if (playResult.Value.Entity == default) + + if (playResult == null) + return; + + if (playResult!.Value.Entity == default) { _sawmill.Warning( $"Tried to play lobby soundtrack '{{Filename}}' using {nameof(SharedAudioSystem)}.{nameof(SharedAudioSystem.PlayGlobal)} but it returned default value of EntityUid!", diff --git a/Content.Client/Buckle/BuckleSystem.cs b/Content.Client/Buckle/BuckleSystem.cs index d4614210d9f..4429996aca3 100644 --- a/Content.Client/Buckle/BuckleSystem.cs +++ b/Content.Client/Buckle/BuckleSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Buckle.Components; using Content.Shared.Rotation; using Robust.Client.GameObjects; +using Robust.Shared.GameStates; namespace Content.Client.Buckle; @@ -14,40 +15,63 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnBuckleAfterAutoHandleState); + SubscribeLocalEvent(OnHandleState); SubscribeLocalEvent(OnAppearanceChange); + SubscribeLocalEvent(OnStrapMoveEvent); } - private void OnBuckleAfterAutoHandleState(EntityUid uid, BuckleComponent component, ref AfterAutoHandleStateEvent args) + private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveEvent args) { - ActionBlocker.UpdateCanMove(uid); + // I'm moving this to the client-side system, but for the sake of posterity let's keep this comment: + // > This is mega cursed. Please somebody save me from Mr Buckle's wild ride - if (!TryComp(uid, out var ownerSprite)) + // The nice thing is its still true, this is quite cursed, though maybe not omega cursed anymore. + // This code is garbage, it doesn't work with rotated viewports. I need to finally get around to reworking + // sprite rendering for entity layers & direction dependent sorting. + + if (args.NewRotation == args.OldRotation) return; - // Adjust draw depth when the chair faces north so that the seat back is drawn over the player. - // Reset the draw depth when rotated in any other direction. - // TODO when ECSing, make this a visualizer - // This code was written before rotatable viewports were introduced, so hard-coding Direction.North - // and comparing it against LocalRotation now breaks this in other rotations. This is a FIXME, but - // better to get it working for most people before we look at a more permanent solution. - if (component is { Buckled: true, LastEntityBuckledTo: { } } && - Transform(component.LastEntityBuckledTo.Value).LocalRotation.GetCardinalDir() == Direction.North && - TryComp(component.LastEntityBuckledTo, out var buckledSprite)) - { - component.OriginalDrawDepth ??= ownerSprite.DrawDepth; - ownerSprite.DrawDepth = buckledSprite.DrawDepth - 1; + if (!TryComp(uid, out var strapSprite)) return; - } - // If here, we're not turning north and should restore the saved draw depth. - if (component.OriginalDrawDepth.HasValue) + var isNorth = Transform(uid).LocalRotation.GetCardinalDir() == Direction.North; + foreach (var buckledEntity in component.BuckledEntities) { - ownerSprite.DrawDepth = component.OriginalDrawDepth.Value; - component.OriginalDrawDepth = null; + if (!TryComp(buckledEntity, out var buckle)) + continue; + + if (!TryComp(buckledEntity, out var buckledSprite)) + continue; + + if (isNorth) + { + buckle.OriginalDrawDepth ??= buckledSprite.DrawDepth; + buckledSprite.DrawDepth = strapSprite.DrawDepth - 1; + } + else if (buckle.OriginalDrawDepth.HasValue) + { + buckledSprite.DrawDepth = buckle.OriginalDrawDepth.Value; + buckle.OriginalDrawDepth = null; + } } } + private void OnHandleState(Entity ent, ref ComponentHandleState args) + { + if (args.Current is not BuckleState state) + return; + + ent.Comp.DontCollide = state.DontCollide; + ent.Comp.BuckleTime = state.BuckleTime; + var strapUid = EnsureEntity(state.BuckledTo, ent); + + SetBuckledTo(ent, strapUid == null ? null : new (strapUid.Value, null)); + + var (uid, component) = ent; + + } + private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args) { if (!TryComp(uid, out var rotVisuals) diff --git a/Content.Client/Clickable/ClickableComponent.cs b/Content.Client/Clickable/ClickableComponent.cs index 6f75df46830..da81ed4c841 100644 --- a/Content.Client/Clickable/ClickableComponent.cs +++ b/Content.Client/Clickable/ClickableComponent.cs @@ -1,145 +1,17 @@ -using System.Numerics; -using Robust.Client.GameObjects; -using Robust.Client.Graphics; -using Robust.Client.Utility; -using Robust.Shared.Graphics; -using static Robust.Client.GameObjects.SpriteComponent; -using Direction = Robust.Shared.Maths.Direction; +namespace Content.Client.Clickable; -namespace Content.Client.Clickable +[RegisterComponent] +public sealed partial class ClickableComponent : Component { - [RegisterComponent] - public sealed partial class ClickableComponent : Component - { - [Dependency] private readonly IClickMapManager _clickMapManager = default!; - - [DataField("bounds")] public DirBoundData? Bounds; - - ///

- /// Used to check whether a click worked. Will first check if the click falls inside of some explicit bounding - /// boxes (see ). If that fails, attempts to use automatically generated click maps. - /// - /// The world position that was clicked. - /// - /// The draw depth for the sprite that captured the click. - /// - /// True if the click worked, false otherwise. - public bool CheckClick(SpriteComponent sprite, TransformComponent transform, EntityQuery xformQuery, Vector2 worldPos, IEye eye, out int drawDepth, out uint renderOrder, out float bottom) - { - if (!sprite.Visible) - { - drawDepth = default; - renderOrder = default; - bottom = default; - return false; - } - - drawDepth = sprite.DrawDepth; - renderOrder = sprite.RenderOrder; - var (spritePos, spriteRot) = transform.GetWorldPositionRotation(xformQuery); - var spriteBB = sprite.CalculateRotatedBoundingBox(spritePos, spriteRot, eye.Rotation); - bottom = Matrix3Helpers.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom; - - Matrix3x2.Invert(sprite.GetLocalMatrix(), out var invSpriteMatrix); - - // This should have been the rotation of the sprite relative to the screen, but this is not the case with no-rot or directional sprites. - var relativeRotation = (spriteRot + eye.Rotation).Reduced().FlipPositive(); - - Angle cardinalSnapping = sprite.SnapCardinals ? relativeRotation.GetCardinalDir().ToAngle() : Angle.Zero; - - // First we get `localPos`, the clicked location in the sprite-coordinate frame. - var entityXform = Matrix3Helpers.CreateInverseTransform(transform.WorldPosition, sprite.NoRotation ? -eye.Rotation : spriteRot - cardinalSnapping); - var localPos = Vector2.Transform(Vector2.Transform(worldPos, entityXform), invSpriteMatrix); - - // Check explicitly defined click-able bounds - if (CheckDirBound(sprite, relativeRotation, localPos)) - return true; - - // Next check each individual sprite layer using automatically computed click maps. - foreach (var spriteLayer in sprite.AllLayers) - { - if (!spriteLayer.Visible || spriteLayer is not Layer layer) - continue; - - // Check the layer's texture, if it has one - if (layer.Texture != null) - { - // Convert to image coordinates - var imagePos = (Vector2i) (localPos * EyeManager.PixelsPerMeter * new Vector2(1, -1) + layer.Texture.Size / 2f); - - if (_clickMapManager.IsOccluding(layer.Texture, imagePos)) - return true; - } - - // Either we weren't clicking on the texture, or there wasn't one. In which case: check the RSI next - if (layer.ActualRsi is not { } rsi || !rsi.TryGetState(layer.State, out var rsiState)) - continue; - - var dir = Layer.GetDirection(rsiState.RsiDirections, relativeRotation); + [DataField] public DirBoundData? Bounds; - // convert to layer-local coordinates - layer.GetLayerDrawMatrix(dir, out var matrix); - Matrix3x2.Invert(matrix, out var inverseMatrix); - var layerLocal = Vector2.Transform(localPos, inverseMatrix); - - // Convert to image coordinates - var layerImagePos = (Vector2i) (layerLocal * EyeManager.PixelsPerMeter * new Vector2(1, -1) + rsiState.Size / 2f); - - // Next, to get the right click map we need the "direction" of this layer that is actually being used to draw the sprite on the screen. - // This **can** differ from the dir defined before, but can also just be the same. - if (sprite.EnableDirectionOverride) - dir = sprite.DirectionOverride.Convert(rsiState.RsiDirections); - dir = dir.OffsetRsiDir(layer.DirOffset); - - if (_clickMapManager.IsOccluding(layer.ActualRsi!, layer.State, dir, layer.AnimationFrame, layerImagePos)) - return true; - } - - drawDepth = default; - renderOrder = default; - bottom = default; - return false; - } - - public bool CheckDirBound(SpriteComponent sprite, Angle relativeRotation, Vector2 localPos) - { - if (Bounds == null) - return false; - - // These explicit bounds only work for either 1 or 4 directional sprites. - - // This would be the orientation of a 4-directional sprite. - var direction = relativeRotation.GetCardinalDir(); - - var modLocalPos = sprite.NoRotation - ? localPos - : direction.ToAngle().RotateVec(localPos); - - // First, check the bounding box that is valid for all orientations - if (Bounds.All.Contains(modLocalPos)) - return true; - - // Next, get and check the appropriate bounding box for the current sprite orientation - var boundsForDir = (sprite.EnableDirectionOverride ? sprite.DirectionOverride : direction) switch - { - Direction.East => Bounds.East, - Direction.North => Bounds.North, - Direction.South => Bounds.South, - Direction.West => Bounds.West, - _ => throw new InvalidOperationException() - }; - - return boundsForDir.Contains(modLocalPos); - } - - [DataDefinition] - public sealed partial class DirBoundData - { - [DataField("all")] public Box2 All; - [DataField("north")] public Box2 North; - [DataField("south")] public Box2 South; - [DataField("east")] public Box2 East; - [DataField("west")] public Box2 West; - } + [DataDefinition] + public sealed partial class DirBoundData + { + [DataField] public Box2 All; + [DataField] public Box2 North; + [DataField] public Box2 South; + [DataField] public Box2 East; + [DataField] public Box2 West; } } diff --git a/Content.Client/Clickable/ClickableSystem.cs b/Content.Client/Clickable/ClickableSystem.cs new file mode 100644 index 00000000000..15d13df625c --- /dev/null +++ b/Content.Client/Clickable/ClickableSystem.cs @@ -0,0 +1,168 @@ +using System.Numerics; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Utility; +using Robust.Shared.Graphics; + +namespace Content.Client.Clickable; + +/// +/// Handles click detection for sprites. +/// +public sealed class ClickableSystem : EntitySystem +{ + [Dependency] private readonly IClickMapManager _clickMapManager = default!; + [Dependency] private readonly SharedTransformSystem _transforms = default!; + [Dependency] private readonly SpriteSystem _sprites = default!; + + private EntityQuery _clickableQuery; + private EntityQuery _xformQuery; + + public override void Initialize() + { + base.Initialize(); + _clickableQuery = GetEntityQuery(); + _xformQuery = GetEntityQuery(); + } + + /// + /// Used to check whether a click worked. Will first check if the click falls inside of some explicit bounding + /// boxes (see ). If that fails, attempts to use automatically generated click maps. + /// + /// The world position that was clicked. + /// + /// The draw depth for the sprite that captured the click. + /// + /// True if the click worked, false otherwise. + public bool CheckClick(Entity entity, Vector2 worldPos, IEye eye, out int drawDepth, out uint renderOrder, out float bottom) + { + if (!_clickableQuery.Resolve(entity.Owner, ref entity.Comp1, false)) + { + drawDepth = default; + renderOrder = default; + bottom = default; + return false; + } + + if (!_xformQuery.Resolve(entity.Owner, ref entity.Comp3)) + { + drawDepth = default; + renderOrder = default; + bottom = default; + return false; + } + + var sprite = entity.Comp2; + var transform = entity.Comp3; + + if (!sprite.Visible) + { + drawDepth = default; + renderOrder = default; + bottom = default; + return false; + } + + drawDepth = sprite.DrawDepth; + renderOrder = sprite.RenderOrder; + var (spritePos, spriteRot) = _transforms.GetWorldPositionRotation(transform); + var spriteBB = sprite.CalculateRotatedBoundingBox(spritePos, spriteRot, eye.Rotation); + bottom = Matrix3Helpers.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom; + + Matrix3x2.Invert(sprite.GetLocalMatrix(), out var invSpriteMatrix); + + // This should have been the rotation of the sprite relative to the screen, but this is not the case with no-rot or directional sprites. + var relativeRotation = (spriteRot + eye.Rotation).Reduced().FlipPositive(); + + var cardinalSnapping = sprite.SnapCardinals ? relativeRotation.GetCardinalDir().ToAngle() : Angle.Zero; + + // First we get `localPos`, the clicked location in the sprite-coordinate frame. + var entityXform = Matrix3Helpers.CreateInverseTransform(spritePos, sprite.NoRotation ? -eye.Rotation : spriteRot - cardinalSnapping); + var localPos = Vector2.Transform(Vector2.Transform(worldPos, entityXform), invSpriteMatrix); + + // Check explicitly defined click-able bounds + if (CheckDirBound((entity.Owner, entity.Comp1, entity.Comp2), relativeRotation, localPos)) + return true; + + // Next check each individual sprite layer using automatically computed click maps. + foreach (var spriteLayer in sprite.AllLayers) + { + if (spriteLayer is not SpriteComponent.Layer layer || !_sprites.IsVisible(layer)) + { + continue; + } + + // Check the layer's texture, if it has one + if (layer.Texture != null) + { + // Convert to image coordinates + var imagePos = (Vector2i) (localPos * EyeManager.PixelsPerMeter * new Vector2(1, -1) + layer.Texture.Size / 2f); + + if (_clickMapManager.IsOccluding(layer.Texture, imagePos)) + return true; + } + + // Either we weren't clicking on the texture, or there wasn't one. In which case: check the RSI next + if (layer.ActualRsi is not { } rsi || !rsi.TryGetState(layer.State, out var rsiState)) + continue; + + var dir = SpriteComponent.Layer.GetDirection(rsiState.RsiDirections, relativeRotation); + + // convert to layer-local coordinates + layer.GetLayerDrawMatrix(dir, out var matrix); + Matrix3x2.Invert(matrix, out var inverseMatrix); + var layerLocal = Vector2.Transform(localPos, inverseMatrix); + + // Convert to image coordinates + var layerImagePos = (Vector2i) (layerLocal * EyeManager.PixelsPerMeter * new Vector2(1, -1) + rsiState.Size / 2f); + + // Next, to get the right click map we need the "direction" of this layer that is actually being used to draw the sprite on the screen. + // This **can** differ from the dir defined before, but can also just be the same. + if (sprite.EnableDirectionOverride) + dir = sprite.DirectionOverride.Convert(rsiState.RsiDirections); + dir = dir.OffsetRsiDir(layer.DirOffset); + + if (_clickMapManager.IsOccluding(layer.ActualRsi!, layer.State, dir, layer.AnimationFrame, layerImagePos)) + return true; + } + + drawDepth = default; + renderOrder = default; + bottom = default; + return false; + } + + public bool CheckDirBound(Entity entity, Angle relativeRotation, Vector2 localPos) + { + var clickable = entity.Comp1; + var sprite = entity.Comp2; + + if (clickable.Bounds == null) + return false; + + // These explicit bounds only work for either 1 or 4 directional sprites. + + // This would be the orientation of a 4-directional sprite. + var direction = relativeRotation.GetCardinalDir(); + + var modLocalPos = sprite.NoRotation + ? localPos + : direction.ToAngle().RotateVec(localPos); + + // First, check the bounding box that is valid for all orientations + if (clickable.Bounds.All.Contains(modLocalPos)) + return true; + + // Next, get and check the appropriate bounding box for the current sprite orientation + var boundsForDir = (sprite.EnableDirectionOverride ? sprite.DirectionOverride : direction) switch + { + Direction.East => clickable.Bounds.East, + Direction.North => clickable.Bounds.North, + Direction.South => clickable.Bounds.South, + Direction.West => clickable.Bounds.West, + _ => throw new InvalidOperationException() + }; + + return boundsForDir.Contains(modLocalPos); + } +} diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 1ab213ae0a3..bf5f021be3d 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -8,7 +8,6 @@ using Content.Client.Fullscreen; using Content.Client.GhostKick; using Content.Client.Guidebook; -using Content.Client.Info; using Content.Client.Input; using Content.Client.IoC; using Content.Client.Launcher; @@ -54,7 +53,6 @@ public sealed class EntryPoint : GameClient [Dependency] private readonly IScreenshotHook _screenshotHook = default!; [Dependency] private readonly FullscreenHook _fullscreenHook = default!; [Dependency] private readonly ChangelogManager _changelogManager = default!; - [Dependency] private readonly RulesManager _rulesManager = default!; [Dependency] private readonly ViewportManager _viewportManager = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; [Dependency] private readonly IInputManager _inputManager = default!; @@ -131,7 +129,6 @@ public override void Init() _screenshotHook.Initialize(); _fullscreenHook.Initialize(); _changelogManager.Initialize(); - _rulesManager.Initialize(); _viewportManager.Initialize(); _ghostKick.Initialize(); _extendedDisconnectInformation.Initialize(); diff --git a/Content.Client/Explosion/ExplosionOverlay.cs b/Content.Client/Explosion/ExplosionOverlay.cs index 8cf7447a5d8..f8f8ae53623 100644 --- a/Content.Client/Explosion/ExplosionOverlay.cs +++ b/Content.Client/Explosion/ExplosionOverlay.cs @@ -29,6 +29,7 @@ public ExplosionOverlay() protected override void Draw(in OverlayDrawArgs args) { + var appearanceSystem = _entMan.System(); var drawHandle = args.WorldHandle; drawHandle.UseShader(_shader); @@ -41,7 +42,7 @@ protected override void Draw(in OverlayDrawArgs args) if (visuals.Epicenter.MapId != args.MapId) continue; - if (!appearance.TryGetData(ExplosionAppearanceData.Progress, out int index)) + if (!appearanceSystem.TryGetData(appearance.Owner, ExplosionAppearanceData.Progress, out int index)) continue; index = Math.Min(index, visuals.Intensity.Count - 1); diff --git a/Content.Client/Gameplay/GameplayStateBase.cs b/Content.Client/Gameplay/GameplayStateBase.cs index 6236cd8e958..315c053d935 100644 --- a/Content.Client/Gameplay/GameplayStateBase.cs +++ b/Content.Client/Gameplay/GameplayStateBase.cs @@ -2,6 +2,7 @@ using System.Numerics; using Content.Client.Clickable; using Content.Client.UserInterface; +using Content.Client.Viewport; using Content.Shared.Input; using Robust.Client.ComponentTrees; using Robust.Client.GameObjects; @@ -13,11 +14,13 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Console; +using Robust.Shared.Graphics; using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Timing; +using YamlDotNet.Serialization.TypeInspectors; namespace Content.Client.Gameplay { @@ -98,7 +101,15 @@ private bool HandleInspect(ICommonSession? session, EntityCoordinates coords, En public EntityUid? GetClickedEntity(MapCoordinates coordinates) { - var first = GetClickableEntities(coordinates).FirstOrDefault(); + return GetClickedEntity(coordinates, _eyeManager.CurrentEye); + } + + public EntityUid? GetClickedEntity(MapCoordinates coordinates, IEye? eye) + { + if (eye == null) + return null; + + var first = GetClickableEntities(coordinates, eye).FirstOrDefault(); return first.IsValid() ? first : null; } @@ -109,6 +120,20 @@ public IEnumerable GetClickableEntities(EntityCoordinates coordinates public IEnumerable GetClickableEntities(MapCoordinates coordinates) { + return GetClickableEntities(coordinates, _eyeManager.CurrentEye); + } + + public IEnumerable GetClickableEntities(MapCoordinates coordinates, IEye? eye) + { + /* + * TODO: + * 1. Stuff like MeleeWeaponSystem need an easy way to hook into viewport specific entities / entities under mouse + * 2. Cleanup the mess around InteractionOutlineSystem + below the keybind click detection. + */ + + if (eye == null) + return Array.Empty(); + // Find all the entities intersecting our click var spriteTree = _entityManager.EntitySysManager.GetEntitySystem(); var entities = spriteTree.QueryAabb(coordinates.MapId, Box2.CenteredAround(coordinates.Position, new Vector2(1, 1))); @@ -116,15 +141,12 @@ public IEnumerable GetClickableEntities(MapCoordinates coordinates) // Check the entities against whether or not we can click them var foundEntities = new List<(EntityUid, int, uint, float)>(entities.Count); var clickQuery = _entityManager.GetEntityQuery(); - var xformQuery = _entityManager.GetEntityQuery(); - - // TODO: Smelly - var eye = _eyeManager.CurrentEye; + var clickables = _entityManager.System(); foreach (var entity in entities) { if (clickQuery.TryGetComponent(entity.Uid, out var component) && - component.CheckClick(entity.Component, entity.Transform, xformQuery, coordinates.Position, eye, out var drawDepthClicked, out var renderOrder, out var bottom)) + clickables.CheckClick((entity.Uid, component, entity.Component, entity.Transform), coordinates.Position, eye, out var drawDepthClicked, out var renderOrder, out var bottom)) { foundEntities.Add((entity.Uid, drawDepthClicked, renderOrder, bottom)); } @@ -187,7 +209,15 @@ protected virtual void OnKeyBindStateChanged(ViewportBoundKeyEventArgs args) if (args.Viewport is IViewportControl vp) { var mousePosWorld = vp.PixelToMap(kArgs.PointerLocation.Position); - entityToClick = GetClickedEntity(mousePosWorld); + + if (vp is ScalingViewport svp) + { + entityToClick = GetClickedEntity(mousePosWorld, svp.Eye); + } + else + { + entityToClick = GetClickedEntity(mousePosWorld); + } coordinates = _mapManager.TryFindGridAt(mousePosWorld, out _, out var grid) ? grid.MapToGrid(mousePosWorld) : diff --git a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml index 8dbfde3c475..cc6cc6e82b0 100644 --- a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml +++ b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml @@ -18,7 +18,7 @@ Name="SearchBar" PlaceHolder="{Loc 'guidebook-filter-placeholder-text'}" HorizontalExpand="True" - Margin="0 5 10 5"> + Margin="0 5 10 5"> diff --git a/Content.Client/Guidebook/DocumentParsingManager.cs b/Content.Client/Guidebook/DocumentParsingManager.cs index b81866a6260..9c9e569eb41 100644 --- a/Content.Client/Guidebook/DocumentParsingManager.cs +++ b/Content.Client/Guidebook/DocumentParsingManager.cs @@ -2,6 +2,8 @@ using Content.Client.Guidebook.Richtext; using Pidgin; using Robust.Client.UserInterface; +using Robust.Shared.ContentPack; +using Robust.Shared.Prototypes; using Robust.Shared.Reflection; using Robust.Shared.Sandboxing; using static Pidgin.Parser; @@ -13,7 +15,9 @@ namespace Content.Client.Guidebook; ///
public sealed partial class DocumentParsingManager { + [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IReflectionManager _reflectionManager = default!; + [Dependency] private readonly IResourceManager _resourceManager = default!; [Dependency] private readonly ISandboxHelper _sandboxHelper = default!; private readonly Dictionary> _tagControlParsers = new(); @@ -37,6 +41,21 @@ public void Initialize() ControlParser = SkipWhitespaces.Then(_controlParser.Many()); } + public bool TryAddMarkup(Control control, ProtoId entryId, bool log = true) + { + if (!_prototype.TryIndex(entryId, out var entry)) + return false; + + using var file = _resourceManager.ContentFileReadText(entry.Text); + return TryAddMarkup(control, file.ReadToEnd(), log); + } + + public bool TryAddMarkup(Control control, GuideEntry entry, bool log = true) + { + using var file = _resourceManager.ContentFileReadText(entry.Text); + return TryAddMarkup(control, file.ReadToEnd(), log); + } + public bool TryAddMarkup(Control control, string text, bool log = true) { try diff --git a/Content.Client/Info/InfoSystem.cs b/Content.Client/Info/InfoSystem.cs deleted file mode 100644 index b6979949818..00000000000 --- a/Content.Client/Info/InfoSystem.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Content.Shared.Info; -using Robust.Shared.Log; - -namespace Content.Client.Info; - -public sealed class InfoSystem : EntitySystem -{ - public RulesMessage Rules = new RulesMessage("Server Rules", "The server did not send any rules."); - [Dependency] private readonly RulesManager _rules = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeNetworkEvent(OnRulesReceived); - Log.Debug("Requested server info."); - RaiseNetworkEvent(new RequestRulesMessage()); - } - - private void OnRulesReceived(RulesMessage message, EntitySessionEventArgs eventArgs) - { - Log.Debug("Received server rules."); - Rules = message; - _rules.UpdateRules(); - } -} diff --git a/Content.Client/Info/RulesAndInfoWindow.cs b/Content.Client/Info/RulesAndInfoWindow.cs index 7a763a1d6f4..b9131dcb3c0 100644 --- a/Content.Client/Info/RulesAndInfoWindow.cs +++ b/Content.Client/Info/RulesAndInfoWindow.cs @@ -1,10 +1,8 @@ using System.Numerics; using Content.Client.UserInterface.Systems.EscapeMenu; -using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Configuration; using Robust.Shared.ContentPack; namespace Content.Client.Info @@ -12,7 +10,6 @@ namespace Content.Client.Info public sealed class RulesAndInfoWindow : DefaultWindow { [Dependency] private readonly IResourceManager _resourceManager = default!; - [Dependency] private readonly RulesManager _rules = default!; public RulesAndInfoWindow() { @@ -22,8 +19,14 @@ public RulesAndInfoWindow() var rootContainer = new TabContainer(); - var rulesList = new Info(); - var tutorialList = new Info(); + var rulesList = new RulesControl + { + Margin = new Thickness(10) + }; + var tutorialList = new Info + { + Margin = new Thickness(10) + }; rootContainer.AddChild(rulesList); rootContainer.AddChild(tutorialList); @@ -31,7 +34,6 @@ public RulesAndInfoWindow() TabContainer.SetTabTitle(rulesList, Loc.GetString("ui-info-tab-rules")); TabContainer.SetTabTitle(tutorialList, Loc.GetString("ui-info-tab-tutorial")); - AddSection(rulesList, _rules.RulesSection()); PopulateTutorial(tutorialList); Contents.AddChild(rootContainer); diff --git a/Content.Client/Info/RulesControl.xaml b/Content.Client/Info/RulesControl.xaml index 3b247646884..04fa7191234 100644 --- a/Content.Client/Info/RulesControl.xaml +++ b/Content.Client/Info/RulesControl.xaml @@ -1,6 +1,18 @@ - + + + + + + +
/// /// - public void PushMessage(FormattedMessage message, int priority=0) + public void PushMessage(FormattedMessage message, int priority = 0) { if (message.Nodes.Count == 0) return; @@ -421,9 +421,9 @@ public void PushMessage(FormattedMessage message, int priority=0) ///
/// /// - public void PushMarkup(string markup, int priority=0) + public void PushMarkup(string markup, int priority = 0) { - PushMessage(FormattedMessage.FromMarkup(markup), priority); + PushMessage(FormattedMessage.FromMarkupPermissive(markup), priority); } /// @@ -433,7 +433,7 @@ public void PushMarkup(string markup, int priority=0) /// /// /// - public void PushText(string text, int priority=0) + public void PushText(string text, int priority = 0) { var msg = new FormattedMessage(); msg.AddText(text); @@ -469,9 +469,9 @@ public void AddMessage(FormattedMessage message, int priority = 0) ///
/// /// - public void AddMarkup(string markup, int priority=0) + public void AddMarkup(string markup, int priority = 0) { - AddMessage(FormattedMessage.FromMarkup(markup), priority); + AddMessage(FormattedMessage.FromMarkupPermissive(markup), priority); } /// @@ -481,7 +481,7 @@ public void AddMarkup(string markup, int priority=0) /// /// /// - public void AddText(string text, int priority=0) + public void AddText(string text, int priority = 0) { var msg = new FormattedMessage(); msg.AddText(text); diff --git a/Content.Shared/Explosion/Components/OnTrigger/SmokeOnTriggerComponent.cs b/Content.Shared/Explosion/Components/OnTrigger/SmokeOnTriggerComponent.cs index 80d65f4c2cd..1138e74af8f 100644 --- a/Content.Shared/Explosion/Components/OnTrigger/SmokeOnTriggerComponent.cs +++ b/Content.Shared/Explosion/Components/OnTrigger/SmokeOnTriggerComponent.cs @@ -29,7 +29,7 @@ public sealed partial class SmokeOnTriggerComponent : Component /// Defaults to smoke but you can use foam if you want. ///
[DataField, ViewVariables(VVAccess.ReadWrite)] - public ProtoId SmokePrototype = "Smoke"; + public EntProtoId SmokePrototype = "Smoke"; /// /// Solution to add to each smoke cloud. diff --git a/Content.Shared/Foldable/FoldableSystem.cs b/Content.Shared/Foldable/FoldableSystem.cs index 10baf8165b5..2a846f4f234 100644 --- a/Content.Shared/Foldable/FoldableSystem.cs +++ b/Content.Shared/Foldable/FoldableSystem.cs @@ -26,7 +26,7 @@ public override void Initialize() SubscribeLocalEvent(OnStoreThisAttempt); SubscribeLocalEvent(OnFoldableOpenAttempt); - SubscribeLocalEvent(OnBuckleAttempt); + SubscribeLocalEvent(OnStrapAttempt); } private void OnHandleState(EntityUid uid, FoldableComponent component, ref AfterAutoHandleStateEvent args) @@ -53,9 +53,9 @@ public void OnStoreThisAttempt(EntityUid uid, FoldableComponent comp, ref StoreM args.Cancelled = true; } - public void OnBuckleAttempt(EntityUid uid, FoldableComponent comp, ref BuckleAttemptEvent args) + public void OnStrapAttempt(EntityUid uid, FoldableComponent comp, ref StrapAttemptEvent args) { - if (args.Buckling && comp.IsFolded) + if (comp.IsFolded) args.Cancelled = true; } diff --git a/Content.Shared/Friction/TileFrictionController.cs b/Content.Shared/Friction/TileFrictionController.cs index 3583947ee36..930de07dab9 100644 --- a/Content.Shared/Friction/TileFrictionController.cs +++ b/Content.Shared/Friction/TileFrictionController.cs @@ -214,7 +214,7 @@ public void SetModifier(EntityUid entityUid, float value, TileFrictionModifierCo return; friction.Modifier = value; - Dirty(friction); + Dirty(entityUid, friction); } } } diff --git a/Content.Server/GameTicking/Components/ActiveGameRuleComponent.cs b/Content.Shared/GameTicking/Components/ActiveGameRuleComponent.cs similarity index 67% rename from Content.Server/GameTicking/Components/ActiveGameRuleComponent.cs rename to Content.Shared/GameTicking/Components/ActiveGameRuleComponent.cs index b9e6fa5d4b8..51bdd1c0371 100644 --- a/Content.Server/GameTicking/Components/ActiveGameRuleComponent.cs +++ b/Content.Shared/GameTicking/Components/ActiveGameRuleComponent.cs @@ -1,10 +1,8 @@ -namespace Content.Server.GameTicking.Components; +namespace Content.Shared.GameTicking.Components; /// /// Added to game rules before and removed before . /// Mutually exclusive with . /// [RegisterComponent] -public sealed partial class ActiveGameRuleComponent : Component -{ -} +public sealed partial class ActiveGameRuleComponent : Component; diff --git a/Content.Server/GameTicking/Components/DelayedStartRuleComponent.cs b/Content.Shared/GameTicking/Components/DelayedStartRuleComponent.cs similarity index 91% rename from Content.Server/GameTicking/Components/DelayedStartRuleComponent.cs rename to Content.Shared/GameTicking/Components/DelayedStartRuleComponent.cs index de4be83627d..9275da29b01 100644 --- a/Content.Server/GameTicking/Components/DelayedStartRuleComponent.cs +++ b/Content.Shared/GameTicking/Components/DelayedStartRuleComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Server.GameTicking.Components; +namespace Content.Shared.GameTicking.Components; /// /// Generic component used to track a gamerule that's start has been delayed. diff --git a/Content.Server/GameTicking/Components/EndedGameRuleComponent.cs b/Content.Shared/GameTicking/Components/EndedGameRuleComponent.cs similarity index 61% rename from Content.Server/GameTicking/Components/EndedGameRuleComponent.cs rename to Content.Shared/GameTicking/Components/EndedGameRuleComponent.cs index 3234bfff3a0..5e209ed78a2 100644 --- a/Content.Server/GameTicking/Components/EndedGameRuleComponent.cs +++ b/Content.Shared/GameTicking/Components/EndedGameRuleComponent.cs @@ -1,10 +1,8 @@ -namespace Content.Server.GameTicking.Components; +namespace Content.Shared.GameTicking.Components; /// /// Added to game rules before . /// Mutually exclusive with . /// [RegisterComponent] -public sealed partial class EndedGameRuleComponent : Component -{ -} +public sealed partial class EndedGameRuleComponent : Component; diff --git a/Content.Server/GameTicking/Components/GameRuleComponent.cs b/Content.Shared/GameTicking/Components/GameRuleComponent.cs similarity index 92% rename from Content.Server/GameTicking/Components/GameRuleComponent.cs rename to Content.Shared/GameTicking/Components/GameRuleComponent.cs index 1e6c3f0ab1d..28ea435f1b7 100644 --- a/Content.Server/GameTicking/Components/GameRuleComponent.cs +++ b/Content.Shared/GameTicking/Components/GameRuleComponent.cs @@ -1,7 +1,8 @@ -using Content.Server.Destructible.Thresholds; +using Content.Shared.Destructible.Thresholds; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Server.GameTicking.Components; +namespace Content.Shared.GameTicking.Components; /// /// Component attached to all gamerule entities. diff --git a/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs b/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs index 8fe9e00e7eb..9d8aa4f146e 100644 --- a/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs +++ b/Content.Shared/Gravity/SharedFloatingVisualizerSystem.cs @@ -35,7 +35,7 @@ protected bool CanFloat(EntityUid uid, FloatingVisualsComponent component, Trans return false; component.CanFloat = GravitySystem.IsWeightless(uid, xform: transform); - Dirty(component); + Dirty(uid, component); return component.CanFloat; } diff --git a/Content.Shared/Gravity/SharedGravitySystem.Shake.cs b/Content.Shared/Gravity/SharedGravitySystem.Shake.cs index ad2e0e3ad57..41cf616cc4b 100644 --- a/Content.Shared/Gravity/SharedGravitySystem.Shake.cs +++ b/Content.Shared/Gravity/SharedGravitySystem.Shake.cs @@ -24,7 +24,7 @@ private void UpdateShake() ShakeGrid(uid, gravity); comp.ShakeTimes--; comp.NextShake += TimeSpan.FromSeconds(ShakeCooldown); - Dirty(comp); + Dirty(uid, comp); } } } @@ -44,7 +44,7 @@ public void StartGridShake(EntityUid uid, GravityComponent? gravity = null) } shake.ShakeTimes = 10; - Dirty(shake); + Dirty(uid, shake); } protected virtual void ShakeGrid(EntityUid uid, GravityComponent? comp = null) {} diff --git a/Content.Shared/Gravity/SharedGravitySystem.cs b/Content.Shared/Gravity/SharedGravitySystem.cs index 55187bf14ac..59d75e453af 100644 --- a/Content.Shared/Gravity/SharedGravitySystem.cs +++ b/Content.Shared/Gravity/SharedGravitySystem.cs @@ -18,6 +18,9 @@ public abstract partial class SharedGravitySystem : EntitySystem [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly InventorySystem _inventory = default!; + [ValidatePrototypeId] + public const string WeightlessAlert = "Weightless"; + public bool IsWeightless(EntityUid uid, PhysicsComponent? body = null, TransformComponent? xform = null) { Resolve(uid, ref body, false); @@ -97,11 +100,11 @@ private void OnGravityChange(ref GravityChangedEvent ev) if (!ev.HasGravity) { - _alerts.ShowAlert(uid, AlertType.Weightless); + _alerts.ShowAlert(uid, WeightlessAlert); } else { - _alerts.ClearAlert(uid, AlertType.Weightless); + _alerts.ClearAlert(uid, WeightlessAlert); } } } @@ -110,11 +113,11 @@ private void OnAlertsSync(AlertSyncEvent ev) { if (IsWeightless(ev.Euid)) { - _alerts.ShowAlert(ev.Euid, AlertType.Weightless); + _alerts.ShowAlert(ev.Euid, WeightlessAlert); } else { - _alerts.ClearAlert(ev.Euid, AlertType.Weightless); + _alerts.ClearAlert(ev.Euid, WeightlessAlert); } } @@ -122,11 +125,11 @@ private void OnAlertsParentChange(EntityUid uid, AlertsComponent component, ref { if (IsWeightless(uid)) { - _alerts.ShowAlert(uid, AlertType.Weightless); + _alerts.ShowAlert(uid, WeightlessAlert); } else { - _alerts.ClearAlert(uid, AlertType.Weightless); + _alerts.ClearAlert(uid, WeightlessAlert); } } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index 7b169b5d0a6..4d7a0f377f5 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -128,7 +128,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat // TODO recursively check upwards for containers if (!isInContainer - || !ContainerSystem.TryGetContainingContainer(userXform.ParentUid, uid, out var container, skipExistCheck: true) + || !ContainerSystem.TryGetContainingContainer(userXform.ParentUid, uid, out var container) || !ContainerSystem.Insert((entity, itemXform), container)) TransformSystem.AttachToGridOrMap(entity, itemXform); return true; @@ -136,7 +136,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat var (itemPos, itemRot) = TransformSystem.GetWorldPositionRotation(entity); var origin = new MapCoordinates(itemPos, itemXform.MapID); - var target = targetDropLocation.Value.ToMap(EntityManager, TransformSystem); + var target = TransformSystem.ToMapCoordinates(targetDropLocation.Value); TransformSystem.SetWorldPositionRotation(entity, GetFinalDropCoordinates(uid, origin, target), itemRot); return true; } diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index f33c65b5915..bf3addea99e 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -157,7 +157,7 @@ public void SetLayersVisibility(EntityUid uid, IEnumerable SetLayerVisibility(uid, humanoid, layer, visible, permanent, ref dirty); if (dirty) - Dirty(humanoid); + Dirty(uid, humanoid); } protected virtual void SetLayerVisibility( @@ -203,7 +203,7 @@ public void SetSpecies(EntityUid uid, string species, bool sync = true, Humanoid humanoid.MarkingSet = new(oldMarkings, prototype.MarkingPoints, _markingManager, _proto); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -229,7 +229,7 @@ public virtual void SetSkinColor(EntityUid uid, Color skinColor, bool sync = tru humanoid.SkinColor = skinColor; if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -253,7 +253,7 @@ public void SetBaseLayerId(EntityUid uid, HumanoidVisualLayers layer, string? id humanoid.CustomBaseLayers[layer] = new(id); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -274,7 +274,7 @@ public void SetBaseLayerColor(EntityUid uid, HumanoidVisualLayers layer, Color? humanoid.CustomBaseLayers[layer] = new(null, color); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -295,7 +295,7 @@ public void SetSex(EntityUid uid, Sex sex, bool sync = true, HumanoidAppearanceC RaiseLocalEvent(uid, new SexChangedEvent(oldSex, sex)); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -314,7 +314,7 @@ public void SetHeight(EntityUid uid, float height, bool sync = true, HumanoidApp humanoid.Height = Math.Clamp(height, species.MinHeight, species.MaxHeight); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -333,7 +333,7 @@ public void SetWidth(EntityUid uid, float width, bool sync = true, HumanoidAppea humanoid.Width = Math.Clamp(width, species.MinWidth, species.MaxWidth); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -353,7 +353,7 @@ public void SetScale(EntityUid uid, Vector2 scale, bool sync = true, HumanoidApp humanoid.Width = Math.Clamp(scale.X, species.MinWidth, species.MaxWidth); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// @@ -440,7 +440,7 @@ public virtual void LoadProfile(EntityUid uid, HumanoidCharacterProfile profile, humanoid.LastProfileLoaded = profile; // DeltaV - let paradox anomaly be cloned - Dirty(humanoid); + Dirty(uid, humanoid); RaiseLocalEvent(uid, new ProfileLoadFinishedEvent()); } @@ -472,7 +472,7 @@ public void AddMarking(EntityUid uid, string marking, Color? color = null, bool humanoid.MarkingSet.AddBack(prototype.MarkingCategory, markingObject); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } private void EnsureDefaultMarkings(EntityUid uid, HumanoidAppearanceComponent? humanoid) @@ -502,7 +502,7 @@ public void AddMarking(EntityUid uid, string marking, IReadOnlyList color humanoid.MarkingSet.AddBack(prototype.MarkingCategory, markingObject); if (sync) - Dirty(humanoid); + Dirty(uid, humanoid); } /// diff --git a/Content.Shared/Implants/SharedImplanterSystem.cs b/Content.Shared/Implants/SharedImplanterSystem.cs index 36a31bac1d2..d78522b56cc 100644 --- a/Content.Shared/Implants/SharedImplanterSystem.cs +++ b/Content.Shared/Implants/SharedImplanterSystem.cs @@ -77,7 +77,7 @@ public void Implant(EntityUid user, EntityUid target, EntityUid implanter, Impla var ev = new TransferDnaEvent { Donor = target, Recipient = implanter }; RaiseLocalEvent(target, ref ev); - Dirty(component); + Dirty(implanter, component); } public bool CanImplant( @@ -156,7 +156,7 @@ public void Draw(EntityUid implanter, EntityUid user, EntityUid target, Implante if (component.CurrentMode == ImplanterToggleMode.Draw && !component.ImplantOnly && !permanentFound) ImplantMode(implanter, component); - Dirty(component); + Dirty(implanter, component); } } diff --git a/Content.Shared/Info/RulesMessages.cs b/Content.Shared/Info/RulesMessages.cs new file mode 100644 index 00000000000..9cb73c9aa86 --- /dev/null +++ b/Content.Shared/Info/RulesMessages.cs @@ -0,0 +1,25 @@ +using Lidgren.Network; +using Robust.Shared.Network; +using Robust.Shared.Serialization; + +namespace Content.Shared.Info; + +/// +/// Sent by the server to show the rules to the client instantly. +/// +public sealed class ShowRulesPopupMessage : NetMessage +{ + public override MsgGroups MsgGroup => MsgGroups.Command; + + public float PopupTime { get; set; } + + public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) + { + PopupTime = buffer.ReadFloat(); + } + + public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) + { + buffer.Write(PopupTime); + } +} diff --git a/Content.Shared/Info/SharedInfo.cs b/Content.Shared/Info/SharedInfo.cs deleted file mode 100644 index 4a0e688cf9a..00000000000 --- a/Content.Shared/Info/SharedInfo.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Info -{ - /// - /// A client request for server rules. - /// - [Serializable, NetSerializable] - public sealed class RequestRulesMessage : EntityEventArgs - { - } - - /// - /// A server response with server rules. - /// - [Serializable, NetSerializable] - public sealed class RulesMessage : EntityEventArgs - { - public string Title; - public string Text; - - public RulesMessage(string title, string rules) - { - Title = title; - Text = rules; - } - } -} diff --git a/Content.Shared/Info/SharedRulesManager.cs b/Content.Shared/Info/SharedRulesManager.cs deleted file mode 100644 index 932150d58ef..00000000000 --- a/Content.Shared/Info/SharedRulesManager.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Lidgren.Network; -using Robust.Shared.Network; -using Robust.Shared.Serialization; - -namespace Content.Shared.Info; - -public abstract class SharedRulesManager -{ - /// - /// Sent by the server to show the rules to the client instantly. - /// - public sealed class ShowRulesPopupMessage : NetMessage - { - public override MsgGroups MsgGroup => MsgGroups.Command; - - public float PopupTime { get; set; } - - public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) - { - PopupTime = buffer.ReadFloat(); - } - - public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) - { - buffer.Write(PopupTime); - } - } - - /// - /// Sent by the server when the client needs to display the rules on join. - /// - public sealed class ShouldShowRulesPopupMessage : NetMessage - { - public override MsgGroups MsgGroup => MsgGroups.Command; - - public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) - { - } - - public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) - { - } - } - - /// - /// Sent by the client when it has accepted the rules. - /// - public sealed class RulesAcceptedMessage : NetMessage - { - public override MsgGroups MsgGroup => MsgGroups.Command; - - public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) - { - } - - public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) - { - } - } -} diff --git a/Content.Shared/Instruments/SharedInstrumentSystem.cs b/Content.Shared/Instruments/SharedInstrumentSystem.cs index 87e3a69489c..23bcf67de0e 100644 --- a/Content.Shared/Instruments/SharedInstrumentSystem.cs +++ b/Content.Shared/Instruments/SharedInstrumentSystem.cs @@ -12,10 +12,10 @@ public virtual void EndRenderer(EntityUid uid, bool fromStateChange, SharedInstr { } - public void SetInstrumentProgram(SharedInstrumentComponent component, byte program, byte bank) + public void SetInstrumentProgram(EntityUid uid, SharedInstrumentComponent component, byte program, byte bank) { component.InstrumentBank = bank; component.InstrumentProgram = program; - Dirty(component); + Dirty(uid, component); } } diff --git a/Content.Shared/Interaction/RotateToFaceSystem.cs b/Content.Shared/Interaction/RotateToFaceSystem.cs index ed950240af6..fa213011ef1 100644 --- a/Content.Shared/Interaction/RotateToFaceSystem.cs +++ b/Content.Shared/Interaction/RotateToFaceSystem.cs @@ -1,7 +1,6 @@ using System.Numerics; using Content.Shared.ActionBlocker; using Content.Shared.Buckle.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.Rotatable; using JetBrains.Annotations; @@ -83,24 +82,21 @@ public bool TryFaceAngle(EntityUid user, Angle diffAngle, TransformComponent? xf if (!_actionBlockerSystem.CanChangeDirection(user)) return false; - if (EntityManager.TryGetComponent(user, out BuckleComponent? buckle) && buckle.Buckled) + if (TryComp(user, out BuckleComponent? buckle) && buckle.BuckledTo is {} strap) { - var suid = buckle.LastEntityBuckledTo; - if (suid != null) - { - // We're buckled to another object. Is that object rotatable? - if (TryComp(suid.Value, out var rotatable) && rotatable.RotateWhileAnchored) - { - // Note the assumption that even if unanchored, user can only do spinnychair with an "independent wheel". - // (Since the user being buckled to it holds it down with their weight.) - // This is logically equivalent to RotateWhileAnchored. - // Barstools and office chairs have independent wheels, while regular chairs don't. - _transform.SetWorldRotation(Transform(suid.Value), diffAngle); - return true; - } - } - - return false; + // What if a person is strapped to a borg? + // I'm pretty sure this would allow them to be partially ratatouille'd + + // We're buckled to another object. Is that object rotatable? + if (!TryComp(strap, out var rotatable) || !rotatable.RotateWhileAnchored) + return false; + + // Note the assumption that even if unanchored, user can only do spinnychair with an "independent wheel". + // (Since the user being buckled to it holds it down with their weight.) + // This is logically equivalent to RotateWhileAnchored. + // Barstools and office chairs have independent wheels, while regular chairs don't. + _transform.SetWorldRotation(Transform(strap), diffAngle); + return true; } // user is not buckled in; apply to their transform diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 4c22bcb14e4..1c4a697cc4e 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -1167,7 +1167,7 @@ public bool CanAccessViaStorage(EntityUid user, EntityUid target, BaseContainer return false; // we don't check if the user can access the storage entity itself. This should be handed by the UI system. - return _ui.IsUiOpen(target, StorageComponent.StorageUiKey.Key, user); + return _ui.IsUiOpen(container.Owner, StorageComponent.StorageUiKey.Key, user); } /// diff --git a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs index 523f67bac3d..fa23339223e 100644 --- a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs @@ -245,9 +245,22 @@ private void UpdateActiveSound(EntityUid uid, ItemToggleActiveSoundComponent act if (activeSound.ActiveSound != null && activeSound.PlayingStream == null) { if (args.Predicted) - activeSound.PlayingStream = _audio.PlayPredicted(activeSound.ActiveSound, uid, args.User, AudioParams.Default.WithLoop(true)).Value.Entity; - else - activeSound.PlayingStream = _audio.PlayPvs(activeSound.ActiveSound, uid, AudioParams.Default.WithLoop(true)).Value.Entity; + { + var playingStream = _audio.PlayPredicted(activeSound.ActiveSound, uid, args.User, AudioParams.Default.WithLoop(true)); + + if (playingStream == null) + return; + + activeSound.PlayingStream = playingStream!.Value.Entity; + } else + { + var playingStream = _audio.PlayPvs(activeSound.ActiveSound, uid, AudioParams.Default.WithLoop(true)); + + if (playingStream == null) + return; + + activeSound.PlayingStream = playingStream!.Value.Entity; + } } } else diff --git a/Content.Shared/Light/SharedHandheldLightSystem.cs b/Content.Shared/Light/SharedHandheldLightSystem.cs index 2fa15800a31..9bec37a3140 100644 --- a/Content.Shared/Light/SharedHandheldLightSystem.cs +++ b/Content.Shared/Light/SharedHandheldLightSystem.cs @@ -29,7 +29,7 @@ private void OnInit(EntityUid uid, HandheldLightComponent component, ComponentIn UpdateVisuals(uid, component); // Want to make sure client has latest data on level so battery displays properly. - Dirty(component); + Dirty(uid, component); } private void OnHandleState(EntityUid uid, HandheldLightComponent component, ref ComponentHandleState args) diff --git a/Content.Shared/Light/SharedRgbLightControllerSystem.cs b/Content.Shared/Light/SharedRgbLightControllerSystem.cs index 1bba91c5e7b..7d4928f5bc1 100644 --- a/Content.Shared/Light/SharedRgbLightControllerSystem.cs +++ b/Content.Shared/Light/SharedRgbLightControllerSystem.cs @@ -17,13 +17,13 @@ private void OnGetState(EntityUid uid, RgbLightControllerComponent component, re args.State = new RgbLightControllerState(component.CycleRate, component.Layers); } - public void SetLayers(EntityUid uid, List? layers, RgbLightControllerComponent? rgb = null) + public void SetLayers(EntityUid uid, List? layers, RgbLightControllerComponent? rgb = null) { if (!Resolve(uid, ref rgb)) return; rgb.Layers = layers; - Dirty(rgb); + Dirty(uid, rgb); } public void SetCycleRate(EntityUid uid, float rate, RgbLightControllerComponent? rgb = null) @@ -32,6 +32,6 @@ public void SetCycleRate(EntityUid uid, float rate, RgbLightControllerComponent? return; rgb.CycleRate = Math.Clamp(0.01f, rate, 1); // lets not give people seizures - Dirty(rgb); + Dirty(uid, rgb); } } diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index 7e44dea5078..b4f1ae9a268 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -194,7 +194,7 @@ public void CycleEquipment(EntityUid uid, MechComponent? component = null) if (_net.IsServer) _popup.PopupEntity(popupString, uid); - Dirty(component); + Dirty(uid, component); } /// @@ -278,7 +278,7 @@ public virtual bool TryChangeEnergy(EntityUid uid, FixedPoint2 delta, MechCompon return false; component.Energy = FixedPoint2.Clamp(component.Energy + delta, 0, component.MaxEnergy); - Dirty(component); + Dirty(uid, component); UpdateUserInterface(uid, component); return true; } @@ -306,7 +306,7 @@ public void SetIntegrity(EntityUid uid, FixedPoint2 value, MechComponent? compon UpdateAppearance(uid, component); } - Dirty(component); + Dirty(uid, component); UpdateUserInterface(uid, component); } diff --git a/Content.Shared/Medical/CPR/Systems/CPRSystem.cs b/Content.Shared/Medical/CPR/Systems/CPRSystem.cs index 799c0664a66..e050f1b4e1d 100644 --- a/Content.Shared/Medical/CPR/Systems/CPRSystem.cs +++ b/Content.Shared/Medical/CPR/Systems/CPRSystem.cs @@ -84,7 +84,13 @@ private void StartCPR(EntityUid performer, EntityUid target, CPRTrainingComponen { _popupSystem.PopupEntity(Loc.GetString("cpr-start-second-person", ("target", target)), target, performer, PopupType.Medium); _popupSystem.PopupEntity(Loc.GetString("cpr-start-second-person-patient", ("user", performer)), target, target, PopupType.Medium); - cprComponent.CPRPlayingStream = _audio.PlayPvs(cprComponent.CPRSound, performer).Value.Entity; + + var playingStream = _audio.PlayPvs(cprComponent.CPRSound, performer); + + if (playingStream == null) + return; + + cprComponent.CPRPlayingStream = _audio.PlayPvs(cprComponent.CPRSound, performer)!.Value.Entity; } _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, performer, cprComponent.DoAfterDuration, new CPRDoAfterEvent(), performer, target, performer) diff --git a/Content.Shared/Mobs/Components/MobThresholdsComponent.cs b/Content.Shared/Mobs/Components/MobThresholdsComponent.cs index e97d3672a21..0e37cf9b10e 100644 --- a/Content.Shared/Mobs/Components/MobThresholdsComponent.cs +++ b/Content.Shared/Mobs/Components/MobThresholdsComponent.cs @@ -2,6 +2,7 @@ using Content.Shared.FixedPoint; using Content.Shared.Mobs.Systems; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Mobs.Components; @@ -24,13 +25,16 @@ public sealed partial class MobThresholdsComponent : Component /// Used for alternate health alerts (silicons, for example) /// [DataField("stateAlertDict")] - public Dictionary StateAlertDict = new() + public Dictionary> StateAlertDict = new() { - {MobState.Alive, AlertType.HumanHealth}, - {MobState.Critical, AlertType.HumanCrit}, - {MobState.Dead, AlertType.HumanDead}, + {MobState.Alive, "HumanHealth"}, + {MobState.Critical, "HumanCrit"}, + {MobState.Dead, "HumanDead"}, }; + [DataField] + public ProtoId HealthAlertCategory = "Health"; + /// /// Whether or not this entity should display damage overlays (robots don't feel pain, black out etc.) /// @@ -53,19 +57,19 @@ public sealed class MobThresholdsComponentState : ComponentState public MobState CurrentThresholdState; - public Dictionary StateAlertDict = new() - { - {MobState.Alive, AlertType.HumanHealth}, - {MobState.Critical, AlertType.HumanCrit}, - {MobState.Dead, AlertType.HumanDead}, - }; + public Dictionary> StateAlertDict; public bool ShowOverlays; public bool AllowRevives; - public MobThresholdsComponentState(Dictionary unsortedThresholds, bool triggersAlerts, MobState currentThresholdState, - Dictionary stateAlertDict, bool showOverlays, bool allowRevives) + public MobThresholdsComponentState(Dictionary unsortedThresholds, + bool triggersAlerts, + MobState currentThresholdState, + Dictionary> stateAlertDict, + bool showOverlays, + bool allowRevives) { UnsortedThresholds = unsortedThresholds; TriggersAlerts = triggersAlerts; diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs index d9ef671afe2..2088bd4161e 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs @@ -1,4 +1,5 @@ using Content.Shared.Bed.Sleep; +using Content.Shared.Buckle.Components; using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage.ForceSay; using Content.Shared.Emoting; @@ -10,15 +11,12 @@ using Content.Shared.Mobs.Components; using Content.Shared.Movement.Events; using Content.Shared.Pointing; -using Content.Shared.Projectiles; using Content.Shared.Pulling.Events; using Content.Shared.Speech; using Content.Shared.Standing; using Content.Shared.Strip.Components; using Content.Shared.Throwing; -using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Physics.Components; -using Robust.Shared.Physics.Events; namespace Content.Shared.Mobs.Systems; @@ -46,6 +44,16 @@ private void SubscribeEvents() SubscribeLocalEvent(OnSleepAttempt); SubscribeLocalEvent(OnCombatModeShouldHandInteract); SubscribeLocalEvent(OnAttemptPacifiedAttack); + + SubscribeLocalEvent(OnUnbuckleAttempt); + } + + private void OnUnbuckleAttempt(Entity ent, ref UnbuckleAttemptEvent args) + { + // TODO is this necessary? + // Shouldn't the interaction have already been blocked by a general interaction check? + if (args.User == ent.Owner && IsIncapacitated(ent)) + args.Cancelled = true; } private void OnStateExitSubscribers(EntityUid target, MobStateComponent component, MobState state) @@ -90,12 +98,12 @@ private void OnStateEnteredSubscribers(EntityUid target, MobStateComponent compo _appearance.SetData(target, MobStateVisuals.State, MobState.Alive); break; case MobState.Critical: - _standing.Down(target, setDrawDepth: true); + _standing.Down(target); _appearance.SetData(target, MobStateVisuals.State, MobState.Critical); break; case MobState.Dead: EnsureComp(target); - _standing.Down(target, setDrawDepth: true); + _standing.Down(target); if (_standing.IsDown(target) && TryComp(target, out var physics)) { diff --git a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs index 59d9fb4c239..b11de9eac56 100644 --- a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs +++ b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs @@ -431,7 +431,7 @@ private void MobThresholdStartup(EntityUid target, MobThresholdsComponent thresh private void MobThresholdShutdown(EntityUid target, MobThresholdsComponent component, ComponentShutdown args) { if (component.TriggersAlerts) - _alerts.ClearAlertCategory(target, AlertCategory.Health); + _alerts.ClearAlertCategory(target, component.HealthAlertCategory); } private void OnUpdateMobState(EntityUid target, MobThresholdsComponent component, ref UpdateMobStateEvent args) diff --git a/Content.Shared/Movement/Pulling/Components/PullableComponent.cs b/Content.Shared/Movement/Pulling/Components/PullableComponent.cs index 01ce0efaae6..9d342fec3cf 100644 --- a/Content.Shared/Movement/Pulling/Components/PullableComponent.cs +++ b/Content.Shared/Movement/Pulling/Components/PullableComponent.cs @@ -1,4 +1,6 @@ +using Content.Shared.Alert; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; namespace Content.Shared.Movement.Pulling.Components; @@ -43,4 +45,6 @@ public sealed partial class PullableComponent : Component /// [DataField, AutoNetworkedField] public bool BeingActivelyPushed = false; + [DataField] + public ProtoId PulledAlert = "Pulled"; } diff --git a/Content.Shared/Movement/Pulling/Components/PullerComponent.cs b/Content.Shared/Movement/Pulling/Components/PullerComponent.cs index 648f06086ba..80a12be690a 100644 --- a/Content.Shared/Movement/Pulling/Components/PullerComponent.cs +++ b/Content.Shared/Movement/Pulling/Components/PullerComponent.cs @@ -1,6 +1,8 @@ -using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Alert; +using Content.Shared.Movement.Pulling.Systems; using Robust.Shared.GameStates; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared.Movement.Pulling.Components; @@ -64,4 +66,6 @@ public sealed partial class PullerComponent : Component /// [DataField] public float MaxPushRange = 2f; + [DataField] + public ProtoId PullingAlert = "Pulling"; } diff --git a/Content.Shared/Movement/Pulling/Events/PullStartedMessage.cs b/Content.Shared/Movement/Pulling/Events/PullStartedMessage.cs index 29460e1dfc1..c0775b4ce2d 100644 --- a/Content.Shared/Movement/Pulling/Events/PullStartedMessage.cs +++ b/Content.Shared/Movement/Pulling/Events/PullStartedMessage.cs @@ -1,9 +1,6 @@ namespace Content.Shared.Movement.Pulling.Events; -public sealed class PullStartedMessage : PullMessage -{ - public PullStartedMessage(EntityUid pullerUid, EntityUid pullableUid) : - base(pullerUid, pullableUid) - { - } -} +/// +/// Event raised directed BOTH at the puller and pulled entity when a pull starts. +/// +public sealed class PullStartedMessage(EntityUid pullerUid, EntityUid pullableUid) : PullMessage(pullerUid, pullableUid); diff --git a/Content.Shared/Movement/Pulling/Events/PullStoppedMessage.cs b/Content.Shared/Movement/Pulling/Events/PullStoppedMessage.cs index 47aa34562fb..6df4d174839 100644 --- a/Content.Shared/Movement/Pulling/Events/PullStoppedMessage.cs +++ b/Content.Shared/Movement/Pulling/Events/PullStoppedMessage.cs @@ -1,13 +1,6 @@ -using Robust.Shared.Physics.Components; - -namespace Content.Shared.Movement.Pulling.Events; +namespace Content.Shared.Movement.Pulling.Events; /// -/// Raised directed on both puller and pullable. +/// Event raised directed BOTH at the puller and pulled entity when a pull starts. /// -public sealed class PullStoppedMessage : PullMessage -{ - public PullStoppedMessage(EntityUid pullerUid, EntityUid pulledUid) : base(pullerUid, pulledUid) - { - } -} +public sealed class PullStoppedMessage(EntityUid pullerUid, EntityUid pulledUid) : PullMessage(pullerUid, pulledUid); diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index 4bf53c8dbdd..11a1d94b29b 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -1,4 +1,3 @@ -using System.Numerics; using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; using Content.Shared.Alert; @@ -17,7 +16,6 @@ using Content.Shared.Projectiles; using Content.Shared.Pulling.Events; using Content.Shared.Standing; -using Content.Shared.Throwing; using Content.Shared.Verbs; using Robust.Shared.Containers; using Robust.Shared.Input.Binding; @@ -29,6 +27,8 @@ using Robust.Shared.Physics.Systems; using Robust.Shared.Player; using Robust.Shared.Timing; +using Content.Shared.Throwing; +using System.Numerics; namespace Content.Shared.Movement.Pulling.Systems; @@ -73,11 +73,25 @@ public override void Initialize() SubscribeLocalEvent(OnRefreshMovespeed); SubscribeLocalEvent(OnDropHandItems); + SubscribeLocalEvent(OnBuckled); + SubscribeLocalEvent(OnGotBuckled); + CommandBinds.Builder .Bind(ContentKeyFunctions.MovePulledObject, new PointerInputCmdHandler(OnRequestMovePulledObject)) .Bind(ContentKeyFunctions.ReleasePulledObject, InputCmdHandler.FromDelegate(OnReleasePulledObject, handle: false)) .Register(); } + private void OnBuckled(Entity ent, ref StrappedEvent args) + { + // Prevent people from pulling the entity they are buckled to + if (ent.Comp.Puller == args.Buckle.Owner && !args.Buckle.Comp.PullStrap) + StopPulling(ent, ent); + } + + private void OnGotBuckled(Entity ent, ref BuckledEvent args) + { + StopPulling(ent, ent); + } public override void Shutdown() { @@ -174,7 +188,8 @@ private void OnDropHandItems(EntityUid uid, PullerComponent pullerComp, DropHand private void OnPullerContainerInsert(Entity ent, ref EntGotInsertedIntoContainerMessage args) { - if (ent.Comp.Pulling == null) return; + if (ent.Comp.Pulling == null) + return; if (!TryComp(ent.Comp.Pulling.Value, out PullableComponent? pulling)) return; @@ -307,8 +322,18 @@ private void OnJointRemoved(EntityUid uid, PullableComponent component, JointRem /// private void StopPulling(EntityUid pullableUid, PullableComponent pullableComp) { + if (pullableComp.Puller == null) + return; + if (!_timing.ApplyingState) { + // Joint shutdown + if (pullableComp.PullJointId != null) + { + _joints.RemoveJoint(pullableUid, pullableComp.PullJointId); + pullableComp.PullJointId = null; + } + if (TryComp(pullableUid, out var pullablePhysics)) { _physics.SetFixedRotation(pullableUid, pullableComp.PrevFixedRotation, body: pullablePhysics); @@ -325,7 +350,7 @@ private void StopPulling(EntityUid pullableUid, PullableComponent pullableComp) if (TryComp(oldPuller, out var pullerComp)) { var pullerUid = oldPuller.Value; - _alertsSystem.ClearAlert(pullerUid, AlertType.Pulling); + _alertsSystem.ClearAlert(pullerUid, pullerComp.PullingAlert); pullerComp.Pulling = null; Dirty(oldPuller.Value, pullerComp); @@ -339,7 +364,7 @@ private void StopPulling(EntityUid pullableUid, PullableComponent pullableComp) } - _alertsSystem.ClearAlert(pullableUid, AlertType.Pulled); + _alertsSystem.ClearAlert(pullableUid, pullableComp.PulledAlert); } public bool IsPulled(EntityUid uid, PullableComponent? component = null) @@ -440,15 +465,6 @@ public bool CanPull(EntityUid puller, EntityUid pullableUid, PullerComponent? pu return false; } - if (EntityManager.TryGetComponent(puller, out BuckleComponent? buckle)) - { - // Prevent people pulling the chair they're on, etc. - if (buckle is { PullStrap: false, Buckled: true } && (buckle.LastEntityBuckledTo == pullableUid)) - { - return false; - } - } - var getPulled = new BeingPulledAttemptEvent(puller, pullableUid); RaiseLocalEvent(pullableUid, getPulled, true); var startPull = new StartPullAttemptEvent(puller, pullableUid); @@ -492,11 +508,8 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, if (!CanPull(pullerUid, pullableUid)) return false; - if (!EntityManager.TryGetComponent(pullerUid, out var pullerPhysics) || - !EntityManager.TryGetComponent(pullableUid, out var pullablePhysics)) - { + if (!HasComp(pullerUid) || !TryComp(pullableUid, out PhysicsComponent? pullablePhysics)) return false; - } // Ensure that the puller is not currently pulling anything. if (TryComp(pullerComp.Pulling, out var oldPullable) @@ -540,7 +553,7 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, { // Joint startup var union = _physics.GetHardAABB(pullerUid).Union(_physics.GetHardAABB(pullableUid, body: pullablePhysics)); - var length = Math.Max((float) union.Size.X, (float) union.Size.Y) * 0.75f; + var length = Math.Max(union.Size.X, union.Size.Y) * 0.75f; var joint = _joints.CreateDistanceJoint(pullableUid, pullerUid, id: pullableComp.PullJointId); joint.CollideConnected = false; @@ -557,8 +570,8 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, // Messaging var message = new PullStartedMessage(pullerUid, pullableUid); - _alertsSystem.ShowAlert(pullerUid, AlertType.Pulling); - _alertsSystem.ShowAlert(pullableUid, AlertType.Pulled); + _alertsSystem.ShowAlert(pullerUid, pullerComp.PullingAlert); + _alertsSystem.ShowAlert(pullableUid, pullableComp.PulledAlert); RaiseLocalEvent(pullerUid, message); RaiseLocalEvent(pullableUid, message); @@ -584,17 +597,6 @@ public bool TryStopPull(EntityUid pullableUid, PullableComponent pullable, Entit if (msg.Cancelled) return false; - // Stop pulling confirmed! - if (!_timing.ApplyingState) - { - // Joint shutdown - if (pullable.PullJointId != null) - { - _joints.RemoveJoint(pullableUid, pullable.PullJointId); - pullable.PullJointId = null; - } - } - StopPulling(pullableUid, pullable); return true; } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 00afa3a4fb8..43a63068cf2 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -296,7 +296,7 @@ protected void HandleMobMovement( private void WalkingAlert(EntityUid player, InputMoverComponent component) { - _alerts.ShowAlert(player, AlertType.Walking, component.Sprinting ? (short) 1 : (short) 0); + _alerts.ShowAlert(player, component.WalkingAlert, component.Sprinting ? (short) 1 : (short) 0); } public void LerpRotation(EntityUid uid, InputMoverComponent mover, float frameTime) diff --git a/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs index f9f6b82bb18..400a675cd25 100644 --- a/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs +++ b/Content.Shared/Movement/Systems/SpeedModifierContactsSystem.cs @@ -58,7 +58,7 @@ public void ChangeModifiers(EntityUid uid, float walkSpeed, float sprintSpeed, S } component.WalkSpeedModifier = walkSpeed; component.SprintSpeedModifier = sprintSpeed; - Dirty(component); + Dirty(uid, component); _toUpdate.UnionWith(_physics.GetContactingEntities(uid)); } diff --git a/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs b/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs index 0f3bff265cb..91c816df5c9 100644 --- a/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs +++ b/Content.Shared/Ninja/Components/SpaceNinjaComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Alert; using Content.Shared.Ninja.Systems; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -53,4 +54,7 @@ public sealed partial class SpaceNinjaComponent : Component /// [DataField] public EntProtoId SpiderChargeObjective = "SpiderChargeObjective"; + + [DataField] + public ProtoId SuitPowerAlert = "SuitPower"; } diff --git a/Content.Shared/Nutrition/Components/HungerComponent.cs b/Content.Shared/Nutrition/Components/HungerComponent.cs index 9ac82ba283c..79d895ddae6 100644 --- a/Content.Shared/Nutrition/Components/HungerComponent.cs +++ b/Content.Shared/Nutrition/Components/HungerComponent.cs @@ -2,6 +2,7 @@ using Content.Shared.Damage; using Content.Shared.Nutrition.EntitySystems; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic; @@ -65,15 +66,18 @@ public sealed partial class HungerComponent : Component /// /// A dictionary relating hunger thresholds to corresponding alerts. /// - [DataField("hungerThresholdAlerts", customTypeSerializer: typeof(DictionarySerializer))] + [DataField("hungerThresholdAlerts")] [AutoNetworkedField] - public Dictionary HungerThresholdAlerts = new() + public Dictionary> HungerThresholdAlerts = new() { - { HungerThreshold.Peckish, AlertType.Peckish }, - { HungerThreshold.Starving, AlertType.Starving }, - { HungerThreshold.Dead, AlertType.Starving } + { HungerThreshold.Peckish, "Peckish" }, + { HungerThreshold.Starving, "Starving" }, + { HungerThreshold.Dead, "Starving" } }; + [DataField] + public ProtoId HungerAlertCategory = "Hunger"; + /// /// A dictionary relating HungerThreshold to how much they modify . /// diff --git a/Content.Shared/Nutrition/Components/ThirstComponent.cs b/Content.Shared/Nutrition/Components/ThirstComponent.cs index 731346401fd..f3ac881361f 100644 --- a/Content.Shared/Nutrition/Components/ThirstComponent.cs +++ b/Content.Shared/Nutrition/Components/ThirstComponent.cs @@ -1,6 +1,7 @@ using Content.Shared.Alert; using Content.Shared.Nutrition.EntitySystems; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared.Nutrition.Components; @@ -56,11 +57,14 @@ public sealed partial class ThirstComponent : Component {ThirstThreshold.Dead, 0.0f}, }; - public static readonly Dictionary ThirstThresholdAlertTypes = new() + [DataField] + public ProtoId ThirstyCategory = "Thirst"; + + public static readonly Dictionary> ThirstThresholdAlertTypes = new() { - {ThirstThreshold.Thirsty, AlertType.Thirsty}, - {ThirstThreshold.Parched, AlertType.Parched}, - {ThirstThreshold.Dead, AlertType.Parched}, + {ThirstThreshold.Thirsty, "Thirsty"}, + {ThirstThreshold.Parched, "Parched"}, + {ThirstThreshold.Dead, "Parched"}, }; } diff --git a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs index e6d82553336..6535390d646 100644 --- a/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/HungerSystem.cs @@ -67,7 +67,7 @@ private void OnMapInit(EntityUid uid, HungerComponent component, MapInitEvent ar private void OnShutdown(EntityUid uid, HungerComponent component, ComponentShutdown args) { - _alerts.ClearAlertCategory(uid, AlertCategory.Hunger); + _alerts.ClearAlertCategory(uid, component.HungerAlertCategory); } private void OnRefreshMovespeed(EntityUid uid, HungerComponent component, RefreshMovementSpeedModifiersEvent args) @@ -112,7 +112,7 @@ public void SetHunger(EntityUid uid, float amount, HungerComponent? component = component.Thresholds[HungerThreshold.Dead], component.Thresholds[HungerThreshold.Overfed]); UpdateCurrentThreshold(uid, component); - Dirty(component); + Dirty(uid, component); } private void UpdateCurrentThreshold(EntityUid uid, HungerComponent? component = null) @@ -125,7 +125,7 @@ private void UpdateCurrentThreshold(EntityUid uid, HungerComponent? component = return; component.CurrentThreshold = calculatedHungerThreshold; DoHungerThresholdEffects(uid, component); - Dirty(component); + Dirty(uid, component); } private void DoHungerThresholdEffects(EntityUid uid, HungerComponent? component = null, bool force = false) @@ -153,7 +153,7 @@ private void DoHungerThresholdEffects(EntityUid uid, HungerComponent? component } else { - _alerts.ClearAlertCategory(uid, AlertCategory.Hunger); + _alerts.ClearAlertCategory(uid, component.HungerAlertCategory); } if (component.HungerThresholdDecayModifiers.TryGetValue(component.CurrentThreshold, out var modifier)) diff --git a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs index a068b19104c..4ff49e795c2 100644 --- a/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs @@ -171,7 +171,7 @@ private void UpdateEffects(EntityUid uid, ThirstComponent component) } else { - _alerts.ClearAlertCategory(uid, AlertCategory.Thirst); + _alerts.ClearAlertCategory(uid, component.ThirstyCategory); } var ev = new MoodEffectEvent("Thirst" + component.CurrentThirstThreshold); diff --git a/Content.Shared/OfferItem/OfferItemComponent.cs b/Content.Shared/OfferItem/OfferItemComponent.cs index eb4d84932e5..f9f55291ddc 100644 --- a/Content.Shared/OfferItem/OfferItemComponent.cs +++ b/Content.Shared/OfferItem/OfferItemComponent.cs @@ -1,4 +1,6 @@ using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared.Alert; namespace Content.Shared.OfferItem; @@ -23,4 +25,7 @@ public sealed partial class OfferItemComponent : Component [DataField] public float MaxOfferDistance = 2f; + + [DataField] + public ProtoId OfferAlert = "Offer"; } diff --git a/Content.Shared/PAI/PAIComponent.cs b/Content.Shared/PAI/PAIComponent.cs index b4e4c927354..9d5be302758 100644 --- a/Content.Shared/PAI/PAIComponent.cs +++ b/Content.Shared/PAI/PAIComponent.cs @@ -31,7 +31,7 @@ public sealed partial class PAIComponent : Component public EntityUid? MidiAction; [DataField] - public ProtoId MapActionId = "ActionPAIOpenMap"; + public EntProtoId MapActionId = "ActionPAIOpenMap"; [DataField, AutoNetworkedField] public EntityUid? MapAction; diff --git a/Content.Shared/Physics/Controllers/SharedConveyorController.cs b/Content.Shared/Physics/Controllers/SharedConveyorController.cs index c9ec77ba1c9..e3b22d84319 100644 --- a/Content.Shared/Physics/Controllers/SharedConveyorController.cs +++ b/Content.Shared/Physics/Controllers/SharedConveyorController.cs @@ -101,10 +101,10 @@ private void Convey(EntityUid uid, ConveyorComponent comp, EntityQuery new(this) { Sex = sex }; public HumanoidCharacterProfile WithGender(Gender gender) => new(this) { Gender = gender }; public HumanoidCharacterProfile WithSpecies(string species) => new(this) { Species = species }; - public HumanoidCharacterProfile WithCustomSpeciesName(string customspeciename) => new(this) { Customspeciename = customspeciename}; + public HumanoidCharacterProfile WithCustomSpeciesName(string customspeciename) => new(this) { Customspeciename = customspeciename }; public HumanoidCharacterProfile WithHeight(float height) => new(this) { Height = height }; public HumanoidCharacterProfile WithWidth(float width) => new(this) { Width = width }; @@ -368,7 +368,9 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection // ensure the species can be that sex and their age fits the founds if (!speciesPrototype.Sexes.Contains(sex)) + { sex = speciesPrototype.Sexes[0]; + } var age = Math.Clamp(Age, speciesPrototype.MinAge, speciesPrototype.MaxAge); @@ -383,16 +385,24 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection string name; if (string.IsNullOrEmpty(Name)) + { name = GetName(Species, gender); + } else if (Name.Length > MaxNameLength) + { name = Name[..MaxNameLength]; + } else + { name = Name; + } name = name.Trim(); if (configManager.GetCVar(CCVars.RestrictedNames)) + { name = RestrictedNameRegex.Replace(name, string.Empty); + } if (configManager.GetCVar(CCVars.ICNameCase)) { @@ -405,17 +415,23 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection || string.IsNullOrEmpty(Customspeciename) ? "" : Customspeciename.Length > MaxNameLength - ? FormattedMessage.RemoveMarkup(Customspeciename)[..MaxNameLength] - : FormattedMessage.RemoveMarkup(Customspeciename); + ? FormattedMessage.RemoveMarkupPermissive(Customspeciename)[..MaxNameLength] + : FormattedMessage.RemoveMarkupPermissive(Customspeciename); if (string.IsNullOrEmpty(name)) + { name = GetName(Species, gender); + } string flavortext; if (FlavorText.Length > MaxDescLength) - flavortext = FormattedMessage.RemoveMarkup(FlavorText)[..MaxDescLength]; + { + flavortext = FormattedMessage.RemoveMarkupPermissive(FlavorText)[..MaxDescLength]; + } else - flavortext = FormattedMessage.RemoveMarkup(FlavorText); + { + flavortext = FormattedMessage.RemoveMarkupPermissive(FlavorText); + } var appearance = HumanoidCharacterAppearance.EnsureValid(Appearance, Species, Sex); @@ -468,7 +484,9 @@ public void EnsureValid(ICommonSession session, IDependencyCollection collection _jobPriorities.Clear(); foreach (var (job, priority) in priorities) + { _jobPriorities.Add(job, priority); + } PreferenceUnavailable = prefsUnavailableMode; @@ -513,11 +531,11 @@ public override int GetHashCode() hashCode.Add(FlavorText); hashCode.Add(Species); hashCode.Add(Age); - hashCode.Add((int)Sex); - hashCode.Add((int)Gender); + hashCode.Add((int) Sex); + hashCode.Add((int) Gender); hashCode.Add(Appearance); - hashCode.Add((int)SpawnPriority); - hashCode.Add((int)PreferenceUnavailable); + hashCode.Add((int) SpawnPriority); + hashCode.Add((int) PreferenceUnavailable); hashCode.Add(Customspeciename); return hashCode.ToHashCode(); } diff --git a/Content.Shared/RCD/Systems/RCDAmmoSystem.cs b/Content.Shared/RCD/Systems/RCDAmmoSystem.cs index 9481d299aaa..9cb3c264851 100644 --- a/Content.Shared/RCD/Systems/RCDAmmoSystem.cs +++ b/Content.Shared/RCD/Systems/RCDAmmoSystem.cs @@ -36,7 +36,7 @@ private void OnAfterInteract(EntityUid uid, RCDAmmoComponent comp, AfterInteract if (args.Handled || !args.CanReach || !_timing.IsFirstTimePredicted) return; - if (args.Target is not {Valid: true} target || + if (args.Target is not { Valid: true } target || !HasComp(target) || !TryComp(target, out var charges)) return; @@ -53,7 +53,7 @@ private void OnAfterInteract(EntityUid uid, RCDAmmoComponent comp, AfterInteract _popup.PopupClient(Loc.GetString("rcd-ammo-component-after-interact-refilled"), target, user); _charges.AddCharges(target, count, charges); comp.Charges -= count; - Dirty(comp); + Dirty(uid, comp); // prevent having useless ammo with 0 charges if (comp.Charges <= 0) diff --git a/Content.Shared/Random/Helpers/SharedRandomExtensions.cs b/Content.Shared/Random/Helpers/SharedRandomExtensions.cs index 20e57e94212..3941c2859bc 100644 --- a/Content.Shared/Random/Helpers/SharedRandomExtensions.cs +++ b/Content.Shared/Random/Helpers/SharedRandomExtensions.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.Dataset; using Content.Shared.FixedPoint; @@ -41,7 +42,7 @@ public static string Pick(this IWeightedRandomPrototype prototype, IRobustRandom var sum = picks.Values.Sum(); var accumulated = 0f; - var rand = random.NextFloat() * sum; + var rand = random!.NextFloat() * sum; foreach (var (key, weight) in picks) { @@ -78,6 +79,47 @@ public static T Pick(this IRobustRandom random, Dictionary weights) throw new InvalidOperationException("Invalid weighted pick"); } + public static T PickAndTake(this IRobustRandom random, Dictionary weights) + where T : notnull + { + var pick = Pick(random, weights); + weights.Remove(pick); + return pick; + } + + public static bool TryPickAndTake(this IRobustRandom random, Dictionary weights, [NotNullWhen(true)] out T? pick) + where T : notnull + { + if (weights.Count == 0) + { + pick = default; + return false; + } + pick = PickAndTake(random, weights); + return true; + } + + public static T Pick(Dictionary weights, System.Random random) + where T : notnull + { + var sum = weights.Values.Sum(); + var accumulated = 0f; + + var rand = random.NextFloat() * sum; + + foreach (var (key, weight) in weights) + { + accumulated += weight; + + if (accumulated >= rand) + { + return key; + } + } + + throw new InvalidOperationException("Invalid weighted pick"); + } + public static (string reagent, FixedPoint2 quantity) Pick(this WeightedRandomFillSolutionPrototype prototype, IRobustRandom? random = null) { var randomFill = prototype.PickRandomFill(random); @@ -87,7 +129,7 @@ public static (string reagent, FixedPoint2 quantity) Pick(this WeightedRandomFil var sum = randomFill.Reagents.Count; var accumulated = 0f; - var rand = random.NextFloat() * sum; + var rand = random!.NextFloat() * sum; foreach (var reagent in randomFill.Reagents) { @@ -118,7 +160,7 @@ public static RandomFillSolution PickRandomFill(this WeightedRandomFillSolutionP var sum = picks.Values.Sum(); var accumulated = 0f; - var rand = random.NextFloat() * sum; + var rand = random!.NextFloat() * sum; foreach (var (randSolution, weight) in picks) { diff --git a/Content.Shared/Revenant/Components/RevenantComponent.cs b/Content.Shared/Revenant/Components/RevenantComponent.cs index 947c1a4b3fc..d7fb28ef136 100644 --- a/Content.Shared/Revenant/Components/RevenantComponent.cs +++ b/Content.Shared/Revenant/Components/RevenantComponent.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Alert; using Content.Shared.FixedPoint; using Content.Shared.Store; using Content.Shared.Whitelist; @@ -200,6 +201,9 @@ public sealed partial class RevenantComponent : Component public EntityWhitelist? MalfunctionBlacklist; #endregion + [DataField] + public ProtoId EssenceAlert = "Essence"; + #region Visualizer [DataField("state")] public string State = "idle"; diff --git a/Content.Shared/Shadowkin/ShadowkinComponent.cs b/Content.Shared/Shadowkin/ShadowkinComponent.cs index b382f3112b7..a2a4fdf334f 100644 --- a/Content.Shared/Shadowkin/ShadowkinComponent.cs +++ b/Content.Shared/Shadowkin/ShadowkinComponent.cs @@ -1,4 +1,6 @@ using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared.Alert; namespace Content.Shared.Shadowkin; @@ -39,4 +41,7 @@ public sealed partial class ShadowkinComponent : Component [DataField] public EntityUid? ShadowkinSleepAction; + + [DataField] + public ProtoId ShadowkinPowerAlert = "ShadowkinPower"; } \ No newline at end of file diff --git a/Content.Shared/Showers/SharedShowerSystem.cs b/Content.Shared/Showers/SharedShowerSystem.cs index be3af6228f2..138a6869a94 100644 --- a/Content.Shared/Showers/SharedShowerSystem.cs +++ b/Content.Shared/Showers/SharedShowerSystem.cs @@ -79,7 +79,12 @@ private void UpdateAppearance(EntityUid uid, ShowerComponent? component = null) { if (component.PlayingStream == null) { - component.PlayingStream = _audio.PlayPvs(component.LoopingSound, uid, AudioParams.Default.WithLoop(true).WithMaxDistance(5)).Value.Entity; + var audio = _audio.PlayPvs(component.LoopingSound, uid, AudioParams.Default.WithLoop(true).WithMaxDistance(5)); + + if (audio == null) + return; + + component.PlayingStream = audio!.Value.Entity; } } else diff --git a/Content.Server/Shuttles/Components/FTLComponent.cs b/Content.Shared/Shuttles/Components/FTLComponent.cs similarity index 81% rename from Content.Server/Shuttles/Components/FTLComponent.cs rename to Content.Shared/Shuttles/Components/FTLComponent.cs index c9b84064234..9acca7c1d45 100644 --- a/Content.Server/Shuttles/Components/FTLComponent.cs +++ b/Content.Shared/Shuttles/Components/FTLComponent.cs @@ -2,16 +2,16 @@ using Content.Shared.Tag; using Content.Shared.Timing; using Robust.Shared.Audio; +using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Server.Shuttles.Components; +namespace Content.Shared.Shuttles.Components; /// /// Added to a component when it is queued or is travelling via FTL. /// -[RegisterComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class FTLComponent : Component { // TODO Full game save / add datafields @@ -29,13 +29,19 @@ public sealed partial class FTLComponent : Component [ViewVariables(VVAccess.ReadWrite)] public float TravelTime = 0f; + [DataField] + public EntProtoId? VisualizerProto = "FtlVisualizerEntity"; + + [DataField, AutoNetworkedField] + public EntityUid? VisualizerEntity; + /// /// Coordinates to arrive it: May be relative to another grid (for docking) or map coordinates. /// - [ViewVariables(VVAccess.ReadWrite), DataField] + [DataField, AutoNetworkedField] public EntityCoordinates TargetCoordinates; - [DataField] + [DataField, AutoNetworkedField] public Angle TargetAngle; /// diff --git a/Content.Shared/Shuttles/Components/FtlVisualizerComponent.cs b/Content.Shared/Shuttles/Components/FtlVisualizerComponent.cs new file mode 100644 index 00000000000..628a4f828b2 --- /dev/null +++ b/Content.Shared/Shuttles/Components/FtlVisualizerComponent.cs @@ -0,0 +1,23 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.Shuttles.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FtlVisualizerComponent : Component +{ + /// + /// Clientside time tracker for the animation. + /// + [ViewVariables(VVAccess.ReadWrite)] + public float Elapsed; + + [DataField(required: true)] + public SpriteSpecifier.Rsi Sprite; + + /// + /// Target grid to pull FTL visualization from. + /// + [DataField, AutoNetworkedField] + public EntityUid Grid; +} diff --git a/Content.Shared/Shuttles/Components/PilotComponent.cs b/Content.Shared/Shuttles/Components/PilotComponent.cs index 1a6927cf813..cb42db4436f 100644 --- a/Content.Shared/Shuttles/Components/PilotComponent.cs +++ b/Content.Shared/Shuttles/Components/PilotComponent.cs @@ -1,7 +1,9 @@ using System.Numerics; +using Content.Shared.Alert; using Content.Shared.Movement.Systems; using Robust.Shared.GameStates; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Shared.Shuttles.Components @@ -32,6 +34,9 @@ public sealed partial class PilotComponent : Component [ViewVariables] public ShuttleButtons HeldButtons = ShuttleButtons.None; + [DataField] + public ProtoId PilotingAlert = "PilotingShuttle"; + public override bool SendOnlyToOwner => true; } } diff --git a/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs b/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs index 8fe87e162bc..37d3bcd5c3b 100644 --- a/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs +++ b/Content.Shared/Silicon/Systems/SharedSiliconSystem.cs @@ -60,12 +60,12 @@ private void OnSiliconInit(EntityUid uid, SiliconComponent component, ComponentI if (!component.BatteryPowered) return; - _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, component.ChargeState); + _alertsSystem.ShowAlert(uid, component.BatteryAlert, component.ChargeState); } private void OnSiliconChargeStateUpdate(EntityUid uid, SiliconComponent component, SiliconChargeStateUpdateEvent ev) { - _alertsSystem.ShowAlert(uid, AlertType.BorgBattery, ev.ChargePercent); + _alertsSystem.ShowAlert(uid, component.BatteryAlert, ev.ChargePercent); } private void OnRefreshMovespeed(EntityUid uid, SiliconComponent component, RefreshMovementSpeedModifiersEvent args) diff --git a/Content.Shared/Silicons/Borgs/Components/BorgChassisComponent.cs b/Content.Shared/Silicons/Borgs/Components/BorgChassisComponent.cs index 71d3a7bd166..e1776873da9 100644 --- a/Content.Shared/Silicons/Borgs/Components/BorgChassisComponent.cs +++ b/Content.Shared/Silicons/Borgs/Components/BorgChassisComponent.cs @@ -1,6 +1,8 @@ -using Content.Shared.Whitelist; +using Content.Shared.Alert; +using Content.Shared.Whitelist; using Robust.Shared.Containers; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Silicons.Borgs.Components; @@ -76,6 +78,12 @@ public sealed partial class BorgChassisComponent : Component [DataField("noMindState")] public string NoMindState = string.Empty; #endregion + + [DataField] + public ProtoId BatteryAlert = "BorgBattery"; + + [DataField] + public ProtoId NoBatteryAlert = "BorgBatteryNone"; } [Serializable, NetSerializable] diff --git a/Content.Shared/Singularity/EntitySystems/SharedEventHorizonSystem.cs b/Content.Shared/Singularity/EntitySystems/SharedEventHorizonSystem.cs index f31dd8776a4..c2b52c5af35 100644 --- a/Content.Shared/Singularity/EntitySystems/SharedEventHorizonSystem.cs +++ b/Content.Shared/Singularity/EntitySystems/SharedEventHorizonSystem.cs @@ -66,7 +66,7 @@ public void SetRadius(EntityUid uid, float value, bool updateFixture = true, Eve return; eventHorizon.Radius = value; - Dirty(eventHorizon); + Dirty(uid, eventHorizon); if (updateFixture) UpdateEventHorizonFixture(uid, eventHorizon: eventHorizon); } @@ -89,7 +89,7 @@ public void SetCanBreachContainment(EntityUid uid, bool value, bool updateFixtur return; eventHorizon.CanBreachContainment = value; - Dirty(eventHorizon); + Dirty(uid, eventHorizon); if (updateFixture) UpdateEventHorizonFixture(uid, eventHorizon: eventHorizon); } @@ -112,7 +112,7 @@ public void SetColliderFixtureId(EntityUid uid, string? value, bool updateFixtur return; eventHorizon.ColliderFixtureId = value; - Dirty(eventHorizon); + Dirty(uid, eventHorizon); if (updateFixture) UpdateEventHorizonFixture(uid, eventHorizon: eventHorizon); } @@ -135,7 +135,7 @@ public void SetConsumerFixtureId(EntityUid uid, string? value, bool updateFixtur return; eventHorizon.ConsumerFixtureId = value; - Dirty(eventHorizon); + Dirty(uid, eventHorizon); if (updateFixture) UpdateEventHorizonFixture(uid, eventHorizon: eventHorizon); } diff --git a/Content.Shared/Stacks/SharedStackSystem.cs b/Content.Shared/Stacks/SharedStackSystem.cs index 756c84cac55..e12edd323c7 100644 --- a/Content.Shared/Stacks/SharedStackSystem.cs +++ b/Content.Shared/Stacks/SharedStackSystem.cs @@ -23,8 +23,8 @@ public abstract class SharedStackSystem : EntitySystem [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; [Dependency] protected readonly SharedHandsSystem Hands = default!; [Dependency] protected readonly SharedTransformSystem Xform = default!; - [Dependency] private readonly EntityLookupSystem _entityLookup = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly SharedStorageSystem _storage = default!; @@ -175,7 +175,7 @@ public virtual void SetCount(EntityUid uid, int amount, StackComponent? componen // Server-side override deletes the entity if count == 0 component.Count = amount; - Dirty(component); + Dirty(uid, component); Appearance.SetData(uid, StackVisuals.Actual, component.Count); RaiseLocalEvent(uid, new StackCountChangedEvent(old, component.Count)); diff --git a/Content.Shared/Standing/SharedLayingDownSystem.cs b/Content.Shared/Standing/SharedLayingDownSystem.cs index b2bb5add5f4..2f95a06f197 100644 --- a/Content.Shared/Standing/SharedLayingDownSystem.cs +++ b/Content.Shared/Standing/SharedLayingDownSystem.cs @@ -174,7 +174,7 @@ public bool TryLieDown(EntityUid uid, LayingDownComponent? layingDown = null, St return false; } - _standing.Down(uid, true, behavior != DropHeldItemsBehavior.NoDrop, standingState, setDrawDepth: true); + _standing.Down(uid, true, behavior != DropHeldItemsBehavior.NoDrop, standingState); return true; } } @@ -188,4 +188,4 @@ public enum DropHeldItemsBehavior : byte NoDrop, DropIfStanding, AlwaysDrop -} +} \ No newline at end of file diff --git a/Content.Shared/Standing/StandingStateSystem.cs b/Content.Shared/Standing/StandingStateSystem.cs index 5abbf53f1b2..a1b5418941a 100644 --- a/Content.Shared/Standing/StandingStateSystem.cs +++ b/Content.Shared/Standing/StandingStateSystem.cs @@ -57,7 +57,7 @@ public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true if (dropHeldItems && hands != null) RaiseLocalEvent(uid, new DropHandItemsEvent(), false); - if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled && !_buckle.TryUnbuckle(uid, uid, buckleComp: buckle)) + if (TryComp(uid, out BuckleComponent? buckle) && buckle.Buckled) return false; var msg = new DownAttemptEvent(); @@ -67,7 +67,7 @@ public bool Down(EntityUid uid, bool playSound = true, bool dropHeldItems = true return false; standingState.CurrentState = StandingState.Lying; - Dirty(standingState); + Dirty(uid, standingState); RaiseLocalEvent(uid, new DownedEvent(), false); // Seemed like the best place to put it @@ -184,4 +184,4 @@ public sealed class StoodEvent : EntityEventArgs { } /// /// Raised when an entity is not standing /// -public sealed class DownedEvent : EntityEventArgs { } +public sealed class DownedEvent : EntityEventArgs { } \ No newline at end of file diff --git a/Content.Shared/StationRecords/StationRecordKeyStorageSystem.cs b/Content.Shared/StationRecords/StationRecordKeyStorageSystem.cs index 05af0807f21..e9d68721b63 100644 --- a/Content.Shared/StationRecords/StationRecordKeyStorageSystem.cs +++ b/Content.Shared/StationRecords/StationRecordKeyStorageSystem.cs @@ -58,7 +58,7 @@ public void AssignKey(EntityUid uid, StationRecordKey key, StationRecordKeyStora var key = keyStorage.Key; keyStorage.Key = null; - Dirty(keyStorage); + Dirty(uid, keyStorage); return key; } diff --git a/Content.Shared/StatusEffect/StatusEffectPrototype.cs b/Content.Shared/StatusEffect/StatusEffectPrototype.cs index ae9e26879eb..8b1f84e4d81 100644 --- a/Content.Shared/StatusEffect/StatusEffectPrototype.cs +++ b/Content.Shared/StatusEffect/StatusEffectPrototype.cs @@ -10,7 +10,7 @@ public sealed partial class StatusEffectPrototype : IPrototype public string ID { get; private set; } = default!; [DataField("alert")] - public AlertType? Alert { get; private set; } + public ProtoId? Alert { get; private set; } /// /// Whether a status effect should be able to apply to any entity, diff --git a/Content.Shared/StatusEffect/StatusEffectsSystem.cs b/Content.Shared/StatusEffect/StatusEffectsSystem.cs index cc6dedae495..124dcdd8d67 100644 --- a/Content.Shared/StatusEffect/StatusEffectsSystem.cs +++ b/Content.Shared/StatusEffect/StatusEffectsSystem.cs @@ -234,7 +234,7 @@ public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool re _alertsSystem.ShowAlert(uid, proto.Alert.Value, null, cooldown1); } - Dirty(status); + Dirty(uid, status); RaiseLocalEvent(uid, new StatusEffectAddedEvent(uid, key)); return true; } @@ -246,7 +246,7 @@ public bool TryAddStatusEffect(EntityUid uid, string key, TimeSpan time, bool re /// This is mostly for stuns, since Stun and Knockdown share an alert key. Other times this pretty much /// will not be useful. /// - private (TimeSpan, TimeSpan)? GetAlertCooldown(EntityUid uid, AlertType alert, StatusEffectsComponent status) + private (TimeSpan, TimeSpan)? GetAlertCooldown(EntityUid uid, ProtoId alert, StatusEffectsComponent status) { (TimeSpan, TimeSpan)? maxCooldown = null; foreach (var kvp in status.ActiveEffects) @@ -310,7 +310,7 @@ public bool TryRemoveStatusEffect(EntityUid uid, string key, RemComp(uid); } - Dirty(status); + Dirty(uid, status); RaiseLocalEvent(uid, new StatusEffectEndedEvent(uid, key)); return true; } @@ -334,7 +334,7 @@ public bool TryRemoveAllStatusEffects(EntityUid uid, failed = true; } - Dirty(status); + Dirty(uid, status); return failed; } @@ -408,7 +408,7 @@ public bool TryAddTime(EntityUid uid, string key, TimeSpan time, _alertsSystem.ShowAlert(uid, proto.Alert.Value, null, cooldown); } - Dirty(status); + Dirty(uid, status); return true; } @@ -444,7 +444,7 @@ public bool TryRemoveTime(EntityUid uid, string key, TimeSpan time, _alertsSystem.ShowAlert(uid, proto.Alert.Value, null, cooldown); } - Dirty(status); + Dirty(uid, status); return true; } @@ -465,7 +465,7 @@ public bool TrySetTime(EntityUid uid, string key, TimeSpan time, status.ActiveEffects[key].Cooldown = (_gameTiming.CurTime, _gameTiming.CurTime + time); - Dirty(status); + Dirty(uid, status); return true; } diff --git a/Content.Shared/Storage/EntitySystems/BinSystem.cs b/Content.Shared/Storage/EntitySystems/BinSystem.cs index 17c3eb4288c..1cc95337ea4 100644 --- a/Content.Shared/Storage/EntitySystems/BinSystem.cs +++ b/Content.Shared/Storage/EntitySystems/BinSystem.cs @@ -135,7 +135,7 @@ public bool TryInsertIntoBin(EntityUid uid, EntityUid toInsert, BinComponent? co _container.Insert(toInsert, component.ItemContainer); component.Items.Add(toInsert); - Dirty(component); + Dirty(uid, component); return true; } @@ -151,7 +151,7 @@ public bool TryRemoveFromBin(EntityUid uid, EntityUid? toRemove, BinComponent? c if (!Resolve(uid, ref component)) return false; - if (!component.Items.Any()) + if (component.Items.Count == 0) return false; if (toRemove == null || toRemove != component.Items.LastOrDefault()) @@ -161,7 +161,7 @@ public bool TryRemoveFromBin(EntityUid uid, EntityUid? toRemove, BinComponent? c return false; component.Items.Remove(toRemove.Value); - Dirty(component); + Dirty(uid, component); return true; } } diff --git a/Content.Shared/Stunnable/SharedStunSystem.cs b/Content.Shared/Stunnable/SharedStunSystem.cs index 05d6b8ec533..ad36ba9329a 100644 --- a/Content.Shared/Stunnable/SharedStunSystem.cs +++ b/Content.Shared/Stunnable/SharedStunSystem.cs @@ -1,7 +1,5 @@ using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; -using Content.Shared.Audio; -using Content.Shared.DragDrop; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Inventory.Events; @@ -11,13 +9,11 @@ using Content.Shared.Hands; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Events; using Content.Shared.Movement.Systems; using Content.Shared.Standing; using Content.Shared.StatusEffect; using Content.Shared.Throwing; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -88,15 +84,15 @@ private void OnMobStateChanged(EntityUid uid, MobStateComponent component, MobSt case MobState.Alive: break; case MobState.Critical: - { - _statusEffect.TryRemoveStatusEffect(uid, "Stun"); - break; - } + { + _statusEffect.TryRemoveStatusEffect(uid, "Stun"); + break; + } case MobState.Dead: - { - _statusEffect.TryRemoveStatusEffect(uid, "Stun"); - break; - } + { + _statusEffect.TryRemoveStatusEffect(uid, "Stun"); + break; + } case MobState.Invalid: default: return; @@ -258,11 +254,11 @@ private void OnInteractHand(EntityUid uid, KnockedDownComponent knocked, Interac return; // Set it to half the help interval so helping is actually useful... - knocked.HelpTimer = knocked.HelpInterval/2f; + knocked.HelpTimer = knocked.HelpInterval / 2f; _statusEffect.TryRemoveTime(uid, "KnockedDown", TimeSpan.FromSeconds(knocked.HelpInterval)); _audio.PlayPredicted(knocked.StunAttemptSound, uid, args.User); - Dirty(knocked); + Dirty(uid, knocked); args.Handled = true; } diff --git a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs index 3dc1575ddb9..6e8393036d4 100644 --- a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs +++ b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs @@ -35,7 +35,7 @@ private void SetScannerEnabled(EntityUid uid, bool enabled, TrayScannerComponent return; scanner.Enabled = enabled; - Dirty(scanner); + Dirty(uid, scanner); // We don't remove from _activeScanners on disabled, because the update function will handle that, as well as // managing the revealed subfloor entities diff --git a/Content.Shared/Tag/TagSystem.cs b/Content.Shared/Tag/TagSystem.cs index 0707308e486..b9fef076c88 100644 --- a/Content.Shared/Tag/TagSystem.cs +++ b/Content.Shared/Tag/TagSystem.cs @@ -79,7 +79,7 @@ private void AssertValidTag(string id) /// public bool AddTag(EntityUid entity, string id) { - return AddTag(EnsureComp(entity), id); + return AddTag(entity, EnsureComp(entity), id); } /// @@ -95,7 +95,7 @@ public bool AddTag(EntityUid entity, string id) /// public bool AddTags(EntityUid entity, params string[] ids) { - return AddTags(EnsureComp(entity), ids); + return AddTags(entity, EnsureComp(entity), ids); } /// @@ -111,7 +111,7 @@ public bool AddTags(EntityUid entity, params string[] ids) /// public bool AddTags(EntityUid entity, IEnumerable ids) { - return AddTags(EnsureComp(entity), ids); + return AddTags(entity, EnsureComp(entity), ids); } /// @@ -128,8 +128,8 @@ public bool AddTags(EntityUid entity, IEnumerable ids) /// public bool TryAddTag(EntityUid entity, string id) { - return _tagQuery.TryComp(entity, out var component) && - AddTag(component, id); + return TryComp(entity, out var component) && + AddTag(entity, component, id); } /// @@ -146,8 +146,8 @@ public bool TryAddTag(EntityUid entity, string id) /// public bool TryAddTags(EntityUid entity, params string[] ids) { - return _tagQuery.TryComp(entity, out var component) && - AddTags(component, ids); + return TryComp(entity, out var component) && + AddTags(entity, component, ids); } /// @@ -164,8 +164,8 @@ public bool TryAddTags(EntityUid entity, params string[] ids) /// public bool TryAddTags(EntityUid entity, IEnumerable ids) { - return _tagQuery.TryComp(entity, out var component) && - AddTags(component, ids); + return TryComp(entity, out var component) && + AddTags(entity, component, ids); } /// @@ -333,8 +333,8 @@ public bool HasAnyTag(EntityUid entity, IEnumerable ids) /// public bool RemoveTag(EntityUid entity, string id) { - return _tagQuery.TryComp(entity, out var component) && - RemoveTag(component, id); + return TryComp(entity, out var component) && + RemoveTag(entity, component, id); } /// @@ -350,8 +350,8 @@ public bool RemoveTag(EntityUid entity, string id) /// public bool RemoveTags(EntityUid entity, params string[] ids) { - return _tagQuery.TryComp(entity, out var component) && - RemoveTags(component, ids); + return TryComp(entity, out var component) && + RemoveTags(entity, component, ids); } /// @@ -367,8 +367,8 @@ public bool RemoveTags(EntityUid entity, params string[] ids) /// public bool RemoveTags(EntityUid entity, IEnumerable ids) { - return _tagQuery.TryComp(entity, out var component) && - RemoveTags(component, ids); + return TryComp(entity, out var component) && + RemoveTags(entity, component, ids); } /// @@ -379,14 +379,14 @@ public bool RemoveTags(EntityUid entity, IEnumerable ids) /// /// Thrown if no exists with the given id. /// - public bool AddTag(TagComponent component, string id) + public bool AddTag(EntityUid uid, TagComponent component, string id) { AssertValidTag(id); var added = component.Tags.Add(id); if (added) { - Dirty(component); + Dirty(uid, component); return true; } @@ -401,9 +401,9 @@ public bool AddTag(TagComponent component, string id) /// /// Thrown if one of the ids represents an unregistered . /// - public bool AddTags(TagComponent component, params string[] ids) + public bool AddTags(EntityUid uid, TagComponent component, params string[] ids) { - return AddTags(component, ids.AsEnumerable()); + return AddTags(uid, component, ids.AsEnumerable()); } /// @@ -414,7 +414,7 @@ public bool AddTags(TagComponent component, params string[] ids) /// /// Thrown if one of the ids represents an unregistered . /// - public bool AddTags(TagComponent component, IEnumerable ids) + public bool AddTags(EntityUid uid, TagComponent component, IEnumerable ids) { var count = component.Tags.Count; @@ -426,7 +426,7 @@ public bool AddTags(TagComponent component, IEnumerable ids) if (component.Tags.Count > count) { - Dirty(component); + Dirty(uid, component); return true; } @@ -642,13 +642,13 @@ public bool HasAnyTag(TagComponent comp, List> ids) /// /// Thrown if no exists with the given id. /// - public bool RemoveTag(TagComponent component, string id) + public bool RemoveTag(EntityUid uid, TagComponent component, string id) { AssertValidTag(id); if (component.Tags.Remove(id)) { - Dirty(component); + Dirty(uid, component); return true; } @@ -665,9 +665,9 @@ public bool RemoveTag(TagComponent component, string id) /// /// Thrown if one of the ids represents an unregistered . /// - public bool RemoveTags(TagComponent component, params string[] ids) + public bool RemoveTags(EntityUid uid, TagComponent component, params string[] ids) { - return RemoveTags(component, ids.AsEnumerable()); + return RemoveTags(uid, component, ids.AsEnumerable()); } /// @@ -678,7 +678,7 @@ public bool RemoveTags(TagComponent component, params string[] ids) /// /// Thrown if one of the ids represents an unregistered . /// - public bool RemoveTags(TagComponent component, IEnumerable ids) + public bool RemoveTags(EntityUid uid, TagComponent component, IEnumerable ids) { var count = component.Tags.Count; @@ -690,7 +690,7 @@ public bool RemoveTags(TagComponent component, IEnumerable ids) if (component.Tags.Count < count) { - Dirty(component); + Dirty(uid, component); return true; } diff --git a/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs b/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs index bf2d087c761..35ce5665ddf 100644 --- a/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs +++ b/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs @@ -87,7 +87,7 @@ public bool OneWayLink(EntityUid source, EntityUid target, bool deleteOnEmptyLin /// Resolve comp /// Whether unlinking was successful (e.g. they both were actually linked to one another) public bool TryUnlink(EntityUid first, EntityUid second, - LinkedEntityComponent? firstLink=null, LinkedEntityComponent? secondLink=null) + LinkedEntityComponent? firstLink = null, LinkedEntityComponent? secondLink = null) { if (!Resolve(first, ref firstLink)) return false; @@ -101,8 +101,8 @@ public bool TryUnlink(EntityUid first, EntityUid second, _appearance.SetData(first, LinkedEntityVisuals.HasAnyLinks, firstLink.LinkedEntities.Any()); _appearance.SetData(second, LinkedEntityVisuals.HasAnyLinks, secondLink.LinkedEntities.Any()); - Dirty(firstLink); - Dirty(secondLink); + Dirty(first, firstLink); + Dirty(second, secondLink); if (firstLink.LinkedEntities.Count == 0 && firstLink.DeleteOnEmptyLinks) QueueDel(first); diff --git a/Content.Shared/Traits/Assorted/Systems/LegsParalyzedSystem.cs b/Content.Shared/Traits/Assorted/Systems/LegsParalyzedSystem.cs index 8ae0f251b86..4556d8ee991 100644 --- a/Content.Shared/Traits/Assorted/Systems/LegsParalyzedSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/LegsParalyzedSystem.cs @@ -17,7 +17,8 @@ public override void Initialize() { SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnBuckleChange); + SubscribeLocalEvent(OnBuckled); + SubscribeLocalEvent(OnUnbuckled); SubscribeLocalEvent(OnThrowPushbackAttempt); SubscribeLocalEvent(OnUpdateCanMoveEvent); } @@ -34,25 +35,11 @@ private void OnShutdown(EntityUid uid, Components.LegsParalyzedComponent compone _bodySystem.UpdateMovementSpeed(uid); } - private void OnBuckleChange(EntityUid uid, Components.LegsParalyzedComponent component, ref BuckleChangeEvent args) - { - if (args.Buckling) - { - _standingSystem.Stand(args.BuckledEntity); - } - else - { - _standingSystem.Down(args.BuckledEntity); - } - } + private void OnBuckled(EntityUid uid, Components.LegsParalyzedComponent component, ref BuckledEvent args) => _standingSystem.Stand(uid); - private void OnUpdateCanMoveEvent(EntityUid uid, Components.LegsParalyzedComponent component, UpdateCanMoveEvent args) - { - args.Cancel(); - } + private void OnUnbuckled(EntityUid uid, Components.LegsParalyzedComponent component, ref UnbuckledEvent args) => _standingSystem.Down(uid); - private void OnThrowPushbackAttempt(EntityUid uid, Components.LegsParalyzedComponent component, ThrowPushbackAttemptEvent args) - { - args.Cancel(); - } + private void OnUpdateCanMoveEvent(EntityUid uid, Components.LegsParalyzedComponent component, UpdateCanMoveEvent args) => args.Cancel(); + + private void OnThrowPushbackAttempt(EntityUid uid, Components.LegsParalyzedComponent component, ThrowPushbackAttemptEvent args) => args.Cancel(); } diff --git a/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs b/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs index 13270ae45d2..5bf4e0d3789 100644 --- a/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/SharedSingerSystem.cs @@ -38,7 +38,7 @@ private void OnStartup(Entity ent, ref ComponentStartup args) var instrumentComp = EnsureInstrumentComp(ent); var defaultData = singer.InstrumentList[singer.DefaultInstrument]; - _instrument.SetInstrumentProgram(instrumentComp, defaultData.Item1, defaultData.Item2); + _instrument.SetInstrumentProgram(ent.Owner, instrumentComp, defaultData.Item1, defaultData.Item2); SetUpSwappableInstrument(ent, singer); } diff --git a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs index 63b2d5f2115..d1814020e6e 100644 --- a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs +++ b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs @@ -71,7 +71,7 @@ private void OnMarkerCollide(EntityUid uid, DamageMarkerOnCollideComponent compo marker.Marker = projectile.Weapon.Value; marker.EndTime = _timing.CurTime + component.Duration; component.Amount--; - Dirty(marker); + Dirty(args.OtherEntity, marker); if (_netManager.IsServer) { @@ -81,7 +81,7 @@ private void OnMarkerCollide(EntityUid uid, DamageMarkerOnCollideComponent compo } else { - Dirty(component); + Dirty(uid, component); } } } diff --git a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs index 3a950bcd29e..dd297422c37 100644 --- a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs @@ -21,17 +21,17 @@ namespace Content.Shared.Weapons.Misc; public abstract partial class SharedTetherGunSystem : EntitySystem { - [Dependency] private readonly INetManager _netManager = default!; - [Dependency] private readonly ActionBlockerSystem _blocker = default!; - [Dependency] private readonly MobStateSystem _mob = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedContainerSystem _container = default!; - [Dependency] private readonly SharedJointSystem _joints = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly INetManager _netManager = default!; + [Dependency] private readonly ActionBlockerSystem _blocker = default!; + [Dependency] private readonly MobStateSystem _mob = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedJointSystem _joints = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; - [Dependency] private readonly ThrowingSystem _throwing = default!; - [Dependency] private readonly ThrownItemSystem _thrown = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + [Dependency] private readonly ThrownItemSystem _thrown = default!; private const string TetherJoint = "tether"; @@ -282,7 +282,7 @@ protected virtual void StopTether(EntityUid gunUid, BaseForceGunComponent compon RemComp(component.Tethered.Value); _blocker.UpdateCanMove(component.Tethered.Value); component.Tethered = null; - Dirty(component); + Dirty(gunUid, component); } [Serializable, NetSerializable] diff --git a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs index b774c8ab450..9d6d5524001 100644 --- a/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/RechargeBasicEntityAmmoSystem.cs @@ -49,19 +49,19 @@ public override void Update(float frameTime) if (ammo.Count == ammo.Capacity) { recharge.NextCharge = null; - Dirty(recharge); + Dirty(uid, recharge); continue; } recharge.NextCharge = recharge.NextCharge.Value + TimeSpan.FromSeconds(recharge.RechargeCooldown); - Dirty(recharge); + Dirty(uid, recharge); } } private void OnInit(EntityUid uid, RechargeBasicEntityAmmoComponent component, MapInitEvent args) { component.NextCharge = _timing.CurTime; - Dirty(component); + Dirty(uid, component); } private void OnExamined(EntityUid uid, RechargeBasicEntityAmmoComponent component, ExaminedEvent args) @@ -86,7 +86,7 @@ public void Reset(EntityUid uid, RechargeBasicEntityAmmoComponent? recharge = nu if (recharge.NextCharge == null || recharge.NextCharge < _timing.CurTime) { recharge.NextCharge = _timing.CurTime + TimeSpan.FromSeconds(recharge.RechargeCooldown); - Dirty(recharge); + Dirty(uid, recharge); } } } diff --git a/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs b/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs index 136e9b59b2f..a014f8e5c74 100644 --- a/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs @@ -25,7 +25,7 @@ private void OnRechargeCycled(EntityUid uid, RechargeCycleAmmoComponent componen return; _gun.UpdateBasicEntityAmmoCount(uid, basic.Count.Value + 1, basic); - Dirty(basic); + Dirty(uid, basic); args.Handled = true; } } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index b714acefbd1..af295cc83ff 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -118,7 +118,7 @@ private void OnGunMelee(EntityUid uid, GunComponent component, MeleeHitEvent arg if (melee.NextAttack > component.NextFire) { component.NextFire = melee.NextAttack; - Dirty(component); + Dirty(uid, component); } } diff --git a/Content.Shared/Weapons/Reflect/ReflectSystem.cs b/Content.Shared/Weapons/Reflect/ReflectSystem.cs index 36dbedb4cb1..03ad97edff2 100644 --- a/Content.Shared/Weapons/Reflect/ReflectSystem.cs +++ b/Content.Shared/Weapons/Reflect/ReflectSystem.cs @@ -42,6 +42,9 @@ public sealed class ReflectSystem : EntitySystem [Dependency] private readonly StandingStateSystem _standing = default!; [Dependency] private readonly AlertsSystem _alerts = default!; + [ValidatePrototypeId] + private const string DeflectingAlert = "Deflecting"; + public override void Initialize() { base.Initialize(); @@ -296,11 +299,11 @@ private void RefreshReflectUser(EntityUid user) private void EnableAlert(EntityUid alertee) { - _alerts.ShowAlert(alertee, AlertType.Deflecting); + _alerts.ShowAlert(alertee, DeflectingAlert); } private void DisableAlert(EntityUid alertee) { - _alerts.ClearAlert(alertee, AlertType.Deflecting); + _alerts.ClearAlert(alertee, DeflectingAlert); } } diff --git a/Content.Shared/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index 45a2afe7cd9..19671bd77b0 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -15,8 +15,8 @@ public abstract class SharedWeatherSystem : EntitySystem [Dependency] protected readonly IGameTiming Timing = default!; [Dependency] protected readonly IMapManager MapManager = default!; [Dependency] protected readonly IPrototypeManager ProtoMan = default!; - [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; - [Dependency] private readonly MetaDataSystem _metadata = default!; + [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; + [Dependency] private readonly MetaDataSystem _metadata = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; private EntityQuery _blockQuery; @@ -129,7 +129,7 @@ public override void Update(float frameTime) // Shutting down if (endTime != null && remainingTime < WeatherComponent.ShutdownTime) { - SetState(WeatherState.Ending, comp, weather, weatherProto); + SetState(uid, WeatherState.Ending, comp, weather, weatherProto); } // Starting up else @@ -139,7 +139,7 @@ public override void Update(float frameTime) if (elapsed < WeatherComponent.StartupTime) { - SetState(WeatherState.Starting, comp, weather, weatherProto); + SetState(uid, WeatherState.Starting, comp, weather, weatherProto); } } @@ -182,15 +182,15 @@ public void SetWeather(MapId mapId, WeatherPrototype? proto, TimeSpan? endTime) } if (proto != null) - StartWeather(weatherComp, proto, endTime); + StartWeather(mapUid, weatherComp, proto, endTime); } /// /// Run every tick when the weather is running. /// - protected virtual void Run(EntityUid uid, WeatherData weather, WeatherPrototype weatherProto, float frameTime) {} + protected virtual void Run(EntityUid uid, WeatherData weather, WeatherPrototype weatherProto, float frameTime) { } - protected void StartWeather(WeatherComponent component, WeatherPrototype weather, TimeSpan? endTime) + protected void StartWeather(EntityUid uid, WeatherComponent component, WeatherPrototype weather, TimeSpan? endTime) { if (component.Weather.ContainsKey(weather.ID)) return; @@ -202,7 +202,7 @@ protected void StartWeather(WeatherComponent component, WeatherPrototype weather }; component.Weather.Add(weather.ID, data); - Dirty(component); + Dirty(uid, component); } protected virtual void EndWeather(EntityUid uid, WeatherComponent component, string proto) @@ -216,13 +216,13 @@ protected virtual void EndWeather(EntityUid uid, WeatherComponent component, str Dirty(uid, component); } - protected virtual bool SetState(WeatherState state, WeatherComponent component, WeatherData weather, WeatherPrototype weatherProto) + protected virtual bool SetState(EntityUid uid, WeatherState state, WeatherComponent component, WeatherData weather, WeatherPrototype weatherProto) { if (weather.State.Equals(state)) return false; weather.State = state; - Dirty(component); + Dirty(uid, component); return true; } diff --git a/Content.Tests/Shared/Alert/AlertManagerTests.cs b/Content.Tests/Shared/Alert/AlertManagerTests.cs index 2d5f6af5a7f..c57df63d5b7 100644 --- a/Content.Tests/Shared/Alert/AlertManagerTests.cs +++ b/Content.Tests/Shared/Alert/AlertManagerTests.cs @@ -1,6 +1,5 @@ using System.IO; using Content.Client.Alerts; -using Content.Server.Alert; using Content.Shared.Alert; using NUnit.Framework; using Robust.Shared.GameObjects; @@ -45,15 +44,15 @@ public void TestAlertManager() prototypeManager.Initialize(); prototypeManager.LoadFromStream(new StringReader(PROTOTYPES)); - Assert.That(alertsSystem.TryGet(AlertType.LowPressure, out var lowPressure)); - Assert.That(lowPressure.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/lowpressure.png")))); - Assert.That(alertsSystem.TryGet(AlertType.HighPressure, out var highPressure)); - Assert.That(highPressure.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/highpressure.png")))); + Assert.That(alertsSystem.TryGet("LowPressure", out var lowPressure)); + Assert.That(lowPressure!.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/lowpressure.png")))); + Assert.That(alertsSystem.TryGet("HighPressure", out var highPressure)); + Assert.That(highPressure!.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/highpressure.png")))); - Assert.That(alertsSystem.TryGet(AlertType.LowPressure, out lowPressure)); - Assert.That(lowPressure.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/lowpressure.png")))); - Assert.That(alertsSystem.TryGet(AlertType.HighPressure, out highPressure)); - Assert.That(highPressure.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/highpressure.png")))); + Assert.That(alertsSystem.TryGet("LowPressure", out lowPressure)); + Assert.That(lowPressure!.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/lowpressure.png")))); + Assert.That(alertsSystem.TryGet("HighPressure", out highPressure)); + Assert.That(highPressure!.Icons[0], Is.EqualTo(new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Pressure/highpressure.png")))); } } } diff --git a/Content.Tests/Shared/Alert/AlertOrderPrototypeTests.cs b/Content.Tests/Shared/Alert/AlertOrderPrototypeTests.cs index 56f76d46a92..efcd59acbbb 100644 --- a/Content.Tests/Shared/Alert/AlertOrderPrototypeTests.cs +++ b/Content.Tests/Shared/Alert/AlertOrderPrototypeTests.cs @@ -85,24 +85,24 @@ public void TestAlertOrderPrototype() var alerts = prototypeManager.EnumeratePrototypes(); // ensure they sort according to our expected criteria - var expectedOrder = new List(); - expectedOrder.Add(AlertType.Handcuffed); - expectedOrder.Add(AlertType.Ensnared); - expectedOrder.Add(AlertType.HighPressure); + var expectedOrder = new List(); + expectedOrder.Add("Handcuffed"); + expectedOrder.Add("Ensnared"); + expectedOrder.Add("HighPressure"); // stuff with only category + same category ordered by enum value - expectedOrder.Add(AlertType.Peckish); - expectedOrder.Add(AlertType.Hot); - expectedOrder.Add(AlertType.Stun); - expectedOrder.Add(AlertType.LowPressure); - expectedOrder.Add(AlertType.Cold); - // stuff at end of list ordered by enum value - expectedOrder.Add(AlertType.Weightless); - expectedOrder.Add(AlertType.PilotingShuttle); + expectedOrder.Add("Peckish"); + expectedOrder.Add("Hot"); + expectedOrder.Add("Stun"); + expectedOrder.Add("LowPressure"); + expectedOrder.Add("Cold"); + // stuff at end of list ordered by ID + expectedOrder.Add("PilotingShuttle"); + expectedOrder.Add("Weightless"); var actual = alerts.ToList(); actual.Sort(alertOrder); - Assert.That(actual.Select(a => a.AlertType).ToList(), Is.EqualTo(expectedOrder)); + Assert.That(actual.Select(a => a.ID).ToList(), Is.EqualTo(expectedOrder)); } } } diff --git a/Content.Tests/Shared/Alert/AlertPrototypeTests.cs b/Content.Tests/Shared/Alert/AlertPrototypeTests.cs index d95acb8aff4..43ae98b452b 100644 --- a/Content.Tests/Shared/Alert/AlertPrototypeTests.cs +++ b/Content.Tests/Shared/Alert/AlertPrototypeTests.cs @@ -39,9 +39,9 @@ public void OneTimeSetUp() [Test] public void TestAlertKey() { - Assert.That(new AlertKey(AlertType.HumanHealth, null), Is.Not.EqualTo(AlertKey.ForCategory(AlertCategory.Health))); - Assert.That((new AlertKey(null, AlertCategory.Health)), Is.EqualTo(AlertKey.ForCategory(AlertCategory.Health))); - Assert.That((new AlertKey(AlertType.Buckled, AlertCategory.Health)), Is.EqualTo(AlertKey.ForCategory(AlertCategory.Health))); + Assert.That(new AlertKey("HumanHealth", null), Is.Not.EqualTo(AlertKey.ForCategory("Health"))); + Assert.That((new AlertKey(null, "Health")), Is.EqualTo(AlertKey.ForCategory("Health"))); + Assert.That((new AlertKey("Buckled", "Health")), Is.EqualTo(AlertKey.ForCategory("Health"))); } [TestCase(0, "/Textures/Interface/Alerts/Human/human.rsi/human0.png")] diff --git a/Resources/ConfigPresets/EinsteinEngines/default.toml b/Resources/ConfigPresets/EinsteinEngines/default.toml index b5b8dbbf64e..ac50e57b9b6 100644 --- a/Resources/ConfigPresets/EinsteinEngines/default.toml +++ b/Resources/ConfigPresets/EinsteinEngines/default.toml @@ -41,8 +41,7 @@ limit = 10.0 fork_id = "EinsteinEngines" [server] -rules_file = "Rules.txt" -rules_header = "ui-rules-header" +rules_file = "DefaultRuleset" [ooc] enable_during_round = true diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index e2090d5af0a..ae564f16710 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -72,6 +72,61 @@ guide-entry-revolutionaries = Revolutionaries guide-entry-minor-antagonists = Minor Antagonists guide-entry-space-ninja = Space Ninja +guide-entry-rules = Server Rules +guide-entry-rules-core-only = Core Only Ruleset +guide-entry-rules-lrp = Standard Ruleset +guide-entry-rules-mrp = MRP Ruleset +guide-entry-rules-role-types = Role Types +guide-entry-rules-core = Core Rules +guide-entry-rules-c1 = C1 +guide-entry-rules-c2 = C2 +guide-entry-rules-c3 = C3 +guide-entry-rules-c4 = C4 +guide-entry-rules-c5 = C5 +guide-entry-rules-c6 = C6 +guide-entry-rules-c7 = C7 +guide-entry-rules-c8 = C8 +guide-entry-rules-c9 = C9 +guide-entry-rules-c10 = C10 +guide-entry-rules-c11 = C11 +guide-entry-rules-c12 = C12 +guide-entry-rules-c13 = C13 +guide-entry-rules-c14 = C14 +guide-entry-rules-roleplay = Roleplay Rules +guide-entry-rules-r1 = R1 +guide-entry-rules-r2 = R2 +guide-entry-rules-r3 = R3 +guide-entry-rules-r4 = R4 +guide-entry-rules-r5 = R5 +guide-entry-rules-r6 = R6 +guide-entry-rules-r7 = R7 +guide-entry-rules-r8 = R8 +guide-entry-rules-r9 = R9 +guide-entry-rules-r10 = R10 +guide-entry-rules-r11 = R11 +guide-entry-rules-r12 = R12 +guide-entry-rules-r13 = R13 +guide-entry-rules-r14 = R14 +guide-entry-rules-r15 = R15 +guide-entry-rules-silicon = Silicon Rules +guide-entry-rules-s1 = S1 +guide-entry-rules-s2 = S2 +guide-entry-rules-s3 = S3 +guide-entry-rules-s4 = S4 +guide-entry-rules-s5 = S5 +guide-entry-rules-s6 = S6 +guide-entry-rules-s7 = S7 +guide-entry-rules-s8 = S8 +guide-entry-rules-s9 = S9 +guide-entry-rules-s10 = S10 +guide-entry-rules-space-law = Space Law +guide-entry-rules-sl-crime-list = Crime List +guide-entry-rules-sl-controlled-substances = Controlled Substances +guide-entry-rules-sl-restricted-gear = Restricted Gear +guide-entry-rules-sl-restricted-weapons = Restricted Weapons +guide-entry-rules-ban-types = Ban Types +guide-entry-rules-ban-durations = Ban Durations + guide-entry-writing = Writing guide-entry-glossary = Glossary diff --git a/Resources/Locale/en-US/info/rules.ftl b/Resources/Locale/en-US/info/rules.ftl index 28791fd7ecb..8aa0b746b1d 100644 --- a/Resources/Locale/en-US/info/rules.ftl +++ b/Resources/Locale/en-US/info/rules.ftl @@ -3,3 +3,6 @@ ui-rules-header = Official Server Rules ui-rules-accept = I have read and agree to follow the rules ui-rules-wait = The accept button will be enabled after {$time} seconds. + +ui-rules-button-home = Home +ui-rules-button-back = Back diff --git a/Resources/Prototypes/Actions/borgs.yml b/Resources/Prototypes/Actions/borgs.yml index 6d35c69cf6a..950a7c81524 100644 --- a/Resources/Prototypes/Actions/borgs.yml +++ b/Resources/Prototypes/Actions/borgs.yml @@ -2,7 +2,7 @@ id: ActionViewLaws name: View Laws description: View the laws that you must follow. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem diff --git a/Resources/Prototypes/Actions/crit.yml b/Resources/Prototypes/Actions/crit.yml index 705ee6ee6b3..bc843796c47 100644 --- a/Resources/Prototypes/Actions/crit.yml +++ b/Resources/Prototypes/Actions/crit.yml @@ -3,7 +3,7 @@ id: ActionCritSuccumb name: Succumb description: Accept your fate. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem @@ -18,7 +18,7 @@ id: ActionCritFakeDeath name: Fake Death description: Pretend to take your final breath while staying alive. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem @@ -34,7 +34,7 @@ id: ActionCritLastWords name: Say Last Words description: Whisper your last words to anyone nearby, and then succumb to your fate. You only have 30 characters to work with. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem diff --git a/Resources/Prototypes/Actions/diona.yml b/Resources/Prototypes/Actions/diona.yml index 11db30386a5..695285a524d 100644 --- a/Resources/Prototypes/Actions/diona.yml +++ b/Resources/Prototypes/Actions/diona.yml @@ -2,7 +2,7 @@ id: DionaGibAction name: Gib Yourself! description: Split apart into 3 nymphs. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: @@ -16,7 +16,7 @@ id: DionaReformAction name: Reform description: Reform back into a whole Diona. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: diff --git a/Resources/Prototypes/Actions/internals.yml b/Resources/Prototypes/Actions/internals.yml index dd83a45332f..ebc29d2ebf0 100644 --- a/Resources/Prototypes/Actions/internals.yml +++ b/Resources/Prototypes/Actions/internals.yml @@ -2,7 +2,7 @@ id: ActionToggleInternals name: Toggle Internals description: Breathe from the equipped gas tank. Also requires equipped breath mask. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: diff --git a/Resources/Prototypes/Actions/mech.yml b/Resources/Prototypes/Actions/mech.yml index 2005133a70b..69ec71ba641 100644 --- a/Resources/Prototypes/Actions/mech.yml +++ b/Resources/Prototypes/Actions/mech.yml @@ -2,7 +2,7 @@ id: ActionMechCycleEquipment name: Cycle description: Cycles currently selected equipment - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem @@ -16,7 +16,7 @@ id: ActionMechOpenUI name: Control Panel description: Opens the control panel for the mech - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem @@ -30,7 +30,7 @@ id: ActionMechEject name: Eject description: Ejects the pilot from the mech - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem diff --git a/Resources/Prototypes/Actions/misc.yml b/Resources/Prototypes/Actions/misc.yml index 60fec699210..1a8d3458dde 100644 --- a/Resources/Prototypes/Actions/misc.yml +++ b/Resources/Prototypes/Actions/misc.yml @@ -2,7 +2,7 @@ id: ActionCancelEscape name: Stop escaping description: Calm down and sit peacefuly in your carrier's inventory - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Actions/escapeinventory.rsi/cancel-escape.png diff --git a/Resources/Prototypes/Actions/ninja.yml b/Resources/Prototypes/Actions/ninja.yml index 5fe6f23b276..51bfc33c494 100644 --- a/Resources/Prototypes/Actions/ninja.yml +++ b/Resources/Prototypes/Actions/ninja.yml @@ -3,7 +3,7 @@ id: ActionToggleNinjaGloves name: Toggle ninja gloves description: Toggles all glove actions on left click. Includes your doorjack, draining power, stunning enemies, downloading research and calling in a threat. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction priority: -13 @@ -14,7 +14,7 @@ id: ActionCreateThrowingStar name: Create throwing star description: Channels suit power into creating a throwing star that deals extra stamina damage. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 0.5 @@ -29,7 +29,7 @@ id: ActionRecallKatana name: Recall katana description: Teleports the Energy Katana linked to this suit to its wearer, cost based on distance. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 1 @@ -44,7 +44,7 @@ id: ActionNinjaEmp name: EM Burst description: Disable any nearby technology with an electro-magnetic pulse. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: @@ -58,7 +58,7 @@ id: ActionTogglePhaseCloak name: Phase cloak description: Toggles your suit's phase cloak. Beware that if you are hit, all abilities are disabled for 5 seconds, including your cloak! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction # have to plan (un)cloaking ahead of time @@ -71,7 +71,7 @@ id: ActionEnergyKatanaDash name: Katana dash description: Teleport to anywhere you can see, if your Energy Katana is in your hand. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction icon: diff --git a/Resources/Prototypes/Actions/polymorph.yml b/Resources/Prototypes/Actions/polymorph.yml index 445dc8d9f54..de082ead8a4 100644 --- a/Resources/Prototypes/Actions/polymorph.yml +++ b/Resources/Prototypes/Actions/polymorph.yml @@ -2,14 +2,14 @@ id: ActionRevertPolymorph name: Revert description: Revert back into your original form. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction event: !type:RevertPolymorphActionEvent - type: entity id: ActionPolymorph - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction event: !type:PolymorphActionEvent @@ -19,7 +19,7 @@ id: ActionPolymorphWizardSpider name: Spider Polymorph description: Polymorphs you into a Spider. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 60 @@ -34,7 +34,7 @@ id: ActionPolymorphWizardRod name: Rod Form description: CLANG! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 60 diff --git a/Resources/Prototypes/Actions/psionics.yml b/Resources/Prototypes/Actions/psionics.yml index a372a480ac7..c5df4f70ad0 100644 --- a/Resources/Prototypes/Actions/psionics.yml +++ b/Resources/Prototypes/Actions/psionics.yml @@ -2,7 +2,7 @@ id: ActionDispel name: action-name-dispel description: action-description-dispel - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: Interface/VerbIcons/dispel.png @@ -21,7 +21,7 @@ id: ActionMassSleep name: action-name-mass-sleep description: action-description-mass-sleep - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction icon: Interface/VerbIcons/mass_sleep.png @@ -35,7 +35,7 @@ id: ActionMindSwap name: action-name-mind-swap description: action-description-mind-swap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: Interface/VerbIcons/mind_swap.png @@ -53,7 +53,7 @@ id: ActionMindSwapReturn name: action-name-mind-swap-return description: action-description-mind-swap-return - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/mind_swap_return.png @@ -65,7 +65,7 @@ id: ActionNoosphericZap name: action-name-noospheric-zap description: action-description-noospheric-zap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: Interface/VerbIcons/noospheric_zap.png @@ -82,7 +82,7 @@ id: ActionPyrokinesis name: action-name-pyrokinesis description: action-description-pyrokinesis - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: Interface/VerbIcons/pyrokinesis.png @@ -96,7 +96,7 @@ id: ActionMetapsionic name: action-name-metapsionic description: action-description-metapsionic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/metapsionic.png @@ -107,7 +107,7 @@ id: ActionPsionicRegeneration name: action-name-psionic-regeneration description: action-description-psionic-regeneration - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/psionic_regeneration.png @@ -118,7 +118,7 @@ id: ActionTelegnosis name: action-name-telegnosis description: action-description-telegnosis - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/telegnosis.png @@ -129,7 +129,7 @@ id: ActionPsionicInvisibility name: action-name-psionic-invisibility description: action-description-psionic-invisibility - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/psionic_invisibility.png @@ -140,7 +140,7 @@ id: ActionPsionicInvisibilityUsed name: action-name-psionic-invisibility-off description: action-description-psionic-invisibility-off - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/psionic_invisibility_off.png @@ -150,7 +150,7 @@ id: ActionHealingWord name: action-name-healing-word description: action-description-healing-word - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: { sprite: Interface/Actions/psionics.rsi, state: healing_word } @@ -187,7 +187,7 @@ id: ActionRevivify name: action-name-revivify description: action-description-revivify - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: { sprite: Interface/Actions/psionics.rsi, state: revivify } @@ -226,7 +226,7 @@ id: ActionShadeskip name: action-name-shadeskip description: action-description-shadeskip - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite : Interface/Actions/psionics.rsi, state: shadeskip } @@ -261,7 +261,7 @@ id: ActionTelekineticPulse name: action-name-telekinetic-pulse description: action-description-telekinetic-pulse - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/psionics.rsi, state: telekinetic_pulse } @@ -295,7 +295,7 @@ id: ActionShadowkinShadeskip name: action-name-shadeskip description: action-description-shadowkin-shadeskip - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/shadowkin_icons.rsi, state: shadeskip } @@ -329,7 +329,7 @@ id: ActionDarkSwap name: action-name-darkswap description: action-description-darkswap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/shadowkin_icons.rsi, state: darkswap } @@ -343,7 +343,7 @@ id: ActionPyrokineticFlare name: action-name-pyrokinetic-flare description: action-description-pyrokinetic-flare - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/psionics.rsi, state: pyrokinetic_flare } @@ -369,7 +369,7 @@ id: ActionSummonImp name: action-name-summon-imp description: action-description-summon-imp - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/psionics.rsi, state: summon_imp } @@ -388,7 +388,7 @@ id: ActionSummonRemilia name: action-name-summon-remilia description: action-description-summon-remilia - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/psionics.rsi, state: summon_remilia } diff --git a/Resources/Prototypes/Actions/revenant.yml b/Resources/Prototypes/Actions/revenant.yml index da7b4ba56f2..1131ae2eadb 100644 --- a/Resources/Prototypes/Actions/revenant.yml +++ b/Resources/Prototypes/Actions/revenant.yml @@ -2,7 +2,7 @@ id: ActionRevenantShop name: Shop description: Opens the ability shop. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/shop.png @@ -12,7 +12,7 @@ id: ActionRevenantDefile name: Defile description: Costs 30 Essence. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/defile.png @@ -23,7 +23,7 @@ id: ActionRevenantOverloadLights name: Overload Lights description: Costs 40 Essence. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/overloadlight.png @@ -34,7 +34,7 @@ # id: ActionRevenantBlight # name: Blight # description: Costs 50 Essence. -# noSpawn: true +# categories: [ HideSpawnMenu ] # components: # - type: InstantAction # icon: Interface/Actions/blight.png @@ -45,7 +45,7 @@ id: ActionRevenantMalfunction name: Malfunction description: Costs 60 Essence. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/malfunction.png diff --git a/Resources/Prototypes/Actions/speech.yml b/Resources/Prototypes/Actions/speech.yml index 39db04b1b31..053322904f4 100644 --- a/Resources/Prototypes/Actions/speech.yml +++ b/Resources/Prototypes/Actions/speech.yml @@ -2,7 +2,7 @@ id: ActionConfigureMeleeSpeech name: Set Battlecry description: Set a custom battlecry for when you attack! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigItem diff --git a/Resources/Prototypes/Actions/spider.yml b/Resources/Prototypes/Actions/spider.yml index 14b9fb6ccbb..3139d416dc6 100644 --- a/Resources/Prototypes/Actions/spider.yml +++ b/Resources/Prototypes/Actions/spider.yml @@ -2,7 +2,7 @@ id: ActionSpiderWeb name: Spider Web description: Spawns a web that slows your prey down. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/web.png @@ -13,7 +13,7 @@ id: ActionSericulture name: Weave silk description: Weave a bit of silk for use in arts and crafts. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/web.png diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index a7144cdda57..f69d6a794a3 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -13,7 +13,7 @@ id: ActionScream name: Scream description: AAAAAAAAAAAAAAAAAAAAAAAAA - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 10 @@ -25,7 +25,7 @@ id: ActionTurnUndead name: Turn Undead description: Succumb to your infection and become a zombie. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -37,7 +37,7 @@ id: ActionToggleLight name: Toggle Light description: Turn the light on and off. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Objects/Tools/flashlight.rsi, state: flashlight } @@ -48,7 +48,7 @@ id: ActionOpenStorageImplant name: Open Storage Implant description: Opens the storage implant embedded under your skin - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigAction @@ -63,7 +63,7 @@ id: ActionActivateMicroBomb name: Activate Microbomb description: Activates your internal microbomb, completely destroying you and your equipment - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -80,7 +80,7 @@ id: ActionActivateDeathAcidifier name: Activate Death-Acidifier description: Activates your death-acidifier, completely melting you and your equipment - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -96,7 +96,7 @@ id: ActionActivateFreedomImplant name: Break Free description: Activating your freedom implant will free you from any hand restraints - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction charges: 3 @@ -112,7 +112,7 @@ id: ActionOpenUplinkImplant name: Open Uplink description: Opens the syndicate uplink embedded under your skin - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigAction @@ -126,7 +126,7 @@ id: ActionActivateEmpImplant name: Activate EMP description: Triggers a small EMP pulse around you - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -143,7 +143,7 @@ id: ActionActivateScramImplant name: SCRAM! description: Randomly teleports you within a large distance. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -160,7 +160,7 @@ id: ActionActivateDnaScramblerImplant name: Scramble DNA description: Randomly changes your name and appearance. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction charges: 1 @@ -175,7 +175,7 @@ id: ActionMorphGeras name: Morph into Geras description: Morphs you into a Geras - a miniature version of you which allows you to move fast, at the cost of your inventory. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigAction @@ -190,7 +190,7 @@ id: ActionToggleSuitPiece name: Toggle Suit Piece description: Remember to equip the important pieces of your suit before going into action. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigItem @@ -201,7 +201,7 @@ id: ActionCombatModeToggle name: "[color=red]Combat Mode[/color]" description: Enter combat mode - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -216,7 +216,7 @@ parent: ActionCombatModeToggle name: "[color=red]Combat Mode[/color]" description: Enter combat mode - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction enabled: false @@ -227,7 +227,7 @@ id: ActionChangeVoiceMask name: Set name description: Change the name others hear to something else. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/voice-mask.rsi, state: icon } @@ -237,7 +237,7 @@ id: ActionVendingThrow name: Dispense Item description: Randomly dispense an item from your stock. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 30 @@ -247,7 +247,7 @@ id: ActionArtifactActivate name: Activate Artifact description: Immediately activates your current artifact node. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: @@ -260,7 +260,7 @@ id: ActionToggleBlock name: Block description: Raise or lower your shield. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Objects/Weapons/Melee/shields.rsi, state: teleriot-icon } @@ -271,7 +271,7 @@ id: ActionClearNetworkLinkOverlays name: Clear network link overlays description: Clear network link overlays. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction clientExclusive: true @@ -285,7 +285,7 @@ id: ActionAnimalLayEgg name: Lay egg description: Uses hunger to lay an egg. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Objects/Consumable/Food/egg.rsi, state: icon } @@ -296,7 +296,7 @@ id: ActionSleep name: Sleep description: Go to sleep. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -308,7 +308,7 @@ id: ShadowkinActionSleep name: action-name-shadowkin-rest description: action-description-shadowkin-rest - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -320,7 +320,7 @@ id: ActionWake name: Wake up description: Stop sleeping. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Head/Hats/pyjamasyndicatered.rsi, state: icon } @@ -332,7 +332,7 @@ id: ActionActivateHonkImplant name: Honk description: Activates your honking implant, which will produce the signature sound of the clown. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Objects/Fun/bikehorn.rsi, state: icon } @@ -343,7 +343,7 @@ id: ActionFireStarter name: Ignite description: Ignites enemies in a radius around you. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction priority: -1 @@ -355,7 +355,7 @@ id: ActionToggleEyes name: Open/Close eyes description: Close your eyes to protect your peepers, or open your eyes to enjoy the pretty lights. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/eyeopen.png @@ -369,7 +369,7 @@ id: ActionToggleWagging name: action-name-toggle-wagging description: action-description-toggle-wagging - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Interface/Actions/wagging.rsi, state: icon } @@ -382,7 +382,7 @@ id: ActionFabricateLollipop name: action-name-fabricate-lollipop description: action-description-fabricate-lollipop - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi, state: lollipop } @@ -395,7 +395,7 @@ id: ActionFabricateGumball name: action-name-fabricate-gumball description: action-description-fabricate-gumball - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Nyanotrasen/Objects/Consumable/Food/candy.rsi, state: gumball } diff --git a/Resources/Prototypes/Alerts/categories.yml b/Resources/Prototypes/Alerts/categories.yml new file mode 100644 index 00000000000..1e79d2615bb --- /dev/null +++ b/Resources/Prototypes/Alerts/categories.yml @@ -0,0 +1,38 @@ +- type: alertCategory + id: Pressure + +- type: alertCategory + id: Temperature + +- type: alertCategory + id: Breathing + +- type: alertCategory + id: Buckled + +- type: alertCategory + id: Health + +- type: alertCategory + id: Internals + +- type: alertCategory + id: Stamina + +- type: alertCategory + id: Piloting + +- type: alertCategory + id: Hunger + +- type: alertCategory + id: Thirst + +- type: alertCategory + id: Toxins + +- type: alertCategory + id: Battery + +- type: alertCategory + id: Mood diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 2f50821df35..44369ffe73c 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -34,7 +34,7 @@ id: OrganAnimalLungs parent: BaseAnimalOrgan name: lungs - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -65,7 +65,7 @@ id: OrganAnimalStomach parent: BaseAnimalOrgan name: stomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: stomach @@ -91,7 +91,7 @@ id: OrganMouseStomach parent: OrganAnimalStomach name: stomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SolutionContainerManager solutions: @@ -102,7 +102,7 @@ id: OrganAnimalLiver parent: BaseAnimalOrgan name: liver - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: liver @@ -118,7 +118,7 @@ id: OrganAnimalHeart parent: BaseAnimalOrgan name: heart - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: heart-on @@ -135,7 +135,7 @@ id: OrganAnimalKidneys parent: BaseAnimalOrgan name: kidneys - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: diff --git a/Resources/Prototypes/Body/Organs/Animal/bloodsucker.yml b/Resources/Prototypes/Body/Organs/Animal/bloodsucker.yml index 8a1afc37bb1..10cf620addc 100644 --- a/Resources/Prototypes/Body/Organs/Animal/bloodsucker.yml +++ b/Resources/Prototypes/Body/Organs/Animal/bloodsucker.yml @@ -2,7 +2,7 @@ id: OrganBloodsuckerStomach parent: OrganAnimalStomach name: stomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Metabolizer metabolizerTypes: [ Bloodsucker ] @@ -11,7 +11,7 @@ id: OrganBloodsuckerLiver parent: OrganAnimalLiver name: liver - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Metabolizer metabolizerTypes: [ Bloodsucker ] @@ -20,7 +20,7 @@ id: OrganBloodsuckerHeart parent: OrganAnimalHeart name: heart - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Metabolizer metabolizerTypes: [ Bloodsucker ] diff --git a/Resources/Prototypes/Body/Organs/Animal/ruminant.yml b/Resources/Prototypes/Body/Organs/Animal/ruminant.yml index 3c3062ddec0..6bd7c2d4024 100644 --- a/Resources/Prototypes/Body/Organs/Animal/ruminant.yml +++ b/Resources/Prototypes/Body/Organs/Animal/ruminant.yml @@ -2,7 +2,7 @@ id: OrganAnimalRuminantStomach parent: OrganAnimalStomach name: ruminant stomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SolutionContainerManager solutions: diff --git a/Resources/Prototypes/Body/Organs/Friendstomach.yml b/Resources/Prototypes/Body/Organs/Friendstomach.yml index a20bbbe75bc..8dc992b08fb 100644 --- a/Resources/Prototypes/Body/Organs/Friendstomach.yml +++ b/Resources/Prototypes/Body/Organs/Friendstomach.yml @@ -1,7 +1,7 @@ - type: entity id: OrganFriendStomach parent: OrganAnimalStomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Stomach - type: SolutionContainerManager diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index c1e199e1121..29ca393d137 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -105,7 +105,7 @@ parent: BaseHumanOrgan name: liver description: "Pairing suggestion: chianti and fava beans." - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: liver @@ -122,7 +122,7 @@ parent: BaseHumanOrgan name: kidneys description: "Filters toxins from the bloodstream." - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index a2133f7f90a..6442ff3ee22 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -127,7 +127,7 @@ - type: entity id: OrganDionaBrainNymph parent: OrganDionaBrain - noSpawn: true + categories: [ HideSpawnMenu ] name: brain description: "The source of incredible, unending intelligence. Honk." components: @@ -139,7 +139,7 @@ - type: entity id: OrganDionaStomachNymph parent: OrganDionaStomach - noSpawn: true + categories: [ HideSpawnMenu ] name: stomach description: "Gross. This is hard to stomach." components: @@ -149,7 +149,7 @@ - type: entity id: OrganDionaLungsNymph parent: OrganDionaLungs - noSpawn: true + categories: [ HideSpawnMenu ] name: lungs description: "Filters oxygen from an atmosphere, which is then sent into the bloodstream to be used as an electron carrier." components: @@ -160,7 +160,7 @@ - type: entity id: OrganDionaNymphBrain parent: MobDionaNymph - noSpawn: true + categories: [ HideSpawnMenu ] name: diona nymph suffix: Brain description: Contains the brain of a formerly fully-formed Diona. Killing this would kill the Diona forever. You monster. @@ -172,7 +172,7 @@ - type: entity id: OrganDionaNymphStomach parent: MobDionaNymphAccent - noSpawn: true + categories: [ HideSpawnMenu ] name: diona nymph suffix: Stomach description: Contains the stomach of a formerly fully-formed Diona. It doesn't taste any better for it. @@ -184,7 +184,7 @@ - type: entity id: OrganDionaNymphLungs parent: MobDionaNymphAccent - noSpawn: true + categories: [ HideSpawnMenu ] name: diona nymph suffix: Lungs description: Contains the lungs of a formerly fully-formed Diona. Breathtaking. diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml index 9b94e77b7eb..d1c9c164f02 100644 --- a/Resources/Prototypes/Body/Organs/moth.yml +++ b/Resources/Prototypes/Body/Organs/moth.yml @@ -1,7 +1,7 @@ - type: entity id: OrganMothStomach parent: [OrganAnimalStomach, OrganHumanStomach] - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Stomach specialDigestible: diff --git a/Resources/Prototypes/Body/Organs/reptilian.yml b/Resources/Prototypes/Body/Organs/reptilian.yml index f8423582cc2..34c736aec8b 100644 --- a/Resources/Prototypes/Body/Organs/reptilian.yml +++ b/Resources/Prototypes/Body/Organs/reptilian.yml @@ -1,7 +1,7 @@ - type: entity id: OrganReptilianStomach parent: OrganAnimalStomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Stomach specialDigestible: diff --git a/Resources/Prototypes/Body/Parts/animal.yml b/Resources/Prototypes/Body/Parts/animal.yml index 76eaf79812f..abd34c0ef5a 100644 --- a/Resources/Prototypes/Body/Parts/animal.yml +++ b/Resources/Prototypes/Body/Parts/animal.yml @@ -36,7 +36,7 @@ id: HandsAnimal name: animal hands parent: PartAnimal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -50,7 +50,7 @@ id: LegsAnimal name: animal legs parent: PartAnimal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -64,7 +64,7 @@ id: FeetAnimal name: animal feet parent: PartAnimal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -77,7 +77,7 @@ id: TorsoAnimal name: animal torso parent: PartAnimal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: diff --git a/Resources/Prototypes/Body/Parts/rat.yml b/Resources/Prototypes/Body/Parts/rat.yml index 6a66eecc489..bd51e006f70 100644 --- a/Resources/Prototypes/Body/Parts/rat.yml +++ b/Resources/Prototypes/Body/Parts/rat.yml @@ -4,7 +4,7 @@ id: TorsoRat name: "animal torso" parent: PartAnimal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: BodyPart partType: Torso diff --git a/Resources/Prototypes/Body/Parts/silicon.yml b/Resources/Prototypes/Body/Parts/silicon.yml index 24d88276ccb..57cd1f02cf4 100644 --- a/Resources/Prototypes/Body/Parts/silicon.yml +++ b/Resources/Prototypes/Body/Parts/silicon.yml @@ -105,4 +105,4 @@ partType: Torso - type: Tag tags: - - Trash + - Trash \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml index da46ae75979..d66fb5d38b1 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -1,10 +1,10 @@ - type: entity parent: ClothingBackpack id: ClothingBackpackFilled - noSpawn: true + categories: [ HideSpawnMenu ] - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackClown id: ClothingBackpackClownFilled components: @@ -15,7 +15,7 @@ - id: CrayonRainbow - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSecurity id: ClothingBackpackSecurityFilled components: @@ -24,7 +24,7 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackBrigmedic id: ClothingBackpackBrigmedicFilled components: @@ -40,7 +40,7 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSecurity id: ClothingBackpackSecurityFilledDetective components: @@ -52,12 +52,12 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMedical id: ClothingBackpackMedicalFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMedical id: ClothingBackpackParamedicFilled components: @@ -66,7 +66,7 @@ - id: EmergencyRollerBedSpawnFolded - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackCaptain id: ClothingBackpackCaptainFilled components: @@ -76,7 +76,7 @@ #- name: StationCharter #- name: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackEngineering id: ClothingBackpackChiefEngineerFilled components: @@ -86,7 +86,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackScience id: ClothingBackpackResearchDirectorFilled components: @@ -96,7 +96,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackHOPFilled components: @@ -106,7 +106,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMedical id: ClothingBackpackCMOFilled components: @@ -116,7 +116,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackCargo id: ClothingBackpackQuartermasterFilled components: @@ -126,7 +126,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSecurity id: ClothingBackpackHOSFilled components: @@ -136,32 +136,32 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackEngineering id: ClothingBackpackEngineeringFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackAtmospherics id: ClothingBackpackAtmosphericsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackScience id: ClothingBackpackScienceFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackRobotics id: ClothingBackpackRoboticsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackHydroponics id: ClothingBackpackHydroponicsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMime id: ClothingBackpackMimeFilled components: @@ -170,22 +170,22 @@ - id: RubberStampMime - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackChemistry id: ClothingBackpackChemistryFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackChaplainFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackMusicianFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackLibrarianFilled components: @@ -194,7 +194,7 @@ - id: BookRandom - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackDetectiveFilled components: @@ -208,7 +208,7 @@ # ERT - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTLeader id: ClothingBackpackERTLeaderFilled components: @@ -223,7 +223,7 @@ - id: MagazineMagnum - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTSecurity id: ClothingBackpackERTSecurityFilled components: @@ -238,7 +238,7 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTMedical id: ClothingBackpackERTMedicalFilled components: @@ -253,7 +253,7 @@ - id: EpinephrineChemistryBottle - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTEngineer id: ClothingBackpackERTEngineerFilled components: @@ -272,7 +272,7 @@ - id: SheetGlass - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTJanitor id: ClothingBackpackERTJanitorFilled components: @@ -287,7 +287,7 @@ - id: AdvMopItem - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackERTChaplain id: ClothingBackpackERTChaplainFilled components: @@ -310,7 +310,6 @@ # Death Squad - type: entity - noSpawn: false parent: ClothingBackpackERTSecurity id: ClothingBackpackDeathSquadFilled name: death squad backpack @@ -337,12 +336,12 @@ # Cargo - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackCargo id: ClothingBackpackCargoFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSalvage id: ClothingBackpackSalvageFilled diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 07cbbeb6caa..525a4a13cec 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -1,10 +1,10 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelClown id: ClothingBackpackDuffelClownFilled components: @@ -13,7 +13,7 @@ - id: RubberStampClown - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelBrigmedic id: ClothingBackpackDuffelBrigmedicFilled components: @@ -29,7 +29,7 @@ amount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelSecurity id: ClothingBackpackDuffelSecurityFilled components: @@ -38,7 +38,7 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelSecurity id: ClothingBackpackDuffelSecurityFilledDetective components: @@ -48,12 +48,12 @@ - id: ForensicScanner - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMedical id: ClothingBackpackDuffelMedicalFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMedical id: ClothingBackpackDuffelParamedicFilled components: @@ -62,7 +62,7 @@ - id: EmergencyRollerBedSpawnFolded - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelCaptain id: ClothingBackpackDuffelCaptainFilled components: @@ -73,7 +73,7 @@ #- name: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelEngineering id: ClothingBackpackDuffelChiefEngineerFilled components: @@ -83,7 +83,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelScience id: ClothingBackpackDuffelResearchDirectorFilled components: @@ -93,7 +93,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelHOPFilled components: @@ -103,7 +103,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMedical id: ClothingBackpackDuffelCMOFilled components: @@ -113,7 +113,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelCargo id: ClothingBackpackDuffelQuartermasterFilled components: @@ -123,7 +123,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelSecurity id: ClothingBackpackDuffelHOSFilled components: @@ -133,32 +133,32 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelEngineering id: ClothingBackpackDuffelEngineeringFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelAtmospherics id: ClothingBackpackDuffelAtmosphericsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelScience id: ClothingBackpackDuffelScienceFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelRobotics id: ClothingBackpackDuffelRoboticsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelHydroponics id: ClothingBackpackDuffelHydroponicsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMime id: ClothingBackpackDuffelMimeFilled components: @@ -167,12 +167,12 @@ - id: RubberStampMime - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelChemistry id: ClothingBackpackDuffelChemistryFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelChaplainFilled components: @@ -182,7 +182,7 @@ - id: RubberStampChaplain - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelMusicianFilled components: @@ -192,7 +192,7 @@ - id: SaxophoneInstrument - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelLibrarianFilled components: @@ -201,7 +201,7 @@ - id: BookRandom - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelDetectiveFilled components: @@ -213,11 +213,11 @@ - id: HandLabeler - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelCargo id: ClothingBackpackDuffelCargoFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelSalvage id: ClothingBackpackDuffelSalvageFilled diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml index e20e27e55ca..7854b34c8e7 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -1,10 +1,10 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelTools components: @@ -27,7 +27,7 @@ - id: RubberStampClown - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelBrigmedic id: ClothingBackpackSatchelBrigmedicFilled components: @@ -42,7 +42,7 @@ amount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelSecurity id: ClothingBackpackSatchelSecurityFilled components: @@ -51,7 +51,7 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelSecurity id: ClothingBackpackSatchelSecurityFilledDetective components: @@ -61,12 +61,12 @@ - id: ForensicScanner - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMedical id: ClothingBackpackSatchelMedicalFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMedical id: ClothingBackpackSatchelParamedicFilled components: @@ -75,7 +75,7 @@ - id: EmergencyRollerBedSpawnFolded - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelCaptain id: ClothingBackpackSatchelCaptainFilled components: @@ -86,7 +86,7 @@ #- name: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelEngineering id: ClothingBackpackSatchelChiefEngineerFilled components: @@ -96,7 +96,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelScience id: ClothingBackpackSatchelResearchDirectorFilled components: @@ -106,7 +106,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelHOPFilled components: @@ -116,7 +116,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMedical id: ClothingBackpackSatchelCMOFilled components: @@ -126,7 +126,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelCargo id: ClothingBackpackSatchelQuartermasterFilled components: @@ -136,7 +136,7 @@ #- id: TelescopicBaton - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelSecurity id: ClothingBackpackSatchelHOSFilled components: @@ -146,37 +146,37 @@ - id: MagazinePistol - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelEngineering id: ClothingBackpackSatchelEngineeringFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelAtmospherics id: ClothingBackpackSatchelAtmosphericsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelScience id: ClothingBackpackSatchelScienceFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelRobotics id: ClothingBackpackSatchelRoboticsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelHydroponics id: ClothingBackpackSatchelHydroponicsFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelChemistry id: ClothingBackpackSatchelChemistryFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelChaplainFilled components: @@ -186,7 +186,7 @@ - id: RubberStampChaplain - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelMusicianFilled components: @@ -196,7 +196,7 @@ - id: SaxophoneInstrument - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelLibrarianFilled components: @@ -205,7 +205,7 @@ - id: BookRandom - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelDetectiveFilled components: @@ -217,17 +217,17 @@ - id: HandLabeler - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelCargo id: ClothingBackpackSatchelCargoFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelSalvage id: ClothingBackpackSatchelSalvageFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMime id: ClothingBackpackSatchelMimeFilled components: @@ -236,7 +236,7 @@ - id: RubberStampMime - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelHolding id: ClothingBackpackSatchelHoldingAdmin components: diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index a6f12bc727e..4805651fda9 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -1,3 +1,101 @@ +- type: entityTable + id: AllPlushiesTable + table: !type:GroupSelector + children: + - !type:EntSelector + id: PlushieBee + - !type:EntSelector + id: PlushieNar + weight: 0.5 + - !type:EntSelector + id: PlushieRatvar + weight: 0.5 + - !type:EntSelector + id: PlushieNuke + - !type:EntSelector + id: PlushieSlime + - !type:EntSelector + id: PlushieSnake + - !type:GroupSelector + children: + - !type:EntSelector + id: PlushieLizard + weight: 9 + - !type:EntSelector + id: PlushieSpaceLizard + weight: 1 + - !type:GroupSelector + children: + - !type:EntSelector + id: PlushieCarp + - !type:EntSelector + id: PlushieHolocarp + weight: 0.25 + - !type:EntSelector + id: PlushieMagicarp + weight: 0.25 + - !type:EntSelector + id: PlushieRainbowCarp + weight: 0.15 + - !type:EntSelector + id: PlushieVox + - !type:EntSelector + id: PlushieRouny + - !type:GroupSelector + children: + - !type:EntSelector + id: PlushieSharkBlue + - !type:EntSelector + id: PlushieSharkGrey + - !type:EntSelector + id: PlushieSharkPink + - !type:EntSelector + id: PlushieAtmosian + - !type:EntSelector + id: PlushieDiona + - !type:EntSelector + id: PlushieXeno + - !type:EntSelector + id: PlushieHampter + - !type:EntSelector + id: PlushieMoth + - !type:EntSelector + id: PlushieArachind + - !type:EntSelector + id: PlushiePenguin + +- type: entity + id: CrateFunPlushie + parent: CrateGenericSteel + name: plushie crate + description: A buncha soft plushies. Throw them around and then wonder how you're gonna explain this purchase to NT. + components: + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: AllPlushiesTable + rolls: !type:ConstantNumberSelector + value: 10 + +- type: entity + id: CrateFunLizardPlushieBulk + parent: CrateGenericSteel + name: bulk lizard plushie crate + description: A buncha soft lizard plushies. Throw them around and then wonder how you're gonna explain this purchase to NT. + components: + - type: EntityTableContainerFill + containers: + entity_storage: !type:AllSelector + children: + - !type:EntSelector + id: PlushieLizard + amount: !type:ConstantNumberSelector + value: 3 + - !type:EntSelector + id: PlushieSpaceLizard + amount: !type:ConstantNumberSelector + value: 3 + - type: entity id: CrateFunInstrumentsVariety parent: CrateGenericSteel diff --git a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml index c1168f68d42..7313de7700b 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml @@ -28,7 +28,7 @@ - type: entity id: CrateSalvageAssortedGoodies suffix: Filled, Salvage Random - noSpawn: true # You should use SalvageMaterialCrateSpawner instead + categories: [ HideSpawnMenu ] # You should use SalvageMaterialCrateSpawner instead parent: CrateGenericSteel components: - type: StorageFill diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index feaedd924a0..052ce95be2f 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -3,323 +3,236 @@ suffix: Filled parent: LockerSyndicatePersonal components: - - type: StorageFill - contents: - - id: ClothingBeltMilitaryWebbing - - id: ClothingHandsGlovesCombat - - id: JetpackBlackFilled - - id: ClothingUniformJumpsuitOperative - - id: ClothingUniformJumpskirtOperative - - id: ClothingHeadsetAltSyndicate - - id: ClothingEyesHudSyndicate + - type: EntityTableContainerFill + containers: + entity_storage: !type:AllSelector + children: + - !type:EntSelector + id: ClothingBeltMilitaryWebbing + - !type:EntSelector + id: ClothingHandsGlovesCombat + - !type:EntSelector + id: JetpackBlackFilled + - !type:EntSelector + id: ClothingUniformJumpsuitOperative + - !type:EntSelector + id: ClothingUniformJumpskirtOperative + - !type:EntSelector + id: ClothingHeadsetAltSyndicate + - !type:EntSelector + id: ClothingEyesHudSyndicate + +- type: entityTable + id: FillLockerEmergencyStandard + table: !type:AllSelector + children: + - !type:EntSelector + id: ClothingMaskBreath + - !type:EntSelector + id: ClothingOuterSuitEmergency + - !type:GroupSelector + children: + - !type:EntSelector + id: EmergencyOxygenTankFilled + - !type:EntSelector + id: OxygenTankFilled + - !type:EntSelector + id: ToolboxEmergencyFilled + prob: 0.5 + - !type:EntSelector + id: MedkitOxygenFilled + prob: 0.2 + - !type:EntSelector + id: WeaponFlareGun + prob: 0.05 + - !type:EntSelector + id: BoxMRE + prob: 0.1 - type: entity id: ClosetEmergencyFilledRandom parent: ClosetEmergency suffix: Filled, Random components: - - type: StorageFill - contents: - - id: ClothingOuterSuitEmergency - - id: ClothingMaskBreath - - id: EmergencyOxygenTankFilled - prob: 0.80 - orGroup: EmergencyTankOrRegularTank - - id: OxygenTankFilled - prob: 0.20 - orGroup: EmergencyTankOrRegularTank - - id: ToolboxEmergencyFilled - prob: 0.4 - - id: MedkitOxygenFilled - prob: 0.2 - - id: WeaponFlareGun - prob: 0.05 - - id: BoxMRE - prob: 0.1 + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: FillLockerEmergencyStandard - type: entity id: ClosetWallEmergencyFilledRandom parent: ClosetWallEmergency suffix: Filled, Random components: - - type: StorageFill - contents: - - id: ClothingOuterSuitEmergency - - id: ClothingMaskBreath - - id: EmergencyOxygenTankFilled - prob: 0.80 - orGroup: EmergencyTankOrRegularTank - - id: OxygenTankFilled - prob: 0.20 - orGroup: EmergencyTankOrRegularTank - - id: ToolboxEmergencyFilled - prob: 0.4 - - id: MedkitOxygenFilled - prob: 0.2 - - id: WeaponFlareGun - prob: 0.05 - - id: BoxMRE - prob: 0.1 + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: FillLockerEmergencyStandard - type: entity id: ClosetEmergencyN2FilledRandom parent: ClosetEmergencyN2 suffix: Filled, Random components: - - type: StorageFill - contents: - - id: ClothingMaskBreath - - id: EmergencyNitrogenTankFilled - prob: 0.80 - orGroup: EmergencyTankOrRegularTank - - id: NitrogenTankFilled - prob: 0.20 - orGroup: EmergencyTankOrRegularTank + - type: EntityTableContainerFill + containers: + entity_storage: !type:AllSelector + children: + - !type:EntSelector + id: ClothingMaskBreath + - !type:EntSelector + id: ClothingOuterSuitEmergency + - !type:GroupSelector + children: + - !type:EntSelector + id: EmergencyNitrogenTankFilled + - !type:EntSelector + id: NitrogenTankFilled + +- type: entityTable + id: FillLockerFireStandard + table: !type:AllSelector + children: + - !type:EntSelector + id: ClothingOuterSuitFire + - !type:EntSelector + id: ClothingHeadHelmetFire + - !type:EntSelector + id: ClothingMaskGas + - !type:GroupSelector + children: + - !type:EntSelector + id: EmergencyOxygenTankFilled + - !type:EntSelector + id: OxygenTankFilled + - !type:EntSelector + id: CrowbarRed + - !type:GroupSelector + children: + - !type:EntSelector + id: FireExtinguisher + weight: 98 + - !type:EntSelector + id: SprayBottleWater #It's just budget cut after budget cut man + weight: 2 - type: entity id: ClosetFireFilled parent: ClosetFire suffix: Filled components: - - type: StorageFill - contents: - - id: ClothingOuterSuitFire - - id: ClothingHeadHelmetFire - - id: ClothingMaskGas - - id: OxygenTankFilled - - id: FireExtinguisher - prob: 0.25 + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: FillLockerFireStandard + - type: entity id: ClosetWallFireFilledRandom parent: ClosetWallFire suffix: Filled components: - - type: StorageFill - contents: - - id: ClothingOuterSuitFire - - id: ClothingHeadHelmetFire - - id: ClothingMaskGas - - id: OxygenTankFilled - - id: FireExtinguisher - prob: 0.25 + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: FillLockerFireStandard + +- type: entityTable + id: SyndieMaintLoot + table: !type:GroupSelector + children: + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingUniformJumpsuitOperative + - !type:EntSelector + id: ClothingUniformJumpskirtOperative + - !type:EntSelector + id: ClothingBackpackDuffelSyndicate + - !type:EntSelector + id: CyberPen + - !type:EntSelector + id: CigPackSyndicate + - !type:EntSelector + id: ClothingBackpackDuffelSyndicatePyjamaBundle + - !type:EntSelector + id: ClothingBeltMilitaryWebbing + - !type:EntSelector + id: ClothingShoesBootsCombatFilled + - !type:EntSelector + id: ToolboxSyndicateFilled + - !type:EntSelector + id: BalloonSyn + - !type:EntSelector + id: WeaponSniperMosin + weight: 2 + +- type: entityTable + id: MaintenanceLockerLoot + table: !type:AllSelector + children: + - !type:EntSelector + id: StrangePill + prob: 0.20 + # Tools + - !type:NestedSelector + tableId: MaintToolsTable + rolls: !type:RangeNumberSelector + range: 1, 5 + # Fluff + - !type:NestedSelector + tableId: MaintFluffTable + prob: 0.33 + rolls: !type:RangeNumberSelector + range: 0, 2 + # Plushies + - !type:NestedSelector + tableId: AllPlushiesTable + prob: 0.10 + rolls: !type:RangeNumberSelector + range: 1, 2 + # Weapons + - !type:NestedSelector + tableId: MaintWeaponTable + prob: 0.075 + # Syndie Loot + - !type:NestedSelector + tableId: SyndieMaintLoot + prob: 0.05 + - type: entity id: ClosetMaintenanceFilledRandom suffix: Filled, Random parent: ClosetMaintenance components: - - type: StorageFill - contents: - - id: Lantern - prob: 0.50 - - id: Wirecutter - prob: 0.33 - - id: Screwdriver - prob: 0.33 - - id: Wrench - prob: 0.33 - - id: Crowbar - prob: 0.50 - - id: Welder - prob: 0.33 - - id: Multitool - prob: 0.10 - - id: Soap - prob: 0.44 - - id: PlushieCarp - prob: 0.2 - orGroup: carp - - id: PlushieHolocarp - prob: 0.05 - orGroup: carp - - id: PlushieMagicarp - prob: 0.05 - orGroup: carp - - id: PlushieRainbowCarp - prob: 0.03 - orGroup: carp - - id: PlushieSlime - prob: 0.2 - - id: PlushieSnake - prob: 0.2 - - id: ClothingShoesSkates - prob: 0.1 - - id: ClothingHandsGlovesColorYellow - prob: 0.05 - - id: ClothingHandsGlovesFingerlessInsulated - prob: 0.07 - - id: ClothingBeltUtility - prob: 0.10 - - id: ClothingHeadHatCone - prob: 0.2 - - id: WeaponFlareGun - prob: 0.1 - - id: ClothingHandsGlovesColorYellowBudget - prob: 0.25 - - id: StrangePill - prob: 0.20 - - id: DeathPaint - prob: 0.05 - - id: DeathPaintTwo - prob: 0.05 - - id: DrinkMopwataBottleRandom - prob: 0.20 - - id: ModularReceiver - prob: 0.1 - - id: DrinkSpaceGlue - prob: 0.20 - - id: DrinkSpaceLube - prob: 0.20 - - id: BarberScissors - prob: 0.05 - - id: BookRandomStory - prob: 0.1 - # Syndicate loot - - id: null - prob: 0.95 - orGroup: syndiemaintloot - - id: ClothingUniformJumpskirtOperative - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingUniformJumpsuitOperative - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingBackpackDuffelSyndicate - prob: 0.005 - orGroup: syndiemaintloot - #- id: CyberPen # DeltaV - Nuh uh - # prob: 0.005 - # orGroup: syndiemaintloot - #- id: CigPackSyndicate - # prob: 0.005 - # orGroup: syndiemaintloot - - id: ClothingBackpackDuffelSyndicatePyjamaBundle - prob: 0.005 - orGroup: syndiemaintloot - #- id: ClothingBeltMilitaryWebbing - # prob: 0.005 - # orGroup: syndiemaintloot - #- id: ClothingShoesBootsCombatFilled - # prob: 0.005 - # orGroup: syndiemaintloot - #- id: ToolboxSyndicateFilled - # prob: 0.005 - # orGroup: syndiemaintloot - #- id: BalloonSyn - # prob: 0.005 - # orGroup: syndiemaintloot - #- id: WeaponSniperMosin - # prob: 0.0010 - # orGroup: syndiemaintloot + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: MaintenanceLockerLoot - type: entity id: ClosetWallMaintenanceFilledRandom parent: ClosetWall suffix: Filled, Random components: - - type: StorageFill - contents: - - id: Lantern - prob: 0.50 - - id: Wirecutter - prob: 0.33 - - id: Screwdriver - prob: 0.33 - - id: Wrench - prob: 0.33 - - id: Crowbar - prob: 0.50 - - id: Welder - prob: 0.33 - - id: Multitool - prob: 0.10 - - id: Soap - prob: 0.44 - - id: PlushieCarp - prob: 0.2 - orGroup: carp - - id: PlushieHolocarp - prob: 0.05 - orGroup: carp - - id: PlushieMagicarp - prob: 0.05 - orGroup: carp - - id: PlushieRainbowCarp - prob: 0.03 - orGroup: carp - - id: PlushieSlime - prob: 0.2 - - id: PlushieSnake - prob: 0.2 - - id: ClothingHandsGlovesColorYellow - prob: 0.05 - - id: ClothingBeltQuiver - prob: 0.02 - - id: ClothingBeltUtility - prob: 0.10 - - id: ClothingHeadHatCone - prob: 0.2 - - id: WeaponFlareGun - prob: 0.1 - - id: ClothingHandsGlovesColorYellowBudget - prob: 0.25 - - id: StrangePill - prob: 0.20 - - id: DrinkSpaceGlue - prob: 0.20 - - id: ModularReceiver - prob: 0.1 - # Syndicate loot - - id: null - prob: 0.95 - orGroup: syndiemaintloot - - id: ClothingUniformJumpskirtOperative - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingUniformJumpsuitOperative - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingBackpackDuffelSyndicate - prob: 0.005 - orGroup: syndiemaintloot - - id: CyberPen - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingHeadHatOutlawHat - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingEyesGlassesOutlawGlasses - prob: 0.005 - orGroup: syndiemaintloot - - id: CigPackSyndicate - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingBackpackDuffelSyndicatePyjamaBundle - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingBeltMilitaryWebbing - prob: 0.005 - orGroup: syndiemaintloot - - id: ClothingShoesBootsCombatFilled - prob: 0.005 - orGroup: syndiemaintloot - - id: ToolboxSyndicateFilled - prob: 0.005 - orGroup: syndiemaintloot - - id: BalloonSyn - prob: 0.005 - orGroup: syndiemaintloot - - id: WeaponSniperMosin - prob: 0.0010 - orGroup: syndiemaintloot + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: MaintenanceLockerLoot - type: entity id: ClosetWallRadiationFilled suffix: Filled parent: ClosetWallRadiation components: - - type: StorageFill - contents: - - id: ClothingOuterSuitRad - amount: 2 - - id: GeigerCounter - amount: 2 + - type: EntityTableContainerFill + containers: + entity_storage: !type:AllSelector + children: + - !type:EntSelector + id: ClothingOuterSuitRad + amount: !type:ConstantNumberSelector + value: 2 + - !type:EntSelector + id: GeigerCounter + amount: !type:ConstantNumberSelector + value: 2 \ No newline at end of file diff --git a/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml b/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml index cd4eeae1900..228d0dcf1ce 100644 --- a/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml @@ -1,7 +1,7 @@ - type: entity id: OrganVulpkaninStomach parent: OrganAnimalStomach - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Stomach - type: SolutionContainerManager diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml index b73c1d5b4fc..d7cc68ad723 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -12,7 +12,7 @@ - id: BaseBallBat - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMedical id: ClothingBackpackParamedicFilledDV components: @@ -23,7 +23,7 @@ - id: Portafib - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackMedical id: ClothingBackpackPsychologistFilled components: @@ -33,7 +33,7 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpack id: ClothingBackpackLawyerFilled components: diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 50ef77a316f..6ed6dca1edd 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMedical id: ClothingBackpackDuffelParamedicFilledDV components: @@ -10,7 +10,7 @@ - id: Portafib - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelMedical id: ClothingBackpackDuffelPsychologistFilled components: @@ -20,7 +20,7 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffel id: ClothingBackpackDuffelLawyerFilled components: diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml index 99a770e37e1..58d887f47bd 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMedical id: ClothingBackpackSatchelParamedicFilledDV components: @@ -10,7 +10,7 @@ - id: Portafib - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelMedical id: ClothingBackpackSatchelPsychologistFilled components: @@ -20,7 +20,7 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchel id: ClothingBackpackSatchelLawyerFilled components: diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hardsuit-helmets.yml index bdef8822cc5..cfa7d9d26d1 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hardsuit-helmets.yml @@ -2,7 +2,7 @@ - type: entity parent: ClothingHeadHardsuitWithLightBase id: ClothingHeadHelmetHardsuitCombatStandard - noSpawn: true + categories: [ HideSpawnMenu ] name: combat hardsuit helmet description: An armoured helmet with a yellow visor and dual head-mounted lights. components: @@ -37,7 +37,7 @@ - type: entity parent: ClothingHeadHardsuitWithLightBase id: ClothingHeadHelmetHardsuitCombatMedical - noSpawn: true + categories: [ HideSpawnMenu ] name: medical combat hardsuit helmet description: A lightweight armoured helmet with full-face blue visor and head-mounted light. components: @@ -72,7 +72,7 @@ - type: entity parent: ClothingHeadHardsuitWithLightBase id: ClothingHeadHelmetHardsuitCombatRiot - noSpawn: true + categories: [ HideSpawnMenu ] name: riot combat hardsuit helmet description: A heavy armoured helmet with a sealed visor with yellow slits and dual head-mounted lights. components: @@ -107,7 +107,7 @@ - type: entity parent: ClothingHeadHardsuitWithLightBase id: ClothingHeadHelmetHardsuitCombatAdvanced - noSpawn: true + categories: [ HideSpawnMenu ] name: advanced combat hardsuit helmet description: A light but durable helmet with full-face protection and four head-mounted lights. components: diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml index 2782fa4f941..f313d30f8f0 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml @@ -17,7 +17,7 @@ state: full - type: entity # Part of PirateRadioSpawn - noSpawn: true + categories: [ HideSpawnMenu ] id: SpawnPointGhostSyndicateListener name: ghost role spawn point suffix: syndicate listener diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/human.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/human.yml index d539c58496a..5bc30734426 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Player/human.yml @@ -1,5 +1,5 @@ - type: entity # Delta-V : Part of a mid-round PirateRadioSpawn - noSpawn: true + categories: [ HideSpawnMenu ] parent: MobHumanSyndicateAgent id: MobHumanSyndicateListener name: Syndicate Listener diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml index b3027839b1a..dda911ec6dc 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml @@ -122,7 +122,7 @@ name: Vulpkanin Dummy parent: MobHumanDummy id: MobVulpkaninDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy vulpkanin meant to be used in character setup. components: - type: HumanoidAppearance diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml index 4e8392870cd..7dea5b47fe2 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml @@ -3,7 +3,7 @@ id: BionicSyrinxImplant name: bionic syrinx implant description: This implant lets a harpy adjust their voice to whoever they can think of. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionSyrinxChangeVoiceMask diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml index 6f96930078b..43e26db6352 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml @@ -1,6 +1,6 @@ # DeltaV Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailBooksAll # See Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/books.yml suffix: books @@ -168,7 +168,7 @@ # orGroup: bookother - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailPumpkinPie suffix: pumpkinpie @@ -178,7 +178,7 @@ - id: FoodPiePumpkin - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailDVCosplayFakeWizard suffix: cosplay-wizard, fake as fuck @@ -256,7 +256,7 @@ # Frontier Mail, including Extended Nyano Mail. (Pony Express?) - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFAlcohol suffix: alcohol, extended @@ -300,7 +300,7 @@ amount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFBible suffix: bible, extended @@ -312,7 +312,7 @@ - id: ClothingOuterCoatMNKBlackTopCoat #DeltaV - Compensates for items that don't exist here - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFBikeHorn suffix: bike horn, random @@ -327,7 +327,7 @@ prob: 0.05 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFBuildABuddy suffix: Build-a-Buddy @@ -349,7 +349,7 @@ - id: PaperMailNFBuildABuddy - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFCake suffix: cake, extended @@ -411,7 +411,7 @@ amount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCosplayWizard suffix: cosplay-wizard, extended @@ -429,7 +429,7 @@ prob: 0.1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCosplayMaid suffix: cosplay-maid, extended @@ -446,7 +446,7 @@ - id: ClothingHandsGlovesColorWhite - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCosplayNurse suffix: cosplay-nurse, extended @@ -458,7 +458,7 @@ - id: Syringe - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCheese suffix: cheese, extended @@ -476,7 +476,7 @@ - id: KnifePlastic - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCigarettes suffix: cigs, random @@ -511,7 +511,7 @@ - id: CheapLighter - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFEMP suffix: emp @@ -522,7 +522,7 @@ - id: PaperMailNFEMPPreparedness - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSmoke suffix: smoke @@ -532,7 +532,7 @@ - id: DelayedSmoke - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFGoldCigars suffix: cigars, premium @@ -546,7 +546,7 @@ prob: 0.95 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCookies suffix: cookies, random @@ -592,7 +592,7 @@ orGroup: Cookie4 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFKnife suffix: knife, extended @@ -609,7 +609,7 @@ orGroup: Knife - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFSword suffix: sword @@ -645,7 +645,7 @@ prob: 0.001 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFMuffins suffix: muffins, random @@ -703,7 +703,7 @@ prob: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFPAI suffix: PAI, extended @@ -719,7 +719,7 @@ prob: 0.01 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFPlushie suffix: plushie, extended @@ -783,7 +783,7 @@ # Random snacks, replaces MailChocolate (lousy animal organs) - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSnacks suffix: snacks, random @@ -896,7 +896,7 @@ prob: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFVagueThreat suffix: vague-threat @@ -943,7 +943,7 @@ orGroup: ThreateningObject - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFDonkPockets suffix: donk pockets, random @@ -980,7 +980,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSodaPwrGame suffix: Pwrgame @@ -993,7 +993,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSodaRedBool suffix: Red Bool @@ -1006,7 +1006,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSodaSpaceCola suffix: Space Cola @@ -1018,7 +1018,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSodaSpaceMountainWind suffix: Space Mountain Wind @@ -1030,7 +1030,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSodaSpaceUp suffix: Space Up @@ -1042,7 +1042,7 @@ #TODO: we don't have rainbow joints or blunts (yet?). Uncomment when (if?) they are added. - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFJoints suffix: joints @@ -1093,7 +1093,7 @@ # Mmm, mail food # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFUnusualFood suffix: unusual food @@ -1159,7 +1159,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFBakedGoods suffix: baked goods @@ -1306,7 +1306,7 @@ # Needs a buff? - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFUnusualProduce suffix: unusual produce @@ -1357,7 +1357,7 @@ prob: 0.25 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSoaps suffix: soap sampler @@ -1371,7 +1371,7 @@ orGroup: Ad - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFSoapsOmega suffix: soap sampler, omega @@ -1386,7 +1386,7 @@ # Could add spessman battle rules here - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFFigurineBulk # DeltaV - No longer Bulk suffix: figurine, bulk #DeltaV - Spams 3 boxes instead of using the bulk figurine prototype that Frontier uses @@ -1398,7 +1398,7 @@ - id: MysteryFigureBox - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFPen suffix: fancy pen @@ -1426,7 +1426,7 @@ - id: PaperMailNFPaperPusherAd - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFThrongler suffix: throngler @@ -1436,7 +1436,7 @@ - id: ThronglerToy - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFInstrumentSmall suffix: instrument, expanded @@ -1483,7 +1483,7 @@ prob: 0.01 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFUnusualClothing suffix: unusual clothing @@ -1536,7 +1536,7 @@ prob: 0.25 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCritter suffix: critter @@ -1589,7 +1589,7 @@ prob: 0.01 # Rare - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFTacticalMaid suffix: tactical maid @@ -1602,7 +1602,7 @@ - id: ClothingHandsTacticalMaidGloves - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFKendoKit suffix: kendo kit @@ -1620,7 +1620,7 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSake suffix: osake @@ -1632,7 +1632,7 @@ - id: DrinkTokkuri - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailBlockGameDIY suffix: blockgamediy @@ -1642,7 +1642,7 @@ - id: BlockGameArcadeComputerCircuitboard - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCigars suffix: Cigars @@ -1653,7 +1653,7 @@ - id: Lighter - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCrayon suffix: Crayon @@ -1663,7 +1663,7 @@ - id: CrayonBox - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCosplayArc suffix: cosplay-arc @@ -1674,7 +1674,7 @@ - id: ClothingCostumeArcDress - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCosplayGeisha suffix: cosplay-geisha @@ -1687,7 +1687,7 @@ amount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCosplaySchoolgirl suffix: cosplay-schoolgirl @@ -1712,7 +1712,7 @@ orGroup: Color - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailFlowers suffix: flowers @@ -1727,7 +1727,7 @@ - id: FoodLily - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSignallerKit suffix: signallerkit @@ -1738,7 +1738,7 @@ - id: RemoteSignaller - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNoir suffix: noir @@ -1751,7 +1751,7 @@ - id: ClothingOuterCoatGentle - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailRestraints suffix: restraints @@ -1763,7 +1763,7 @@ - id: ClothingEyesBlindfold - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailFishingCap suffix: fishingcap @@ -1773,7 +1773,7 @@ - id: ClothingHeadFishCap - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailFlashlight suffix: Flashlight @@ -1783,7 +1783,7 @@ - id: FlashlightLantern - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSpaceVillainDIY suffix: spacevilliandiy @@ -1793,7 +1793,7 @@ - id: SpaceVillainArcadeComputerCircuitboard - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSunglasses suffix: Sunglasses @@ -1803,7 +1803,7 @@ - id: ClothingEyesGlassesSunglasses - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailWinterCoat suffix: wintercoat diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml index 19a1ee3c536..8b461295053 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_civilian.yml @@ -1,6 +1,6 @@ # Frontier Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFInstrumentLarge suffix: instrument, large @@ -53,7 +53,7 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailBotanistChemicalBottles suffix: botanist chemicals @@ -68,7 +68,7 @@ prob: 0.4 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailBotanistMutagen suffix: mutagen @@ -80,7 +80,7 @@ - id: UnstableMutagenChemistryBottle - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailBotanistSeeds suffix: seeds @@ -129,7 +129,7 @@ orGroup: Seeds - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailClownGildedBikeHorn suffix: honk @@ -140,7 +140,7 @@ - id: BikeHornInstrument - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailClownHonkSupplement suffix: honk @@ -153,7 +153,7 @@ - id: FoodBanana - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailHoPBureaucracy suffix: hop paper @@ -164,7 +164,7 @@ maxAmount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailHoPSupplement suffix: hop supplement @@ -176,7 +176,7 @@ - id: Paper - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMimeArtsCrafts suffix: arts and crafts @@ -188,7 +188,7 @@ maxAmount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMimeBlankBook suffix: blank book @@ -198,7 +198,7 @@ - id: BookRandom - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMimeBottleOfNothing suffix: bottle of nothing @@ -208,7 +208,7 @@ - id: DrinkBottleOfNothingFull - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailPassengerMoney suffix: passenger money diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml index 86dec46a654..d8f6183b9c6 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_command.yml @@ -1,6 +1,6 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCommandPinpointerNuclear suffix: pinpointer mail ops @@ -10,7 +10,7 @@ - id: PinpointerNuclear - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailStationRepNFNukeDisk suffix: nuke disk @@ -22,7 +22,7 @@ - id: PaperMailNFAntivirus - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailCommandNFPipebombIntern suffix: pipe and bomb diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml index af70fc621cb..2d3132e7f04 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_engineering.yml @@ -1,6 +1,6 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEngineeringCables suffix: cables @@ -15,7 +15,7 @@ orGroup: Cables - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEngineeringKudzuDeterrent suffix: antikudzu @@ -25,7 +25,7 @@ - id: PlantBGoneSpray - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEngineeringSheetGlass suffix: sheetglass @@ -35,7 +35,7 @@ - id: SheetGlass - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEngineeringWelderReplacement suffix: welder @@ -47,7 +47,7 @@ # Frontier Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCircuitboardIndustrial suffix: industrial circuitboard @@ -113,7 +113,7 @@ prob: 0.1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailNFCircuitboardService suffix: service circuitboard @@ -155,7 +155,7 @@ prob: 0.1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailNFPowerTool suffix: power tool diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml index be6f9818e22..0006a0af023 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_epistemology.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEpistemologyBluespace suffix: bluespace @@ -9,7 +9,7 @@ - id: MaterialBluespace1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEpistemologyIngotGold suffix: ingotgold @@ -20,7 +20,7 @@ maxAmount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEpistemologyResearchDisk suffix: researchdisk @@ -38,7 +38,7 @@ prob: 0.1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailEpistemologyTinfoilHat suffix: tinfoilhat diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml index 735f840a201..f19a3950b91 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_medical.yml @@ -1,6 +1,6 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalBasicSupplies suffix: basicmedical @@ -15,7 +15,7 @@ maxAmount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalChemistrySupplement suffix: chemsupp @@ -31,7 +31,7 @@ maxAmount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalEmergencyPens suffix: medipens @@ -42,7 +42,7 @@ maxAmount: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalMedicinePills suffix: medicinepills @@ -57,7 +57,7 @@ maxAmount: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalSheetPlasma suffix: sheetplasma @@ -67,7 +67,7 @@ - id: SheetPlasma1 #- type: entity -# noSpawn: true +# categories: [ HideSpawnMenu ] # parent: BaseMail # id: MailMedicalSpaceacillin # suffix: spaceacillin @@ -79,7 +79,7 @@ # Awaiting diseases - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailMedicalStabilizers suffix: stabilizers diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml index eed846a0909..c1880eb4d4a 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail_security.yml @@ -1,6 +1,6 @@ # Base Nyano Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSecurityDonuts suffix: donuts @@ -10,7 +10,7 @@ - id: FoodBoxDonut - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSecurityFlashlight suffix: seclite @@ -20,7 +20,7 @@ - id: FlashlightSeclite - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSecurityNonlethalsKit suffix: nonlethalskit @@ -45,7 +45,7 @@ # Will we ever readd hyperlinks books? Who knows! - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailWardenCrowdControl suffix: crowdcontrol @@ -55,7 +55,7 @@ - id: BoxBeanbag - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailDetectiveForensicSupplement # Deltav - Detective is in charge of investigating crimes. suffix: detectivesupplement # Deltav - Detective is in charge of investigating crimes. @@ -67,7 +67,7 @@ # Frontier Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailSecurityNFMusket suffix: musket @@ -83,7 +83,7 @@ # Delta Mail - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailSecurityDVSpaceLaw suffix: spacelaw, extended diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/replicated.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/replicated.yml index 64bb4369f43..0132928af30 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/replicated.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/replicated.yml @@ -2,7 +2,7 @@ id: BulletLightRifleReplicated name: replicated bullet (.20 rifle) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/special.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/special.yml index df2ccf2a94e..9233a901f9d 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/special.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/special.yml @@ -2,7 +2,7 @@ id: BulletSpecial name: bullet (.38 special) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletSpecialPractice name: bullet (.38 special practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletSpecialRubber name: bullet (.38 special rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -37,7 +37,7 @@ id: BulletSpecialIncendiary name: bullet (.38 special incendiary) parent: BaseBulletIncendiary - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -49,7 +49,7 @@ id: BulletSpecialUranium name: bullet (.38 special uranium) parent: BaseBulletUranium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -61,7 +61,7 @@ id: BulletSpecialHoly name: bullet (.38 special holy) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -73,7 +73,7 @@ id: BulletSpecialMindbreaker name: bullet (.38 special mindbreaker) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml index 936ac9856ec..869da03ded5 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml @@ -1,6 +1,6 @@ - type: entity id: BulletImpactEffectRedDisabler - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.2 diff --git a/Resources/Prototypes/DeltaV/GameRules/events.yml b/Resources/Prototypes/DeltaV/GameRules/events.yml index db727601f84..2997ceb0734 100644 --- a/Resources/Prototypes/DeltaV/GameRules/events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/events.yml @@ -1,7 +1,7 @@ - type: entity id: XenoVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -33,7 +33,7 @@ - type: entity id: XenoVentsWeak parent: XenoVents - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -59,7 +59,7 @@ - type: entity id: MothroachSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 15 @@ -74,7 +74,7 @@ - type: entity id: PirateRadioSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 7.5 diff --git a/Resources/Prototypes/DeltaV/GameRules/midround.yml b/Resources/Prototypes/DeltaV/GameRules/midround.yml index 82b47c05718..74edf7a97d5 100644 --- a/Resources/Prototypes/DeltaV/GameRules/midround.yml +++ b/Resources/Prototypes/DeltaV/GameRules/midround.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseGameRule id: ParadoxAnomaly components: diff --git a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml index ec87795ab5b..b98ee1539c6 100644 --- a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml +++ b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml @@ -8,7 +8,7 @@ # not using base kill/keep alive objectives since these intentionally conflict with eachother - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseParadoxAnomalyObjective id: ParadoxAnomalyKillObjective description: This universe doesn't have room for both of us. @@ -23,7 +23,7 @@ requireDead: true - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseParadoxAnomalyObjective id: ParadoxAnomalyFriendObjective description: Perhaps there is room, as friends. @@ -37,7 +37,7 @@ - type: KeepAliveCondition - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseParadoxAnomalyObjective, BaseLivingObjective] id: ParadoxAnomalyEscapeObjective name: Escape to centcom alive and unrestrained. diff --git a/Resources/Prototypes/DeltaV/Objectives/traitor.yml b/Resources/Prototypes/DeltaV/Objectives/traitor.yml index c5c5318b5d2..2f53b211d9e 100644 --- a/Resources/Prototypes/DeltaV/Objectives/traitor.yml +++ b/Resources/Prototypes/DeltaV/Objectives/traitor.yml @@ -1,5 +1,5 @@ - type: entity # Logistics Officer steal objective. - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: LOLuckyBillStealObjective components: @@ -10,7 +10,7 @@ # owner: job-name-qm - type: entity # Head of Personnel steal objective. - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: HoPBookIanDossierStealObjective components: @@ -21,7 +21,7 @@ # owner: job-name-hop - type: entity # Clerk steal objective. - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: ClerkNotaryStealObjective components: diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/NPC/syndicateNPCs.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/NPC/syndicateNPCs.yml index b5379c5014e..4dc4fc37aae 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/NPC/syndicateNPCs.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/NPC/syndicateNPCs.yml @@ -16,6 +16,6 @@ name: grafted plate carrier suffix: Unremoveable description: An off-the-shelf plate carrier that has been cruelly grafted onto its wearers body - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Unremoveable diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index 835c405e192..8b2eea97e80 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -1,7 +1,7 @@ - type: entity id: ShowSecurityIcons abstract: true - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: ShowJobIcons - type: ShowMindShieldIcons diff --git a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml index e19217686f4..08a3eb568fe 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml @@ -59,7 +59,7 @@ parent: ClothingHeadBase id: ClothingHeadLightBase name: base helmet with light - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -146,7 +146,7 @@ # No parent since we aren't actually an item. id: ClothingHeadHardsuitBase name: base hardsuit helmet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: icon # default state used by most inheritors @@ -189,7 +189,7 @@ parent: ClothingHeadHardsuitBase id: ClothingHeadHardsuitWithLightBase name: base hardsuit helmet with light - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -241,7 +241,7 @@ id: ClothingHeadHatHoodWinterBase name: base winter coat hood description: A hood, made to keep your head warm. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: icon diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index b563fbc0071..caccdd8745e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -136,7 +136,7 @@ - type: entity parent: ClothingHeadHardsuitBase id: ClothingHeadHelmetHardsuitMaxim - noSpawn: true + categories: [ HideSpawnMenu ] name: salvager maxim helmet description: A predication of decay washes over your mind. components: diff --git a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml index 0bca209d51e..be7bda91008 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hoods.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hoods.yml @@ -87,7 +87,7 @@ - type: entity parent: ClothingHeadBase id: ClothingHeadHatHoodChaplainHood - noSpawn: true + categories: [ HideSpawnMenu ] name: chaplain's hood description: Maximum piety in this star system. components: @@ -179,7 +179,7 @@ - type: entity parent: ClothingHeadBase id: ClothingHeadHatHoodIan - noSpawn: true + categories: [ HideSpawnMenu ] name: ian hood description: A hood to complete the 'Good boy' look. components: @@ -194,7 +194,7 @@ - type: entity parent: ClothingHeadBase id: ClothingHeadHatHoodCarp - noSpawn: true + categories: [ HideSpawnMenu ] name: carp hood description: A gnarly hood adorned with plastic space carp teeth. components: @@ -229,7 +229,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterDefault - noSpawn: true + categories: [ HideSpawnMenu ] name: default winter coat hood components: - type: Sprite @@ -240,7 +240,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterBartender - noSpawn: true + categories: [ HideSpawnMenu ] name: bartender winter coat hood components: - type: Sprite @@ -251,7 +251,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterCaptain - noSpawn: true + categories: [ HideSpawnMenu ] name: captain's winter coat hood description: An expensive hood, to keep the captain's head warm. components: @@ -263,7 +263,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterCargo - noSpawn: true + categories: [ HideSpawnMenu ] name: logistics winter coat hood # DeltaV - Logistics Department replacing Cargo components: - type: Sprite @@ -274,7 +274,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterCE - noSpawn: true + categories: [ HideSpawnMenu ] name: chief engineer's winter coat hood components: - type: Sprite @@ -285,7 +285,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterCentcom - noSpawn: true + categories: [ HideSpawnMenu ] name: Centcom winter coat hood description: A hood for keeping the central comander's head warm. components: @@ -297,7 +297,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterChem - noSpawn: true + categories: [ HideSpawnMenu ] name: chemist winter coat hood components: - type: Sprite @@ -308,7 +308,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterCMO - noSpawn: true + categories: [ HideSpawnMenu ] name: chief medical officer's winter coat hood components: - type: Sprite @@ -319,7 +319,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterEngineer - noSpawn: true + categories: [ HideSpawnMenu ] name: engineer winter coat hood components: - type: Sprite @@ -330,7 +330,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterHOP - noSpawn: true + categories: [ HideSpawnMenu ] name: head of personel's winter coat hood components: - type: Sprite @@ -341,7 +341,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterHOS - noSpawn: true + categories: [ HideSpawnMenu ] name: head of security's winter coat hood components: - type: Sprite @@ -352,7 +352,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterHydro - noSpawn: true + categories: [ HideSpawnMenu ] name: hydroponics coat hood components: - type: Sprite @@ -363,7 +363,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterJani - noSpawn: true + categories: [ HideSpawnMenu ] name: janitor coat hood components: - type: Sprite @@ -374,7 +374,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterMed - noSpawn: true + categories: [ HideSpawnMenu ] name: medic coat hood components: - type: Sprite @@ -385,7 +385,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterMime - noSpawn: true + categories: [ HideSpawnMenu ] name: mime coat hood components: - type: Sprite @@ -396,7 +396,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterMiner - noSpawn: true + categories: [ HideSpawnMenu ] name: miner coat hood components: - type: Sprite @@ -407,7 +407,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterPara - noSpawn: true + categories: [ HideSpawnMenu ] name: paramedic coat hood components: - type: Sprite @@ -418,7 +418,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterQM - noSpawn: true + categories: [ HideSpawnMenu ] name: logistics officer's coat hood # DeltaV - Logistics Department replacing Cargo components: - type: Sprite @@ -429,7 +429,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterRD - noSpawn: true + categories: [ HideSpawnMenu ] name: mystagogue's coat hood # DeltaV - Epistemics Department replacing Science components: - type: Sprite @@ -440,7 +440,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterRobo - noSpawn: true + categories: [ HideSpawnMenu ] name: robotics coat hood components: - type: Sprite @@ -451,7 +451,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterSci - noSpawn: true + categories: [ HideSpawnMenu ] name: scientist coat hood components: - type: Sprite @@ -462,7 +462,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterSec - noSpawn: true + categories: [ HideSpawnMenu ] name: security coat hood components: - type: Sprite @@ -473,7 +473,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterSyndie - noSpawn: true + categories: [ HideSpawnMenu ] name: syndicate coat hood components: - type: Sprite @@ -484,7 +484,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterWarden - noSpawn: true + categories: [ HideSpawnMenu ] name: warden's coat hood components: - type: Sprite @@ -495,7 +495,7 @@ - type: entity parent: ClothingHeadHatHoodWinterBase id: ClothingHeadHatHoodWinterWeb - noSpawn: true + categories: [ HideSpawnMenu ] name: web coat hood components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml index 3531a26a6c5..03400e4a82e 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml @@ -21,7 +21,7 @@ id: ActionToggleMask name: Toggle Mask description: Handy, but prevents insertion of pie into your pie hole. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Mask/gas.rsi, state: icon } diff --git a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml index 11921b9a50d..a39c2e69159 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml @@ -70,7 +70,7 @@ - type: entity id: ActionStethoscope name: Listen with stethoscope - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml index 73dc6c8c7f7..9ae3d3b7d55 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml @@ -38,7 +38,7 @@ parent: ClothingOuterWinterCoat id: ClothingOuterWinterCoatToggleable name: winter coat with hood - noSpawn: True + categories: [ HideSpawnMenu ] components: - type: ToggleableClothing clothingPrototype: ClothingHeadHatHoodWinterDefault diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index c4bdefd3a14..034064b9439 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -136,7 +136,7 @@ id: ActionBaseToggleMagboots name: Toggle Magboots description: Toggles the magboots on and off. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem @@ -145,7 +145,7 @@ - type: entity id: ActionToggleMagboots parent: ActionBaseToggleMagboots - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Shoes/Boots/magboots.rsi, state: icon } @@ -154,7 +154,7 @@ - type: entity id: ActionToggleMagbootsAdvanced parent: ActionBaseToggleMagboots - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Shoes/Boots/magboots-advanced.rsi, state: icon } @@ -163,7 +163,7 @@ - type: entity id: ActionToggleMagbootsSci parent: ActionBaseToggleMagboots - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Shoes/Boots/magboots-science.rsi, state: icon } @@ -172,7 +172,7 @@ - type: entity id: ActionToggleMagbootsSyndie parent: ActionBaseToggleMagboots - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Shoes/Boots/magboots-syndicate.rsi, state: icon } diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index d5a695c7c0b..888bcd769cf 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -128,7 +128,7 @@ id: ActionToggleSpeedBoots name: Toggle Speed Boots description: Toggles the speed boots on and off. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: NoItem diff --git a/Resources/Prototypes/Entities/Debugging/clicktest.yml b/Resources/Prototypes/Entities/Debugging/clicktest.yml index 4e9caaa14d8..baab1b834f6 100644 --- a/Resources/Prototypes/Entities/Debugging/clicktest.yml +++ b/Resources/Prototypes/Entities/Debugging/clicktest.yml @@ -5,7 +5,7 @@ # These dots' texture detection should not interfere with the actual bounding box being tested. - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: ClickTestBase suffix: DEBUG components: diff --git a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml index 0430dbf427e..c7faff4db2c 100644 --- a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml +++ b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml @@ -60,7 +60,7 @@ id: BulletDebug name: bang, ded bullet parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] suffix: DEBUG components: - type: Tag diff --git a/Resources/Prototypes/Entities/Debugging/tippy.yml b/Resources/Prototypes/Entities/Debugging/tippy.yml index 292cbed0f1b..7f149c3b5dc 100644 --- a/Resources/Prototypes/Entities/Debugging/tippy.yml +++ b/Resources/Prototypes/Entities/Debugging/tippy.yml @@ -1,6 +1,6 @@ - type: entity id: Tippy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite netsync: false diff --git a/Resources/Prototypes/Entities/Effects/ambient_sounds.yml b/Resources/Prototypes/Entities/Effects/ambient_sounds.yml index f686779b3ee..81f7bbfc8a3 100644 --- a/Resources/Prototypes/Entities/Effects/ambient_sounds.yml +++ b/Resources/Prototypes/Entities/Effects/ambient_sounds.yml @@ -1,6 +1,6 @@ - type: entity id: AmbientSoundSourceFlies - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: AmbientSound volume: -5 diff --git a/Resources/Prototypes/Entities/Effects/bluespace_flash.yml b/Resources/Prototypes/Entities/Effects/bluespace_flash.yml index b05681def2d..3137bb5af8e 100644 --- a/Resources/Prototypes/Entities/Effects/bluespace_flash.yml +++ b/Resources/Prototypes/Entities/Effects/bluespace_flash.yml @@ -1,6 +1,6 @@ - type: entity id: EffectFlashBluespace - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 10.5 @@ -14,7 +14,7 @@ - type: entity id: EffectFlashTelekineticPulse - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 10 @@ -28,7 +28,7 @@ - type: entity id: EffectFlashShadeskip - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 5 @@ -42,7 +42,7 @@ - type: entity id: EffectFlashShadowkinShadeskip - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 5 @@ -56,7 +56,7 @@ - type: entity id: EffectFlashShadowkinDarkSwapOn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 5 @@ -70,7 +70,7 @@ - type: entity id: EffectFlashShadowkinDarkSwapOff - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight radius: 5 @@ -84,7 +84,7 @@ - type: entity id: EffectPyrokineticFlare - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Interface/Actions/psionics.rsi diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 469bab32782..62cf5c95a0f 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -36,7 +36,7 @@ parent: BaseFoam id: Smoke name: smoke - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Occluder - type: Sprite @@ -52,7 +52,7 @@ parent: BaseFoam id: Foam name: foam - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite color: "#ffffffcc" @@ -87,7 +87,7 @@ - type: entity id: MetalFoam name: metal foam - noSpawn: true + categories: [ HideSpawnMenu ] parent: Foam components: - type: Sprite @@ -111,7 +111,7 @@ - type: entity id: IronMetalFoam name: iron metal foam - noSpawn: true + categories: [ HideSpawnMenu ] parent: MetalFoam components: - type: SpawnOnDespawn @@ -120,7 +120,7 @@ - type: entity id: AluminiumMetalFoam name: aluminium metal foam - noSpawn: true + categories: [ HideSpawnMenu ] parent: MetalFoam components: - type: SpawnOnDespawn diff --git a/Resources/Prototypes/Entities/Effects/emp_effects.yml b/Resources/Prototypes/Entities/Effects/emp_effects.yml index 890dd24d430..d1096b85f5e 100644 --- a/Resources/Prototypes/Entities/Effects/emp_effects.yml +++ b/Resources/Prototypes/Entities/Effects/emp_effects.yml @@ -1,6 +1,6 @@ - type: entity id: EffectEmpPulse - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.8 @@ -23,7 +23,7 @@ - type: entity id: EffectEmpDisabled - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.4 diff --git a/Resources/Prototypes/Entities/Effects/exclamation.yml b/Resources/Prototypes/Entities/Effects/exclamation.yml index cfe1cbc7f22..d1f3e3ad063 100644 --- a/Resources/Prototypes/Entities/Effects/exclamation.yml +++ b/Resources/Prototypes/Entities/Effects/exclamation.yml @@ -1,7 +1,7 @@ - type: entity id: Exclamation name: exclamation - noSpawn: true + categories: [ HideSpawnMenu ] save: false components: - type: Transform @@ -22,7 +22,7 @@ - type: entity id: WhistleExclamation name: exclamation - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Structures/Storage/closet.rsi diff --git a/Resources/Prototypes/Entities/Effects/explosion_light.yml b/Resources/Prototypes/Entities/Effects/explosion_light.yml index b4b980dd1a5..d5e7452a795 100644 --- a/Resources/Prototypes/Entities/Effects/explosion_light.yml +++ b/Resources/Prototypes/Entities/Effects/explosion_light.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: ExplosionLight name: explosion light components: diff --git a/Resources/Prototypes/Entities/Effects/hearts.yml b/Resources/Prototypes/Entities/Effects/hearts.yml index 042fdb5e8ab..18f72c95d4a 100644 --- a/Resources/Prototypes/Entities/Effects/hearts.yml +++ b/Resources/Prototypes/Entities/Effects/hearts.yml @@ -1,6 +1,6 @@ - type: entity id: EffectHearts - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.85 diff --git a/Resources/Prototypes/Entities/Effects/lightning.yml b/Resources/Prototypes/Entities/Effects/lightning.yml index 7afd1c07a0c..f85f28d3b80 100644 --- a/Resources/Prototypes/Entities/Effects/lightning.yml +++ b/Resources/Prototypes/Entities/Effects/lightning.yml @@ -33,7 +33,7 @@ name: lightning id: Lightning parent: BaseLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Lightning canArc: true @@ -42,7 +42,7 @@ name: spooky lightning id: LightningRevenant parent: BaseLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Effects/lightning.rsi @@ -66,7 +66,7 @@ name: charged lightning id: ChargedLightning parent: BaseLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Effects/lightning.rsi @@ -85,7 +85,7 @@ name: lightning id: Spark parent: BaseLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Effects/lightning.rsi @@ -112,7 +112,7 @@ name: supercharged lightning id: SuperchargedLightning parent: ChargedLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Effects/lightning.rsi @@ -138,7 +138,7 @@ name: hypercharged lightning id: HyperchargedLightning parent: ChargedLightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: /Textures/Effects/lightning.rsi diff --git a/Resources/Prototypes/Entities/Effects/mobspawn.yml b/Resources/Prototypes/Entities/Effects/mobspawn.yml index 4529497021e..695f8a9e715 100644 --- a/Resources/Prototypes/Entities/Effects/mobspawn.yml +++ b/Resources/Prototypes/Entities/Effects/mobspawn.yml @@ -61,7 +61,7 @@ - type: entity id: EffectAnomalyFloraBulb - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.4 diff --git a/Resources/Prototypes/Entities/Effects/radiation.yml b/Resources/Prototypes/Entities/Effects/radiation.yml index 143ffa8559a..82828582cff 100644 --- a/Resources/Prototypes/Entities/Effects/radiation.yml +++ b/Resources/Prototypes/Entities/Effects/radiation.yml @@ -1,7 +1,7 @@ - type: entity name: shimmering anomaly id: RadiationPulse - noSpawn: true + categories: [ HideSpawnMenu ] description: Looking at this anomaly makes you feel strange, like something is pushing at your eyes. components: - type: RadiationSource diff --git a/Resources/Prototypes/Entities/Effects/rcd.yml b/Resources/Prototypes/Entities/Effects/rcd.yml index 902429818e5..a663add9ca9 100644 --- a/Resources/Prototypes/Entities/Effects/rcd.yml +++ b/Resources/Prototypes/Entities/Effects/rcd.yml @@ -1,7 +1,7 @@ - type: entity id: EffectRCDBase abstract: true - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform anchored: True @@ -19,7 +19,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDDeconstructPreview - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: deconstructPreview @@ -27,7 +27,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDConstruct0 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: construct0 @@ -37,7 +37,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDConstruct1 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: construct1 @@ -47,7 +47,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDConstruct2 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: construct2 @@ -57,7 +57,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDConstruct3 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: construct3 @@ -67,7 +67,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDConstruct4 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: construct4 @@ -77,7 +77,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDDeconstruct2 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: deconstruct2 @@ -87,7 +87,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDDeconstruct4 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: deconstruct4 @@ -97,7 +97,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDDeconstruct6 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: deconstruct6 @@ -107,7 +107,7 @@ - type: entity parent: EffectRCDBase id: EffectRCDDeconstruct8 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: deconstruct8 diff --git a/Resources/Prototypes/Entities/Effects/shuttle.yml b/Resources/Prototypes/Entities/Effects/shuttle.yml new file mode 100644 index 00000000000..72cc04cba11 --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/shuttle.yml @@ -0,0 +1,12 @@ +- type: entity + id: FtlVisualizerEntity + categories: [ HideSpawnMenu ] + description: Visualizer for shuttles arriving. You shouldn't see this! + components: + - type: FtlVisualizer + sprite: + sprite: /Textures/Effects/medi_holo.rsi + state: medi_holo + - type: Tag + tags: + - HideContextMenu diff --git a/Resources/Prototypes/Entities/Effects/sparks.yml b/Resources/Prototypes/Entities/Effects/sparks.yml index d86522a9711..c12e3b0eca3 100644 --- a/Resources/Prototypes/Entities/Effects/sparks.yml +++ b/Resources/Prototypes/Entities/Effects/sparks.yml @@ -1,6 +1,6 @@ - type: entity id: EffectSparks - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.5 @@ -20,7 +20,7 @@ - type: entity id: EffectTeslaSparks - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.5 diff --git a/Resources/Prototypes/Entities/Effects/weapon_arc.yml b/Resources/Prototypes/Entities/Effects/weapon_arc.yml index 25cd6e84ff2..0f3fab0e878 100644 --- a/Resources/Prototypes/Entities/Effects/weapon_arc.yml +++ b/Resources/Prototypes/Entities/Effects/weapon_arc.yml @@ -1,7 +1,7 @@ - type: entity # Just fades out with no movement animation id: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 2.0 @@ -18,7 +18,7 @@ - type: entity # Plays the state animation then disappears with no fade or swing id: WeaponArcAnimated - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Effects/arcs.rsi @@ -34,7 +34,7 @@ - type: entity id: WeaponArcThrust parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals animation: Thrust @@ -42,7 +42,7 @@ - type: entity id: WeaponArcSlash parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals animation: Slash @@ -51,7 +51,7 @@ - type: entity id: WeaponArcBite parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false @@ -63,7 +63,7 @@ - type: entity id: WeaponArcClaw parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false @@ -75,7 +75,7 @@ - type: entity id: WeaponArcDisarm parent: WeaponArcAnimated - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false @@ -87,7 +87,7 @@ - type: entity id: WeaponArcFist parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: fist @@ -95,7 +95,7 @@ - type: entity id: WeaponArcPunch parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false @@ -107,7 +107,7 @@ - type: entity id: WeaponArcKick parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false @@ -119,7 +119,7 @@ - type: entity id: WeaponArcSmash parent: WeaponArcStatic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WeaponArcVisuals fadeOut: false diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 32594392587..3430c761fb5 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -1,137 +1,473 @@ +- type: entityTable + id: MaintFluffTable + table: !type:GroupSelector + children: + # Common Group + - !type:GroupSelector + weight: 75 + children: + # Smoker's specialty + - !type:AllSelector + children: + - !type:EntSelector + id: Lighter + - !type:EntSelector + id: CigCartonBlue + # Gar glasses + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingEyesGlassesGar + - !type:EntSelector + id: ClothingEyesGlassesGarOrange + - !type:EntSelector + id: ClothingEyesGlassesGarGiga + - !type:EntSelector + id: ClothingHeadHatCake + - !type:EntSelector + id: ClothingHeadHatSkub + - !type:EntSelector + id: ClothingHeadHatCone + - !type:EntSelector + id: ClothingNeckBling + - !type:EntSelector + id: ClothingHeadHelmetCosmonaut + - !type:EntSelector + id: ClothingHeadHelmetBasic + - !type:EntSelector + id: ClothingShoeSlippersDuck + - !type:EntSelector + id: ClothingUnderSocksBee + - !type:EntSelector + id: ClothingUnderSocksCoder + - !type:EntSelector + id: ClothingHeadHatSquid + # Animal Masks + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingMaskRat + - !type:EntSelector + id: ClothingMaskFox + - !type:EntSelector + id: ClothingMaskBee + - !type:EntSelector + id: ClothingMaskBear + - !type:EntSelector + id: ClothingMaskRaven + - !type:EntSelector + id: ClothingMaskJackal + - !type:EntSelector + id: ClothingMaskBat + - !type:EntSelector + id: ClothingBeltSuspenders + - !type:EntSelector + id: ClothingEyesEyepatch + - !type:EntSelector + id: ClothingEyesGlasses + - !type:EntSelector + id: ClothingHandsGlovesLatex + - !type:EntSelector + id: ClothingHandsGlovesFingerless + - !type:EntSelector + id: ClothingHandsGlovesColorBlack + - !type:EntSelector + id: ClothingHeadHatBeret + - !type:EntSelector + id: ClothingHeadHatBowlerHat + - !type:EntSelector + id: ClothingHeadHatFedoraBrown + weight: 0.5 + - !type:EntSelector + id: ClothingHeadHatFedoraGrey + weight: 0.5 + - !type:EntSelector + id: ClothingHeadHatFez + - !type:EntSelector + id: ClothingHeadHatPaper + - !type:EntSelector + id: ClothingHeadHatPirate + - !type:EntSelector + id: ClothingMaskSterile + - !type:EntSelector + id: ClothingNeckHeadphones + - !type:EntSelector + id: ClothingNeckTieRed + - !type:EntSelector + id: ClothingOuterCoatGentle + - !type:AllSelector + children: + - !type:EntSelector + id: ClothingOuterCoatJensen + - !type:EntSelector + id: ClothingEyesGlassesJensen + - !type:EntSelector + id: ClothingOuterCoatLab + - !type:AllSelector + children: + - !type:EntSelector + id: ClothingOuterCoatPirate + - !type:EntSelector + id: ClothingHeadHatPirateTricord + - !type:EntSelector + id: ClothingHeadHatTophat + - !type:EntSelector + id: ClothingOuterHoodieBlack + weight: 0.5 + - !type:EntSelector + id: ClothingOuterHoodieGrey + weight: 0.5 + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingOuterFlannelRed + - !type:EntSelector + id: ClothingOuterFlannelBlue + - !type:EntSelector + id: ClothingOuterFlannelGreen + - !type:EntSelector + id: ClothingOuterVestHazard + - !type:EntSelector + id: ClothingShoesBootsJack + - !type:EntSelector + id: ClothingShoesHighheelBoots + - !type:EntSelector + id: ClothingShoesBootsLaceup + - !type:EntSelector + id: ClothingShoesLeather + - !type:EntSelector + id: ClothingShoesBootsSalvage + - !type:EntSelector + id: ClothingShoesBootsWork + - !type:EntSelector + id: ClothingShoesTourist + - !type:EntSelector + id: ClothingUniformJumpsuitLoungewear + - !type:EntSelector + id: ClothingHeadHatCowboyRed + # Uncommon Group + - !type:GroupSelector + weight: 23 + children: + - !type:EntSelector + id: ClothingNeckCloakHerald + - !type:EntSelector + id: ClothingHeadHelmetTemplar + # Cloaks + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingNeckCloakTrans + - !type:EntSelector + id: ClothingNeckCloakAdmin + - !type:EntSelector + id: ClothingNeckCloakMoth + - !type:EntSelector + id: ClothingNeckCloakVoid + - !type:EntSelector + id: ClothingNeckCloakGoliathCloak + - !type:EntSelector + id: ClothingNeckCloakAce + - !type:EntSelector + id: ClothingNeckCloakAro + - !type:EntSelector + id: ClothingNeckCloakBi + - !type:EntSelector + id: ClothingNeckCloakIntersex + - !type:EntSelector + id: ClothingNeckCloakLesbian + - !type:EntSelector + id: ClothingNeckCloakGay + - !type:EntSelector + id: ClothingNeckCloakEnby + - !type:EntSelector + id: ClothingNeckCloakPan + - !type:EntSelector + id: ToySkeleton + - !type:EntSelector + id: Basketball + - !type:EntSelector + id: Football + - !type:EntSelector + id: BalloonNT + - !type:EntSelector + id: BalloonCorgi + - !type:EntSelector + id: MysteryFigureBox + # Cult + - !type:AllSelector + children: + - !type:EntSelector + id: ClothingOuterRobesCult + - !type:EntSelector + id: ClothingShoesCult + - !type:EntSelector + id: ClothingHandsGlovesMercFingerless + - !type:EntSelector + id: ClothingHandsGlovesNitrile + - !type:EntSelector + id: ClothingHandsGlovesPowerglove + - !type:EntSelector + id: ClothingHeadHatAnimalHeadslime + - !type:EntSelector + id: ClothingHeadHatBeretMerc + - !type:EntSelector + id: ClothingHeadHatOutlawHat + - !type:EntSelector + id: ClothingHeadHatUshanka + - !type:EntSelector + id: ClothingHeadHatBunny + - !type:EntSelector + id: ClothingMaskNeckGaiter + - !type:EntSelector + id: ClothingNeckScarfStripedZebra + - !type:EntSelector + id: ClothingOuterGhostSheet + - !type:EntSelector + id: ClothingUniformJumpsuitAncient + - !type:EntSelector + id: ClothingUniformJumpsuitPirate + - !type:EntSelector + id: ClothingShoesBootsCowboyFancy + - !type:EntSelector + id: ClothingHeadHatCowboyBountyHunter + # Pins + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingNeckLGBTPin + - !type:EntSelector + id: ClothingNeckAromanticPin + - !type:EntSelector + id: ClothingNeckAsexualPin + - !type:EntSelector + id: ClothingNeckBisexualPin + - !type:EntSelector + id: ClothingNeckIntersexPin + - !type:EntSelector + id: ClothingNeckLesbianPin + - !type:EntSelector + id: ClothingNeckNonBinaryPin + - !type:EntSelector + id: ClothingNeckPansexualPin + - !type:EntSelector + id: ClothingNeckTransPin + - !type:EntSelector + id: ClothingNeckAutismPin + - !type:EntSelector + id: ClothingNeckGoldAutismPin + # Rare Group + - !type:GroupSelector + weight: 2 + children: + - !type:EntSelector + id: Skub + - !type:EntSelector + id: PonderingOrb + - !type:EntSelector + id: CluwneHorn + - !type:EntSelector + id: ClothingShoesSkates + - !type:EntSelector + id: DrinkMugDog + - !type:EntSelector + id: CigarGold + - !type:EntSelector + id: ClothingUniformJumpsuitFamilyGuy + - type: entity name: Maint Loot Spawner suffix: Fluff+Clothes id: MaintenanceFluffSpawner parent: MarkerBase components: - - type: Sprite - layers: - - state: red - - sprite: Clothing/Eyes/Glasses/gar.rsi - state: icon-super - - type: RandomSpawner - rarePrototypes: - - ClothingUniformJumpsuitFamilyGuy - - CigarGold - - ClothingNeckCloakHerald - - ClothingHeadHelmetTemplar - - ClothingNeckCloakTrans - - ClothingNeckCloakAdmin - - ClothingNeckCloakBoat # DeltaV - adds boat cloak to maints spawner. Makes more sense than admin cloak o.o - - ClothingNeckCloakMoth - - ClothingNeckCloakVoid - - ClothingNeckCloakGoliathCloak - - ClothingNeckCloakAce - - ClothingNeckCloakAro - - ClothingNeckCloakBi - - ClothingNeckCloakIntersex - - ClothingNeckCloakLesbian - - ClothingNeckCloakGay - - ClothingNeckCloakEnby - - ClothingNeckCloakPan - - ToySkeleton - - Basketball - - Football - - BalloonCorgi - - BalloonNT - - PonderingOrb - - Skub - - DrinkMugDog - - ClothingNeckLGBTPin - - ClothingNeckAromanticPin - - ClothingNeckAsexualPin - - ClothingNeckBisexualPin - - ClothingNeckIntersexPin - - ClothingNeckLesbianPin - - ClothingNeckNonBinaryPin - - ClothingNeckPansexualPin - - ClothingNeckTransPin - - CluwneHorn - - ClothingMaskRat - - MysteryFigureBox - - ClothingHandsGlovesMercFingerless - - ClothingHandsGlovesNitrile - - ClothingHandsGlovesPowerglove - - ClothingHeadHatAnimalHeadslime - - ClothingHeadHatBeretMerc - - ClothingHeadHatOutlawHat - - ClothingHeadHatUshanka - - ClothingHeadHatBunny - - ClothingMaskNeckGaiter - - ClothingNeckScarfStripedZebra - - ClothingOuterRobesCult - - ClothingOuterGhostSheet - - ClothingShoesCult - - ClothingUniformJumpsuitAncient - - ClothingUniformJumpsuitPirate - - ClothingShoesBootsCowboyFancy - - ClothingHeadHatCowboyBountyHunter - - ClothingNeckAutismPin - - ClothingNeckGoldAutismPin - rareChance: 0.01 - prototypes: - - Lighter - - CigCartonBlue - - ClothingEyesGlassesGarGiga - - ClothingEyesGlassesGarOrange - - ClothingEyesGlassesGar - - ClothingHeadHatCake - - ClothingHeadHatSkub - - ClothingHeadHatCone - - ClothingNeckBling - - ClothingHeadHelmetCosmonaut - - ClothingHeadHelmetBasic - - ClothingShoeSlippersDuck - - ClothingUnderSocksBee - - ClothingUnderSocksCoder - - ClothingHeadHatSquid - - ClothingMaskFox - - ClothingMaskBee - - ClothingMaskBear - - ClothingMaskRaven - - ClothingMaskJackal - - ClothingMaskBat - - ClothingBeltSuspenders - - ClothingEyesEyepatch - - ClothingEyesGlasses - - ClothingHandsGlovesLatex - - ClothingHandsGlovesFingerless - - ClothingHandsGlovesColorBlack - - ClothingHeadHatBeret - - ClothingHeadHatBowlerHat - - ClothingHeadHatFedoraBrown - - ClothingHeadHatFedoraGrey - - ClothingHeadHatFez - - ClothingHeadHatPaper - - ClothingHeadHatPirate - - ClothingHeadHatPirateTricord - - ClothingHeadHatTophat - - ClothingMaskSterile - - ClothingNeckHeadphones - - ClothingNeckTieRed - - ClothingOuterCoatGentle - - ClothingOuterCoatJensen - - ClothingEyesGlassesJensen - - ClothingOuterCoatLab - - ClothingOuterCoatPirate - - ClothingOuterHoodieBlack - - ClothingOuterHoodieGrey - - ClothingOuterFlannelRed - - ClothingOuterFlannelBlue - - ClothingOuterFlannelGreen - - ClothingOuterVestHazard - - ClothingShoesBootsJack - - ClothingShoesHighheelBoots - - ClothingShoesBootsLaceup - - ClothingShoesLeather - - ClothingShoesBootsSalvage - - ClothingShoesBootsWork - - ClothingShoesTourist - - ClothingUniformJumpsuitLoungewear - - ClothingHeadHatCowboyRed - chance: 0.6 - offset: 0.0 + - type: Sprite + layers: + - state: red + - sprite: Clothing/Eyes/Glasses/gar.rsi + state: icon-super + - type: EntityTableSpawner + table: !type:NestedSelector + tableId: MaintFluffTable + prob: 0.6 +- type: entityTable + id: MaintToolsTable + table: !type:GroupSelector + children: + # Common Group + - !type:GroupSelector + weight: 75 + children: + - !type:EntSelector + id: FlashlightLantern + - !type:EntSelector + id: ToolboxEmergencyFilled + - !type:GroupSelector + children: + - !type:EntSelector + id: OxygenTankFilled + - !type:EntSelector + id: DoubleEmergencyOxygenTankFilled + - !type:GroupSelector + children: + - !type:EntSelector + id: NitrogenTankFilled + - !type:EntSelector + id: DoubleEmergencyNitrogenTankFilled + - !type:EntSelector + id: EmergencyFunnyOxygenTankFilled + weight: 0.5 + - !type:GroupSelector + weight: 3 + children: + - !type:EntSelector + id: SheetSteel10 + - !type:EntSelector + id: SheetPlastic10 + - !type:EntSelector + id: SheetGlass10 + - !type:EntSelector + id: PartRodMetal10 + - !type:EntSelector + id: MaterialCardboard10 + weight: 0.25 + - !type:EntSelector + id: MaterialCloth10 + weight: 0.25 + - !type:EntSelector + id: MaterialWoodPlank10 + weight: 0.25 + - !type:EntSelector + id: Plunger + - !type:EntSelector + id: PowerCellMedium + - !type:EntSelector + id: PowerCellSmall + - !type:EntSelector + id: Soap + - !type:EntSelector + id: Wirecutter + - !type:EntSelector + id: Screwdriver + - !type:EntSelector + id: Wrench + - !type:EntSelector + id: Crowbar + - !type:EntSelector + id: Multitool + - !type:EntSelector + id: Shovel + - !type:EntSelector + id: Welder + - !type:EntSelector + id: GasAnalyzer + - !type:EntSelector + id: SprayPainter + - !type:EntSelector + id: Flare + - !type:EntSelector + id: Beaker + - !type:EntSelector + id: ClothingMaskGas + - !type:EntSelector + id: ClothingMaskBreath + - !type:EntSelector + id: DoorElectronics + - !type:EntSelector + id: APCElectronics + - !type:EntSelector + id: InflatableWallStack5 + - !type:EntSelector + id: CableHVStack10 + - !type:EntSelector + id: CableMVStack10 + - !type:EntSelector + id: CableApcStack10 + - !type:GroupSelector + children: + - !type:EntSelector + id: ClothingHandsGlovesColorYellowBudget + weight: 5 + - !type:EntSelector + id: ClothingHandsGlovesFingerlessInsulated + weight: 0.5 + - !type:EntSelector + id: ClothingHandsGlovesColorYellow + weight: 1 + # Uncommon Group + - !type:GroupSelector + weight: 23 + children: + - !type:EntSelector + id: ClothingHeadHatCone + weight: 2 + - !type:EntSelector + id: BookRandomStory + weight: 0.25 + - !type:EntSelector + id: ToolboxElectricalFilled + - !type:EntSelector + id: ToolboxMechanicalFilled + - !type:EntSelector + id: ClothingBeltUtility + - !type:EntSelector + id: ToolboxArtisticFilled + - !type:EntSelector + id: GeigerCounter + - !type:EntSelector + id: trayScanner + - !type:EntSelector + id: HandheldGPSBasic + - !type:EntSelector + id: HandLabeler + - !type:EntSelector + id: GlowstickBase + - !type:EntSelector + id: Bucket + - !type:EntSelector + id: RadioHandheld + - !type:EntSelector + id: AppraisalTool + - !type:EntSelector + id: ModularReceiver + - !type:EntSelector + id: WeaponFlareGun + - !type:EntSelector + id: BarberScissors + - !type:GroupSelector + children: + - !type:EntSelector + id: DrinkSpaceGlue + - !type:EntSelector + id: DrinkSpaceLube + # Rare Group + - !type:GroupSelector + weight: 2 + children: + - !type:EntSelector + id: LanternFlash + - !type:EntSelector + id: PowerCellHigh + - !type:EntSelector + id: NetProbeCartridge + - !type:EntSelector + id: WelderIndustrial + - !type:EntSelector + id: SheetPlasteel10 + - !type:EntSelector + id: ClothingMaskGasExplorer + - !type:EntSelector + id: TechnologyDisk + - !type:EntSelector + id: ResearchDisk5000 + - !type:EntSelector + id: PetCarrier + - !type:EntSelector + id: DrinkMopwataBottleRandom + - !type:EntSelector + id: LidSalami + weight: 0.05 - type: entity name: Maint Loot Spawner @@ -139,80 +475,80 @@ id: MaintenanceToolSpawner parent: MarkerBase components: - - type: Sprite - layers: - - state: red - - sprite: Objects/Power/power_cells.rsi - state: high - - type: RandomSpawner - rarePrototypes: - - LanternFlash - - PowerCellHigh - - NetProbeCartridge - - WelderIndustrial - - SheetPlasteel10 - - ClothingMaskGasExplorer - rareChance: 0.08 - prototypes: - - FlashlightLantern - - OxygenTankFilled - - DoubleEmergencyOxygenTankFilled - - ToolboxEmergencyFilled - - ToolboxArtisticFilled - - NitrogenTankFilled - - DoubleEmergencyNitrogenTankFilled - - EmergencyFunnyOxygenTankFilled - - ToolboxElectricalFilled - - ToolboxMechanicalFilled - - ClothingBeltUtility - - Shovel - - Welder - - WeaponFlareGun - - SheetSteel10 - - SheetPlastic10 - - SheetGlass10 - - PartRodMetal10 - - MaterialCardboard10 - - MaterialCloth10 - - MaterialWoodPlank10 - - ResearchDisk - - DeathPaint - - Plunger - - SprayPaintBlue - - SprayPaintRed - - SprayPaintGreen - - SprayPaintOrange - - TechnologyDisk - - PowerCellMedium - - PowerCellSmall - - Wirecutter - - Screwdriver - - Wrench - - Crowbar - - NetworkConfigurator - - trayScanner - - GasAnalyzer - - SprayPainter - - AppraisalTool - - Flare - - HandheldGPSBasic - - HandLabeler - - GlowstickBase - - Bucket - - RadioHandheld - - GeigerCounter - - Beaker - - ClothingMaskGas - - ClothingMaskBreath - - DoorElectronics - - APCElectronics - - InflatableWallStack5 - - CableHVStack10 - - CableMVStack10 - - CableApcStack10 - - PetCarrier - chance: 0.6 - offset: 0.0 + - type: Sprite + layers: + - state: red + - sprite: Objects/Power/power_cells.rsi + state: high + - type: EntityTableSpawner + table: !type:NestedSelector + tableId: MaintToolsTable + prob: 0.6 + +- type: entityTable + id: MaintWeaponTable + table: !type:GroupSelector + children: + # Common Group + - !type:GroupSelector + weight: 95 + children: + - !type:EntSelector + id: Machete + - !type:EntSelector + id: BaseBallBat + - !type:EntSelector + id: CombatKnife + - !type:EntSelector + id: Spear + - !type:EntSelector + id: RifleStock + - !type:EntSelector + id: ModularReceiver + - !type:EntSelector + id: HydroponicsToolScythe + # Rare Group + - !type:GroupSelector + weight: 5 + children: + - !type:EntSelector + id: Lighter + - !type:EntSelector + id: Matchbox + - !type:EntSelector + id: ClothingEyesBlindfold + - !type:EntSelector + id: ClothingMaskMuzzle + - !type:EntSelector + id: ClothingMaskGasSecurity + - !type:EntSelector + id: ShardGlass + weight: 2 + - !type:EntSelector + id: Syringe + - !type:EntSelector + id: Mousetrap + - !type:GroupSelector + weight: 2 + children: + - !type:EntSelector + id: Brutepack1 + - !type:EntSelector + id: Ointment1 + - !type:EntSelector + id: Gauze1 + - !type:EntSelector + id: Bola + - !type:EntSelector + id: SurvivalKnife + - !type:EntSelector + id: ScalpelShiv + - !type:EntSelector + id: Shiv + - !type:EntSelector + id: SawImprov + - !type:EntSelector + id: HydroponicsToolMiniHoe - type: entity name: Maint Loot Spawner @@ -220,51 +556,15 @@ id: MaintenanceWeaponSpawner parent: MarkerBase components: - - type: Sprite - layers: - - state: red - - sprite: Objects/Weapons/Melee/machete.rsi - state: icon - - type: RandomSpawner - rarePrototypes: - - Machete - - BaseBallBat - - CombatKnife - - Spear - - RifleStock - - ModularReceiver - - HydroponicsToolScythe - rareChance: 0.05 - prototypes: - - FlashlightLantern - - OxygenTankFilled - - DoubleEmergencyOxygenTankFilled - - NitrogenTankFilled - - DoubleEmergencyNitrogenTankFilled - - Lighter - - Matchbox - - Crowbar - - Shovel - - Welder - - WeaponFlareGun - - LidSalami - - ClothingEyesBlindfold - - ClothingMaskMuzzle - - ClothingMaskGasSecurity - - ShardGlass - - Syringe - - Mousetrap - - Brutepack1 - - Ointment1 - - Gauze1 - - Bola - - SurvivalKnife - - ScalpelShiv - - Shiv - - SawImprov - - HydroponicsToolMiniHoe - chance: 0.6 - offset: 0.0 + - type: Sprite + layers: + - state: red + - sprite: Objects/Weapons/Melee/machete.rsi + state: icon + - type: EntityTableSpawner + table: !type:NestedSelector + tableId: MaintWeaponTable + prob: 0.6 - type: entity name: Maint Loot Spawner diff --git a/Resources/Prototypes/Entities/Markers/Spawners/corpses.yml b/Resources/Prototypes/Entities/Markers/Spawners/corpses.yml index 3d337b39765..95064428dde 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/corpses.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/corpses.yml @@ -80,7 +80,7 @@ name: Random Security Corpse Spawner id: RandomSecurityCorpseSpawner parent: SalvageHumanCorpseSpawner - noSpawn: true # DeltaV - Prevent security corpses from being mapped in + categories: [ HideSpawnMenu ] # DeltaV - Prevent security corpses from being mapped in components: - type: Sprite layers: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 4ade9a9fd45..3911a686266 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -62,7 +62,7 @@ state: narsian - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: SpawnPointGhostNukeOperative name: ghost role spawn point suffix: nukeops @@ -82,7 +82,7 @@ state: radiation - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: SpawnPointLoneNukeOperative name: ghost role spawn point suffix: loneops @@ -111,7 +111,7 @@ - type: entity parent: MarkerBase id: SpawnPointGhostDragon - noSpawn: true + categories: [ HideSpawnMenu ] name: ghost role spawn point suffix: dragon components: diff --git a/Resources/Prototypes/Entities/Markers/clientsideclone.yml b/Resources/Prototypes/Entities/Markers/clientsideclone.yml index 56875c44142..39b9ee48fdb 100644 --- a/Resources/Prototypes/Entities/Markers/clientsideclone.yml +++ b/Resources/Prototypes/Entities/Markers/clientsideclone.yml @@ -1,7 +1,7 @@ - type: entity name: clientsideclone id: clientsideclone - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite - type: AnimationPlayer diff --git a/Resources/Prototypes/Entities/Markers/construction_ghost.yml b/Resources/Prototypes/Entities/Markers/construction_ghost.yml index be9cc915d91..04a8a095023 100644 --- a/Resources/Prototypes/Entities/Markers/construction_ghost.yml +++ b/Resources/Prototypes/Entities/Markers/construction_ghost.yml @@ -1,7 +1,7 @@ - type: entity name: construction ghost id: constructionghost - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite color: '#3F38' diff --git a/Resources/Prototypes/Entities/Markers/drag_shadow.yml b/Resources/Prototypes/Entities/Markers/drag_shadow.yml index a1badb60bc5..19ffb6c36a6 100644 --- a/Resources/Prototypes/Entities/Markers/drag_shadow.yml +++ b/Resources/Prototypes/Entities/Markers/drag_shadow.yml @@ -1,7 +1,7 @@ - type: entity name: drag shadow id: dragshadow - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Markers/hover_entity.yml b/Resources/Prototypes/Entities/Markers/hover_entity.yml index 8421a9d8c9e..2e8e1edb296 100644 --- a/Resources/Prototypes/Entities/Markers/hover_entity.yml +++ b/Resources/Prototypes/Entities/Markers/hover_entity.yml @@ -1,7 +1,7 @@ - type: entity name: hover entity id: hoverentity - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: diff --git a/Resources/Prototypes/Entities/Mobs/Corpses/corpses.yml b/Resources/Prototypes/Entities/Mobs/Corpses/corpses.yml index 89ab3376c6a..848865cf3f1 100644 --- a/Resources/Prototypes/Entities/Mobs/Corpses/corpses.yml +++ b/Resources/Prototypes/Entities/Mobs/Corpses/corpses.yml @@ -68,7 +68,7 @@ parent: SalvageHumanCorpse id: MobRandomSecurityCorpse suffix: Dead, Security - noSpawn: true # DeltaV - Prevent security corpses from being mapped in + categories: [ HideSpawnMenu ] # DeltaV - Prevent security corpses from being mapped in components: - type: Loadout prototypes: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml index 3512b518150..7a41ac52ec8 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/Rslimes.yml @@ -222,7 +222,7 @@ - type: entity id: reagentslimeVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index cbecfbf6a6f..24947413d87 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1577,7 +1577,7 @@ - type: entity name: guidebook monkey parent: MobMonkey - noSpawn: true + categories: [ HideSpawnMenu ] id: MobGuidebookMonkey description: A hopefully helpful monkey whose only purpose in life is for you to click on. Does this count as having a monkey give you a tutorial? components: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index f6a42dfb76b..022ae53289e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -169,7 +169,7 @@ id: MobRatServant parent: [ SimpleMobBase, MobCombat ] description: He's da mini rat. He don't make da roolz. - noSpawn: true #Must be configured to a King or the AI breaks. + categories: [ HideSpawnMenu ] #Must be configured to a King or the AI breaks. components: - type: Carriable freeHandsRequired: 1 @@ -320,7 +320,7 @@ id: ActionRatKingRaiseArmy name: Raise Army description: Spend some hunger to summon an allied rat to help defend you. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 4 @@ -333,7 +333,7 @@ id: ActionRatKingDomain name: Rat King's Domain description: Spend some hunger to release a cloud of ammonia into the air. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 6 @@ -346,7 +346,7 @@ id: ActionRatKingOrderStay name: Stay description: Command your army to stand in place. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 1 @@ -365,7 +365,7 @@ id: ActionRatKingOrderFollow name: Follow description: Command your army to follow you around. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 1 @@ -384,7 +384,7 @@ id: ActionRatKingOrderCheeseEm name: Cheese 'Em description: Command your army to attack whoever you point at. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 1 @@ -403,7 +403,7 @@ id: ActionRatKingOrderLoose name: Loose description: Command your army to act at their own will. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 1 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml index 74bba2dec8a..dec2bd50bac 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml @@ -150,7 +150,7 @@ description: A geras of a slime - the name is ironic, isn't it? id: MobSlimesGeras parent: BaseMobAdultSlimes - noSpawn: true + categories: [ HideSpawnMenu ] components: # they portable... - type: MovementSpeedModifier diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml index 23108e521bf..37cfa7b46de 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xenopet.yml @@ -341,7 +341,7 @@ - type: entity id: neutralXenoVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -364,7 +364,7 @@ - type: entity id: ArgocyteVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -403,7 +403,7 @@ - type: entity id: MeatVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -428,7 +428,7 @@ - type: entity id: TickVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -445,7 +445,7 @@ - type: entity id: CarpVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -472,7 +472,7 @@ - type: entity id: SpaceVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -495,7 +495,7 @@ - type: entity id: LightVents parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index dce408ed827..957817d4083 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -2,7 +2,7 @@ parent: MobObserver id: AdminObserver name: admin observer - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Eye visMask: @@ -104,7 +104,7 @@ id: ActionAGhostShowSolar name: Solar Control Interface description: View a solar control interface. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -117,7 +117,7 @@ id: ActionAGhostShowCommunications name: Communications Interface description: View a communications interface. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -130,7 +130,7 @@ id: ActionAGhostShowRadar name: Mass Scanner Interface description: View a mass scanner interface. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -143,7 +143,7 @@ id: ActionAGhostShowCargo name: Cargo Ordering Interface description: View a cargo ordering interface. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -156,7 +156,7 @@ id: ActionAGhostShowCrewMonitoring name: Crew Monitoring Interface description: View a crew monitoring interface. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -169,7 +169,7 @@ id: ActionAGhostShowStationRecords name: Station Records Interface description: View a station records Interface - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } diff --git a/Resources/Prototypes/Entities/Mobs/Player/diona.yml b/Resources/Prototypes/Entities/Mobs/Player/diona.yml index dfd5e9a1be7..85c5631de7a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/diona.yml @@ -15,7 +15,7 @@ # Reformed Diona - type: entity parent: MobDiona - noSpawn: true + categories: [ HideSpawnMenu ] id: MobDionaReformed name: Reformed Diona components: diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index cb9dc1c911a..81cd8a579b2 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -155,7 +155,7 @@ - MinorAntagonists - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: DragonsBreathGun name: dragon's lung description: For dragon's breathing @@ -204,7 +204,7 @@ id: ActionSpawnRift name: Summon Carp Rift description: Summons a carp rift that will periodically spawns carps. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: @@ -218,7 +218,7 @@ id: ActionDevour name: "[color=red]Devour[/color]" description: Attempt to break a structure with your jaws or swallow a creature. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction icon: { sprite : Interface/Actions/devour.rsi, state: icon } @@ -227,7 +227,7 @@ priority: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: ActionDragonsBreath name: "[color=orange]Dragon's Breath[/color]" description: Spew out flames at anyone foolish enough to attack you! diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index 7bb8547cfab..7d1139d3d79 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -261,7 +261,7 @@ id: ActionToggleGuardian name: Toggle Guardian description: Either manifests the guardian or recalls it back into your body - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/manifest.png diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index aa87f81a833..4284632d288 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -39,7 +39,7 @@ # Nuclear Operative - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] name: Nuclear Operative parent: MobHuman id: MobHumanNukeOp @@ -50,7 +50,7 @@ powerRollMultiplier: 7 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: MobHuman id: MobHumanLoneNuclearOperative name: Lone Operative @@ -72,7 +72,7 @@ # Space Ninja - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] name: Space Ninja parent: MobHuman id: MobHumanSpaceNinja diff --git a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml index 85aec21ac66..d80eb4699d1 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml @@ -128,7 +128,7 @@ name: Urist McPositronic parent: MobHumanDummy id: MobIPCDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy IPC meant to be used in character setup. components: - type: HumanoidAppearance diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index c92595ffc9d..07398299f37 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -3,7 +3,7 @@ id: MobObserver name: observer description: Boo! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: CargoSellBlacklist - type: Sprite @@ -60,7 +60,7 @@ id: ActionGhostBoo name: Boo! description: Scare your crew members because of boredom! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/Actions/scream.png @@ -72,7 +72,7 @@ id: ActionToggleLighting name: Toggle All Lighting description: Toggle all light rendering to better observe dark areas. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/light.svg.192dpi.png @@ -84,7 +84,7 @@ id: ActionToggleFov name: Toggle FoV description: Toggles field-of-view in order to see what players see. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Interface/VerbIcons/vv.svg.192dpi.png @@ -96,7 +96,7 @@ id: ActionToggleGhosts name: Toggle Ghosts description: Toggle the visibility of other ghosts. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Mobs/Ghosts/ghost_human.rsi, state: icon } @@ -108,7 +108,7 @@ id: ActionToggleGhostHearing name: Toggle Ghost Hearing description: Toggle between hearing all messages and hearing only radio & nearby messages. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false diff --git a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml index 07deef857c3..f309707132e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml @@ -1,7 +1,7 @@ - type: entity parent: MobObserver id: ReplayObserver - noSpawn: true + categories: [ HideSpawnMenu ] save: false components: - type: MovementSpeedModifier diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 0f8998bdec8..c3ccb0330c3 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -50,4 +50,4 @@ slots: cell_slot: name: power-cell-slot-component-slot-name-default - startingItem: PowerCellHyper + startingItem: PowerCellHyper \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml index ddbdc57e0ad..f3bd68709f9 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachne.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachne.yml @@ -144,7 +144,7 @@ name: Urist McHands parent: MobHumanDummy id: MobArachneDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy arachne meant to be used in character setup. components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index f512e71d325..88822ab0376 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -136,7 +136,7 @@ - type: entity parent: BaseSpeciesDummy id: MobArachnidDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: Arachnid diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 07d621b139d..530bfe49b24 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -127,7 +127,7 @@ - type: entity parent: BaseSpeciesDummy id: MobDionaDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Inventory templateId: diona diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index 7f315040356..72c1e782507 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -74,4 +74,4 @@ - type: entity parent: BaseSpeciesDummy id: MobDwarfDummy - noSpawn: true + categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml b/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml index c514a6f1a05..b0a43551c8d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/gingerbread.yml @@ -44,7 +44,7 @@ - type: entity parent: BaseSpeciesDummy id: MobGingerbreadDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: Gingerbread diff --git a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml index 4ad6ea03cd9..b3fcd565c4b 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml @@ -192,7 +192,7 @@ id: ActionHarpyPlayMidi name: Play MIDI description: Sing your heart out! Right click yourself to set an instrument. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -204,7 +204,7 @@ id: ActionSyrinxChangeVoiceMask name: Set name description: Change the name others hear to something else. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: DeltaV/Interface/Actions/harpy_syrinx.png @@ -215,7 +215,7 @@ id: ActionToggleFlight name: Fly description: Make use of your wings to fly. Beat the flightless bird allegations. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index ee2886602d1..4310fb1c65c 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -33,4 +33,4 @@ - type: entity parent: BaseSpeciesDummy id: MobHumanDummy - noSpawn: true + categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index 5f684222264..2a4a157ecb3 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -127,7 +127,7 @@ - type: entity parent: BaseSpeciesDummy id: MobMothDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: Moth diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index ee5d6285659..45be82a448f 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -73,7 +73,7 @@ - type: entity parent: BaseSpeciesDummy id: MobReptilianDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy reptilian meant to be used in character setup. components: - type: HumanoidAppearance diff --git a/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml index 393cb0b8716..ff6edb49cc2 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/shadowkin.yml @@ -243,7 +243,7 @@ save: false parent: MobHumanDummy id: MobShadowkinDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy shadowkin meant to be used in character setup. components: - type: HumanoidAppearance diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index cf3aa6b1caa..96c61856936 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -108,7 +108,7 @@ - type: entity parent: BaseSpeciesDummy id: MobSkeletonPersonDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: Skeleton diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index 81547a3fa36..ba04b6e5fac 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -126,7 +126,7 @@ - type: entity parent: MobHumanDummy id: MobSlimePersonDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: SlimePerson diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index 58e2b3b6463..62e04b55780 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -109,7 +109,7 @@ - type: entity parent: BaseSpeciesDummy id: MobVoxDummy - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: HumanoidAppearance species: Vox diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index aa9e70f3fa4..1854d6f71fa 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -681,7 +681,7 @@ id: FoodMealHappyHonkClown parent: HappyHonk suffix: random food spawner meal - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StorageFill contents: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index e5ae7723671..9e36d34af7c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -443,7 +443,7 @@ # Trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseItem id: FoodPacketTrash description: This is rubbish. @@ -466,7 +466,7 @@ price: 0 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketBoritosTrash name: boritos bag @@ -475,7 +475,7 @@ state: boritos-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketCnDsTrash name: C&Ds bag @@ -484,7 +484,7 @@ state: cnds-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketCheesieTrash name: cheesie honkers @@ -493,7 +493,7 @@ state: cheesiehonkers-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketChipsTrash name: chips @@ -502,7 +502,7 @@ state: chips-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketChocolateTrash name: chocolate wrapper @@ -511,7 +511,7 @@ state: chocolatebar-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketEnergyTrash name: energybar wrapper @@ -520,7 +520,7 @@ state: energybar-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketPistachioTrash name: pistachios packet @@ -529,7 +529,7 @@ state: pistachio-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketPopcornTrash name: popcorn box @@ -538,7 +538,7 @@ state: popcorn-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketRaisinsTrash name: 4no raisins @@ -547,7 +547,7 @@ state: raisins-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketSemkiTrash name: semki packet @@ -556,7 +556,7 @@ state: semki-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketSusTrash name: sus jerky @@ -565,7 +565,7 @@ state: susjerky-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketSyndiTrash name: syndi-cakes box @@ -574,7 +574,7 @@ state: syndicakes-trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketChowMeinTrash name: empty chow mein box @@ -583,7 +583,7 @@ state: chinese1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketDanDanTrash name: empty dan dan box @@ -592,7 +592,7 @@ state: chinese2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodCookieFortune name: cookie fortune @@ -605,7 +605,7 @@ descriptionSegments: [CookieFortuneDescriptions] - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketMRETrash name: MRE wrapper @@ -1025,7 +1025,7 @@ # trash - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPacketLunacakeTrash name: lunacake wrapper @@ -1036,7 +1036,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketMochicakeTrash name: mochicake wrapper @@ -1046,7 +1046,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketMooncakeTrash name: mooncake wrapper @@ -1056,7 +1056,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketTidegobsTrash name: tidegobs trash @@ -1066,7 +1066,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketSaturnosTrash name: saturn-os trash @@ -1076,7 +1076,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketJoveGelloTrash name: jove gello trash @@ -1086,7 +1086,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketPlutoniumrodsTrash name: plutonium rods trash @@ -1096,7 +1096,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketMarsFroukaTrash name: mars frouka trash @@ -1106,7 +1106,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketVenusTrash name: venus hot cakes trash @@ -1116,7 +1116,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketOortrocksTrash name: oort rocks trash @@ -1127,7 +1127,7 @@ # weebo vend - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketRedalertnutsTrash name: red alert nuts packet @@ -1137,7 +1137,7 @@ - type: Item - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketStickTrash name: stick @@ -1148,7 +1148,7 @@ # - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketLunacakeTrash id: FoodPacketProteinbarTrash name: protein bar wrapper diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Vapes/vape.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Vapes/vape.yml index 0049c389b5b..19c104b9076 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Vapes/vape.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Vapes/vape.yml @@ -1,6 +1,6 @@ - type: entity id: Vape - noSpawn: true # DeltaV - Disable the Vape + categories: [ HideSpawnMenu ] # DeltaV - Disable the Vape parent: BaseVape name: vape description: "Like a cigar, but for tough teens. (WARNING:Pour only water into the vape)" diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index 06836df342c..e07f0e05840 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -435,7 +435,7 @@ - type: entity id: PresentTrash - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseItem name: Wrapping Paper description: Carefully folded, taped, and tied with a bow. Then ceremoniously ripped apart and tossed on the floor. diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml index e0212810210..ce7b6a4bde4 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -22,7 +22,7 @@ entity: ChameleonDisguise - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMob id: ChameleonDisguise name: Urist McKleiner @@ -49,7 +49,7 @@ # actions - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: ActionDisguiseNoRot name: Toggle Rotation description: Use this to prevent your disguise from rotating, making it easier to hide in some scenarios. @@ -59,7 +59,7 @@ event: !type:DisguiseToggleNoRotEvent - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: ActionDisguiseAnchor name: Toggle Anchored description: For many objects you will want to be anchored to not be completely obvious. diff --git a/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml b/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml index 0e7fce95686..97e244798b9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/translator_implants.yml @@ -3,7 +3,7 @@ id: BasicTauCetiBasicTranslatorImplant name: basic common translator implant description: Provides your illiterate friends the ability to understand the common galactic tongue. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -14,7 +14,7 @@ id: TauCetiBasicTranslatorImplant name: advanced common translator implant description: A more advanced version of the translator implant, teaches your illiterate friends the ability to both speak and understand the galactic tongue! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -27,7 +27,7 @@ id: BubblishTranslatorImplant name: bubblish translator implant description: An implant that helps you speak and understand the language of slimes! Special vocal chords not included. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -42,7 +42,7 @@ id: NekomimeticTranslatorImplant name: nekomimetic translator implant description: A translator implant intially designed to help domestic cat owners understand their pets, now granting the ability to understand and speak to Felinids! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -57,7 +57,7 @@ id: DraconicTranslatorImplant name: draconic translator implant description: A translator implant giving the ability to speak to dragons! Subsequently, also allows to communicate with the Unathi. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -72,7 +72,7 @@ id: CanilunztTranslatorImplant name: canilunzt translator implant description: A translator implant that helps you communicate with your local yeepers. Yeep! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -87,7 +87,7 @@ id: SolCommonTranslatorImplant name: sol-common translator implant description: An implant giving the ability to understand and speak SolCommon. Raaagh! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -102,7 +102,7 @@ id: RootSpeakTranslatorImplant name: root-speak translator implant description: An implant that lets you speak for the trees. Or to the trees. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -117,7 +117,7 @@ id: MofficTranslatorImplant name: Moffic translator implant description: An implant designed to help domesticate mothroaches. Subsequently, allows you to communicate with the moth people. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -132,7 +132,7 @@ id: ValyrianStandardTranslatorImplant name: valyrian standard translator implant description: An implant giving the ability to understand and speak Valyrian Standard. Chirp! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: @@ -147,7 +147,7 @@ id: AzazibaTranslatorImplant name: azaziba translator implant description: An implant giving the ability to understand and speak Azaziba. # Intended for Admins Only, this item is for lore reasons not obtainable. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TranslatorImplant understood: diff --git a/Resources/Prototypes/Entities/Objects/Devices/translators.yml b/Resources/Prototypes/Entities/Objects/Devices/translators.yml index 99b6d4305b6..3a30afc4a7f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/translators.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/translators.yml @@ -1,6 +1,6 @@ # Translator that doesn't need power to work - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: TranslatorUnpowered parent: BaseItem name: translator @@ -32,7 +32,7 @@ # Base translator that uses a power cell. Starts with an empty slot. - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: TranslatorPoweredBase parent: [ TranslatorUnpowered, PowerCellSlotMediumItem ] components: @@ -45,14 +45,14 @@ # Normal translator with medium power cell in it - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: Translator parent: [ PowerCellSlotMediumItem, TranslatorPoweredBase ] suffix: Powered # Normal translator with a high power cell and special appearance - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: TranslatorForeigner parent: [ PowerCellSlotHighItem, TranslatorPoweredBase ] name: foreigner's translator diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml index ab404b88a3e..965b25dbc00 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml @@ -18,7 +18,7 @@ id: BackgammonBoardTabletop name: backgammon parent: BaseBoardTabletop - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/backgammon_tabletop.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml index 351396b5b91..50e208cc43f 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml @@ -28,7 +28,7 @@ id: BaseBoardTabletop name: baseboard abstract: true - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml index 69302548d18..6c206ca26f7 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml @@ -24,7 +24,7 @@ id: *checkerboard name: checkerboard parent: BaseBoardTabletop - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/chessboard_tabletop.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml index b31b7803bae..aeba3918c49 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml @@ -20,7 +20,7 @@ id: ChessBoardTabletop name: chessboard parent: BaseBoardTabletop - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/chessboard_tabletop.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml index 51f17d55b99..9b00ef5e018 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml @@ -86,7 +86,7 @@ parent: BaseBoardTabletop id: GrassBoardTabletop name: grass battlemap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi @@ -98,7 +98,7 @@ parent: BaseBoardTabletop id: MoonBoardTabletop name: grass battlemap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/Battlemaps/moonbm_tabletop.rsi @@ -108,7 +108,7 @@ parent: BaseBoardTabletop id: SandBoardTabletop name: sand battlemap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/Battlemaps/sandbm_tabletop.rsi @@ -118,7 +118,7 @@ parent: BaseBoardTabletop id: SnowBoardTabletop name: snow battlemap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/Battlemaps/snowbm_tabletop.rsi @@ -128,7 +128,7 @@ parent: BaseBoardTabletop id: ShipBoardTabletop name: ship battlemap - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/Battlemaps/shipbm_tabletop.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml index bb5fdf1f0bf..b608f4e7876 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml @@ -20,7 +20,7 @@ id: ParchisBoardTabletop name: parchís parent: BaseBoardTabletop - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/Tabletop/parchis_tabletop.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index b73767fd811..5c0bbc84454 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -152,7 +152,7 @@ id: ActionPAIPlayMidi name: Play MIDI description: Open your portable MIDI interface to soothe your owner. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false @@ -165,7 +165,7 @@ id: ActionPAIOpenMap name: Open Map description: Open your map interface and guide your owner. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction checkCanInteract: false diff --git a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml index 1b417f6cde0..d7383fdddac 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml @@ -4,7 +4,7 @@ id: PaintBase name: spray paint description: A tin of spray paint. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Appearance - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Misc/buffering.yml b/Resources/Prototypes/Entities/Objects/Misc/buffering.yml index dbd35344594..c97ffe89edd 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/buffering.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/buffering.yml @@ -1,6 +1,6 @@ - type: entity id: BufferingIcon - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/buffering.rsi diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index 32d8ea7540a..6194be48488 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -69,7 +69,7 @@ name: extinguisher spray id: ExtinguisherSpray parent: Vapor - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Effects/extinguisherSpray.rsi diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index c72f7a2e91e..9c54e14f50f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -268,7 +268,7 @@ - type: entity parent: Paper id: PaperWritten - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Paper - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml index a0f5e254d5f..36b1970f3e5 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml @@ -17,7 +17,7 @@ id: SadTromboneImplant name: sad trombone implant description: This implant plays a sad tune when the user dies. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant whitelist: @@ -37,7 +37,7 @@ id: LightImplant name: light implant description: This implant emits light from the user's skin on activation. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionToggleLight @@ -59,7 +59,7 @@ id: BikeHornImplant name: bike horn implant description: This implant lets the user honk anywhere at any time. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionActivateHonkImplant @@ -80,7 +80,7 @@ id: TrackingImplant name: tracking implant description: This implant has a tracking device attached to the suit sensor network, as well as a condition monitor for the Security radio channel. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant whitelist: @@ -110,7 +110,7 @@ id: StorageImplant name: storage implant description: This implant grants hidden storage within a person's body using bluespace technology. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionOpenStorageImplant @@ -134,7 +134,7 @@ id: FreedomImplant name: freedom implant description: This implant lets the user break out of hand restraints up to three times before ceasing to function anymore. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionActivateFreedomImplant @@ -147,7 +147,7 @@ id: UplinkImplant name: uplink implant description: This implant lets the user access a hidden Syndicate uplink at will. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionOpenUplinkImplant @@ -168,7 +168,7 @@ id: EmpImplant name: EMP implant description: This implant creates an electromagnetic pulse when activated. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionActivateEmpImplant @@ -183,7 +183,7 @@ id: ScramImplant name: scram implant description: This implant randomly teleports the user within a large radius when activated. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionActivateScramImplant @@ -195,7 +195,7 @@ id: DnaScramblerImplant name: DNA scrambler implant description: This implant lets the user randomly change their appearance and name once. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant implantAction: ActionActivateDnaScramblerImplant @@ -210,7 +210,7 @@ id: MicroBombImplant name: micro-bomb implant description: This implant detonates the user upon activation or upon death. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant permanent: true @@ -240,7 +240,7 @@ id: MacroBombImplant name: macro-bomb implant description: This implant creates a large explosion on death after a preprogrammed countdown. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant permanent: true @@ -275,7 +275,7 @@ id: DeathAcidifierImplant name: death-acidifier implant description: This implant melts the user and their equipment upon death. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant permanent: true @@ -299,7 +299,7 @@ id: DeathRattleImplant name: death rattle implant description: This implant will inform the Syndicate radio channel should the user fall into critical condition or die. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant permanent: true @@ -319,7 +319,7 @@ id: MindShieldImplant name: mind-shield implant description: This implant will ensure loyalty to Nanotrasen and prevent mind control devices. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SubdermalImplant permanent: true diff --git a/Resources/Prototypes/Entities/Objects/Power/lights.yml b/Resources/Prototypes/Entities/Objects/Power/lights.yml index b18a0feaa52..289736f6717 100644 --- a/Resources/Prototypes/Entities/Objects/Power/lights.yml +++ b/Resources/Prototypes/Entities/Objects/Power/lights.yml @@ -234,7 +234,7 @@ name: exterior light tube description: A high power high energy bulb for the depths of space. May contain mercury. id: ExteriorLightTube - noSpawn: true # DeltaV - Don't map these + categories: [ HideSpawnMenu ] # DeltaV - Don't map these components: - type: LightBulb color: "#B4FCF0" diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 23ce5a36ee2..61866b149db 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -93,7 +93,7 @@ id: ActionBibleSummon name: Summon familiar description: Summon a familiar that will aid you and gain humanlike intelligence once inhabited by a soul. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: { sprite: Clothing/Head/Hats/witch.rsi, state: icon } diff --git a/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml b/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml index 9b3be6d7780..aba4cd40efe 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml @@ -21,7 +21,7 @@ - type: entity id: ScentTrackEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 1 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index a5e08e9f542..0e84e54a642 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -150,7 +150,7 @@ - type: entity name: soaplet id: SoapletSyndie - noSpawn: true + categories: [ HideSpawnMenu ] parent: Soap description: A tiny piece of syndicate soap. components: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml index cddf7f6075a..998d3ecf03e 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml @@ -104,7 +104,7 @@ - type: entity id: Vapor name: "vapor" - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SolutionContainerManager solutions: @@ -136,7 +136,7 @@ - type: entity id: BigVapor parent: Vapor - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Effects/chempuff.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml index 6f1c86e00ba..6f9c3157e96 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/Items/misc.yml @@ -3,7 +3,7 @@ - type: entity id: DelayedSmoke parent: BaseItem - noSpawn: true + categories: [ HideSpawnMenu ] name: delayed smoke suffix: "(10s)" components: @@ -16,7 +16,7 @@ - type: entity id: AdminInstantEffectEMP7 - noSpawn: true + categories: [ HideSpawnMenu ] suffix: EMP, 7 meters parent: AdminInstantEffectBase components: @@ -27,7 +27,7 @@ - type: entity id: DelayedEMP parent: BaseItem - noSpawn: true + categories: [ HideSpawnMenu ] name: delayed EMP (7 meters) components: - type: Sprite #DeltaV: Apparently these want sprites, probably because they're baseitems diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml b/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml index a5dcefacba5..f31b2aa78fd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mail/base_mail_large.yml @@ -73,7 +73,7 @@ isLarge: true - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMailLarge id: MailLargeAdminFun suffix: adminfun diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 960e37a6ccc..53a7a8f075a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -32,7 +32,7 @@ id: ActionBorgSwapModule name: Swap Module description: Select this module, enabling you to use the tools it provides. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction itemIconStyle: BigItem diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml index 4bd71f898db..d6855d630c6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml @@ -88,7 +88,7 @@ parent: Jug name: jug (carbon) id: JugCarbon - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-carbon @@ -103,7 +103,7 @@ parent: Jug name: jug (iodine) id: JugIodine - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-iodine @@ -118,7 +118,7 @@ parent: Jug name: jug (fluorine) id: JugFluorine - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-fluorine @@ -133,7 +133,7 @@ parent: Jug name: jug (chlorine) id: JugChlorine - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-chlorine @@ -148,7 +148,7 @@ parent: Jug name: jug (aluminium) id: JugAluminium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-aluminium @@ -163,7 +163,7 @@ parent: Jug name: jug (phosphorus) id: JugPhosphorus - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-phosphorus @@ -178,7 +178,7 @@ parent: Jug name: jug (sulfur) id: JugSulfur - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-sulfur @@ -193,7 +193,7 @@ parent: Jug name: jug (silicon) id: JugSilicon - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-silicon @@ -208,7 +208,7 @@ parent: Jug name: jug (hydrogen) id: JugHydrogen - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-hydrogen @@ -223,7 +223,7 @@ parent: Jug name: jug (lithium) id: JugLithium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-lithium @@ -238,7 +238,7 @@ parent: Jug name: jug (sodium) id: JugSodium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-sodium @@ -253,7 +253,7 @@ parent: Jug name: jug (potassium) id: JugPotassium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-potassium @@ -268,7 +268,7 @@ parent: Jug name: jug (radium) id: JugRadium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-radium @@ -283,7 +283,7 @@ parent: Jug name: jug (iron) id: JugIron - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-iron @@ -298,7 +298,7 @@ parent: Jug name: jug (copper) id: JugCopper - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-copper @@ -313,7 +313,7 @@ parent: Jug name: jug (gold) id: JugGold - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-gold @@ -328,7 +328,7 @@ parent: Jug name: jug (mercury) id: JugMercury - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-mercury @@ -343,7 +343,7 @@ parent: Jug name: jug (silver) id: JugSilver - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-silver @@ -358,7 +358,7 @@ parent: Jug name: jug (ethanol) id: JugEthanol - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-ethanol @@ -373,7 +373,7 @@ parent: Jug name: jug (sugar) id: JugSugar - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-sugar @@ -388,7 +388,7 @@ parent: Jug name: jug (nitrogen) id: JugNitrogen - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-nitrogen @@ -403,7 +403,7 @@ parent: Jug name: jug (oxygen) id: JugOxygen - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-oxygen @@ -418,7 +418,7 @@ parent: Jug name: jug (Plant-B-Gone) id: JugPlantBGone - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-plant-b-gone @@ -433,7 +433,7 @@ parent: Jug name: jug (welding fuel) id: JugWeldingFuel - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Label currentLabel: reagent-name-welding-fuel diff --git a/Resources/Prototypes/Entities/Objects/Tools/fulton.yml b/Resources/Prototypes/Entities/Objects/Tools/fulton.yml index 5255e5f303b..49d8c18c7c1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/fulton.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/fulton.yml @@ -88,7 +88,7 @@ - type: entity id: FultonEffect - noSpawn: true + categories: [ HideSpawnMenu ] name: fulton effect components: - type: TimedDespawn diff --git a/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml b/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml index 2320764d9ff..3081f60989e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/glowstick.yml @@ -115,7 +115,7 @@ name: light pulse test parent: BaseItem id: LightBehaviourTest1 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi @@ -146,7 +146,7 @@ name: color cycle test parent: BaseItem id: LightBehaviourTest2 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi @@ -178,7 +178,7 @@ name: multi-behaviour light test parent: BaseItem id: LightBehaviourTest3 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi @@ -218,7 +218,7 @@ name: light fade in test parent: BaseItem id: LightBehaviourTest4 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi @@ -249,7 +249,7 @@ name: light pulse radius test parent: BaseItem id: LightBehaviourTest5 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi @@ -280,7 +280,7 @@ name: light randomize radius test parent: BaseItem id: LightBehaviourTest6 - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Misc/glowstick.rsi diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index bd05b8d0f39..8ece2e1a862 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -1,6 +1,6 @@ - type: entity id: JetpackEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 2 @@ -69,7 +69,7 @@ id: ActionToggleJetpack name: Toggle jetpack description: Toggles the jetpack, giving you movement outside the station. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml index 630354f23d9..1aac4424149 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml @@ -52,7 +52,7 @@ - type: entity id: HotPotatoEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.6 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml index 31d7b65fe8b..65b7dbc1655 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/antimateriel.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet id: BulletAntiMateriel name: bullet (.60 anti-materiel) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml index 5ce0bf82fe9..f6a3ad590e4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/caseless_rifle.yml @@ -2,7 +2,7 @@ id: BulletCaselessRifle name: bullet (.25 caseless) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletCaselessRiflePractice name: bullet (.25 caseless practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletCaselessRifleRubber name: bullet (.25 caseless rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/grenade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/grenade.yml index 36d41e391ac..351e68a6200 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/grenade.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/grenade.yml @@ -1,7 +1,7 @@ - type: entity id: PelletClusterRubber name: pellet (ball, Rubber) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -20,7 +20,7 @@ - type: entity id: PelletClusterLethal name: pellet (ball, Lethal) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -37,7 +37,7 @@ - type: entity id: PelletClusterIncendiary name: pellet (ball, incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletIncendiary components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/heavy_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/heavy_rifle.yml index be6a07e486d..d37555c3443 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/heavy_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/heavy_rifle.yml @@ -2,7 +2,7 @@ id: BulletHeavyRifle name: bullet (.20 rifle) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletMinigun name: minigun bullet (.10 rifle) parent: BulletHeavyRifle - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml index 3a0df2ac6c7..7e0a19c448d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml @@ -2,7 +2,7 @@ id: BulletLightRifle name: bullet (.20 rifle) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletLightRiflePractice name: bullet (.20 rifle practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletLightRifleRubber name: bullet (.20 rifle rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -35,7 +35,7 @@ id: BulletLightRifleIncendiary parent: BaseBulletIncendiary name: bullet (.20 rifle incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -47,7 +47,7 @@ id: BulletLightRifleUranium parent: BaseBulletUranium name: bullet (.20 rifle uranium) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml index 1b5cf7890ba..ab45d6837f4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml @@ -2,7 +2,7 @@ id: BulletMagnum name: bullet (.45 magnum) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletMagnumPractice name: bullet (.45 magnum practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletMagnumRubber name: bullet (.45 magnum rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -37,7 +37,7 @@ id: BulletMagnumIncendiary parent: BaseBulletIncendiary name: bullet (.45 magnum incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -49,7 +49,7 @@ id: BulletMagnumAP name: bullet (.45 magnum armor-piercing) parent: BaseBulletAP - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -61,7 +61,7 @@ id: BulletMagnumUranium name: bullet (.45 magnum uranium) parent: BaseBulletUranium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml index 086a8dc914f..ef3807700da 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml @@ -2,7 +2,7 @@ id: BulletPistol name: bullet (.35 auto) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletPistolPractice name: bullet (.35 auto practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletPistolRubber name: bullet (.35 auto rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -35,7 +35,7 @@ id: BulletPistolIncendiary parent: BaseBulletIncendiary name: bullet (.35 auto incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -47,7 +47,7 @@ id: BulletPistolUranium parent: BaseBulletUranium name: bullet (.35 auto uranium) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml index 2113916cf52..3e1d49ddc02 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml @@ -2,7 +2,7 @@ id: BulletRifle name: bullet (0.20 rifle) parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -13,7 +13,7 @@ id: BulletRiflePractice name: bullet (0.20 rifle practice) parent: BaseBulletPractice - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -24,7 +24,7 @@ id: BulletRifleRubber name: bullet (0.20 rifle rubber) parent: BaseBulletRubber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -35,7 +35,7 @@ id: BulletRifleIncendiary parent: BaseBulletIncendiary name: bullet (0.20 rifle incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -47,7 +47,7 @@ id: BulletRifleUranium parent: BaseBulletUranium name: bullet (0.20 rifle uranium) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml index e119a846c9c..6e4570e1a16 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml @@ -1,7 +1,7 @@ - type: entity id: PelletShotgunSlug name: pellet (.50 slug) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -15,7 +15,7 @@ - type: entity id: PelletShotgunBeanbag name: beanbag (.50) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -31,7 +31,7 @@ - type: entity id: PelletShotgun name: pellet (.50) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -45,7 +45,7 @@ - type: entity id: PelletShotgunIncendiary name: pellet (.50 incendiary) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletIncendiary components: - type: Sprite @@ -62,7 +62,7 @@ - type: entity id: PelletShotgunPractice name: pellet (.50 practice) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletPractice components: - type: Sprite @@ -76,7 +76,7 @@ - type: entity id: PelletShotgunImprovised name: improvised pellet - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -92,7 +92,7 @@ - type: entity id: PelletShotgunTranquilizer name: pellet (.50 tranquilizer) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletPractice components: - type: Sprite @@ -119,7 +119,7 @@ - type: entity id: PelletShotgunFlare name: pellet (.50 flare) - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Physics bodyType: Dynamic @@ -166,7 +166,7 @@ - type: entity id: PelletShotgunUranium name: pellet (.50 uranium) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -181,7 +181,7 @@ - type: entity id: PelletGrapeshot #tally fucking ho name: grapeshot pellet - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBullet components: - type: Sprite @@ -200,7 +200,7 @@ id: PelletGlass name: glass shard parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite noRot: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml index 94cac9bcec3..a602f120813 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml @@ -1,7 +1,7 @@ # Used to animate the hitscan effects because effectsystem doesn't support it - type: entity id: HitscanEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 2.0 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml index d70b05bf61d..9be9e43e943 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml @@ -1,6 +1,6 @@ - type: entity id: BulletImpactEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.25 @@ -18,7 +18,7 @@ - type: entity id: BulletImpactEffectDisabler - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.2 @@ -36,7 +36,7 @@ - type: entity id: BulletImpactEffectOrangeDisabler - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.2 @@ -55,7 +55,7 @@ - type: entity id: BulletImpactEffectKinetic - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index b3abbfdfd3f..a230673e907 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -3,7 +3,7 @@ name: fireball description: You better GITTAH WEIGH. parent: BulletRocket - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight color: "#E25822" @@ -31,7 +31,7 @@ fireStacks: 0.35 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletTrigger id: ProjectileDragonsBreath name: dragon's breath @@ -68,7 +68,7 @@ name: fireball description: Hovering blob of flame. parent: ProjectileFireball - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 30 @@ -82,7 +82,7 @@ - type: entity id: ProjectilePolyboltBase parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/magic.rsi @@ -99,7 +99,7 @@ parent: ProjectilePolyboltBase name: carp polybolt description: Nooo, I don't wanna be fish! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PolymorphOnCollide polymorph: WizardForcedCarp @@ -112,7 +112,7 @@ parent: ProjectilePolyboltBase name: monkey polybolt description: Nooo, I don't wanna be monkey! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PolymorphOnCollide polymorph: WizardForcedMonkey @@ -125,7 +125,7 @@ parent: ProjectilePolyboltBase name: door polybolt description: Nooo, I don't wanna be door! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/magic.rsi @@ -146,7 +146,7 @@ name: healing bolt description: I COMMAND YOU TO LIVE! parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/magic.rsi @@ -166,7 +166,7 @@ id: BulletInstakillMagic name: magical lead cylinder parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] description: This looks familiar. components: - type: Projectile @@ -180,7 +180,7 @@ parent: ProjectilePolyboltBase name: cluwne polybolt description: knoH KnoH! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PolymorphOnCollide polymorph: WizardForcedCluwne @@ -193,7 +193,7 @@ parent: BaseBullet name: Icicle description: Brrrrr. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Structures/Specific/Anomalies/ice_anom.rsi @@ -209,7 +209,7 @@ id: ProjectilePolyboltBread name: bread polybolt description: Nooo, I don't wanna be bread! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PolymorphOnCollide polymorph: BreadMorph diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml index 6bdac1e85f0..60154a4fea5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml @@ -1,7 +1,7 @@ - type: entity id: MeteorLarge name: meteor - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite noRot: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 55e09014ec9..acf22532232 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -1,6 +1,6 @@ - type: entity id: MuzzleFlashEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 0.4 @@ -69,7 +69,7 @@ - type: entity id: BaseBulletTrigger # Trigger-on-collide bullets parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TriggerOnCollide fixtureID: projectile @@ -93,7 +93,7 @@ id: BaseBulletPractice name: base bullet practice parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -108,7 +108,7 @@ id: BaseBulletRubber name: base bullet rubber parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -127,7 +127,7 @@ id: BaseBulletIncendiary name: base bullet incendiary parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -145,7 +145,7 @@ id: BaseBulletAP name: base bullet armor-piercing parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -161,7 +161,7 @@ id: BaseBulletUranium name: base bullet uranium parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -177,7 +177,7 @@ name: taser bolt id: BulletTaser parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: FlyBySound sound: @@ -219,7 +219,7 @@ name : disabler bolt id: BulletDisabler parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Reflective reflective: @@ -262,7 +262,7 @@ name : disabler bolt practice id: BulletDisablerPractice parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: FlyBySound sound: @@ -302,7 +302,7 @@ name: emitter bolt id: EmitterBolt parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Structures/Power/Generation/Singularity/emitter.rsi @@ -339,7 +339,7 @@ name: watcher bolt id: WatcherBolt parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: FlyBySound sound: @@ -379,7 +379,7 @@ name: magmawing watcher bolt id: WatcherBoltMagmawing parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi @@ -398,7 +398,7 @@ id: BulletKinetic name: kinetic bolt parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] description: Not too bad, but you still don't want to get hit by it. components: - type: Reflective @@ -423,7 +423,7 @@ - type: entity id: BulletKineticShuttle parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite noRot: false @@ -451,7 +451,7 @@ id: BulletCharge name: charge bolt parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] description: Marks a target for additional damage. components: - type: Reflective @@ -485,7 +485,7 @@ parent: BaseBullet id: AnomalousParticleDelta name: delta particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -526,7 +526,7 @@ - type: entity parent: AnomalousParticleDelta id: AnomalousParticleDeltaStrong - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: AnomalousParticle particleType: Delta @@ -539,7 +539,7 @@ parent: AnomalousParticleDelta id: AnomalousParticleEpsilon name: epsilon particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -556,7 +556,7 @@ - type: entity parent: AnomalousParticleEpsilon id: AnomalousParticleEpsilonStrong - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: AnomalousParticle particleType: Epsilon @@ -569,7 +569,7 @@ parent: AnomalousParticleDelta id: AnomalousParticleZeta name: zeta particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -586,7 +586,7 @@ - type: entity parent: AnomalousParticleZeta id: AnomalousParticleZetaStrong - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: AnomalousParticle particleType: Zeta @@ -599,7 +599,7 @@ parent: AnomalousParticleDelta id: AnomalousParticleOmegaStrong name: omega particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -628,7 +628,7 @@ parent: AnomalousParticleDelta id: AnomalousParticleSigma name: sigma particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -646,7 +646,7 @@ parent: AnomalousParticleSigma id: AnomalousParticleSigmaStrong name: sigma particles - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: AnomalousParticle particleType: Sigma @@ -656,7 +656,7 @@ id: BulletRocket name: rocket parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -678,7 +678,7 @@ id: BulletWeakRocket name: weak rocket parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -700,7 +700,7 @@ id: BulletGrenadeBaton name: baton grenade parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -720,7 +720,7 @@ id: BulletGrenadeBlast name: blast grenade parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -737,7 +737,7 @@ id: BulletGrenadeFlash name: flash grenade parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -756,7 +756,7 @@ id: BulletGrenadeFrag name: frag grenade parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -773,7 +773,7 @@ id: BulletGrenadeEMP name: EMP rocket parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -794,7 +794,7 @@ id: BulletCap name: cap bullet parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Fun/toys.rsi @@ -810,7 +810,7 @@ id: BulletAcid name: acid spit parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Projectile damage: @@ -826,7 +826,7 @@ - type: entity id: BulletWaterShot name: water - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Clickable - type: Physics @@ -869,7 +869,7 @@ id: BulletCannonBall name: cannonball parent: BaseBulletTrigger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi @@ -890,7 +890,7 @@ - type: entity id: GrapplingHook name: grappling hook - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EmbeddableProjectile deleteOnRemove: true @@ -926,7 +926,7 @@ name : disabler bolt smg id: BulletDisablerSmg parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Reflective reflective: @@ -969,7 +969,7 @@ name: tesla gun lightning id: TeslaGunBullet parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: TimedDespawn lifetime: 5 @@ -1006,7 +1006,7 @@ name: energy bolt id: BulletEnergyGunLaser parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Reflective reflective: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index acbaac29222..b39303d9ede 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -83,7 +83,7 @@ - type: entity id: GrenadeFlashEffect - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PointLight enabled: true @@ -125,7 +125,7 @@ description: Go out on your own terms! parent: GrenadeBase id: SelfDestructSeq - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: ExplodeOnTrigger - type: Explosive diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index 329542a267a..9f4adce96ae 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -27,7 +27,7 @@ - BaseStationNanotrasen - BaseRandomStation - BaseStationMail # Nyano component, required for station mail to function - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform @@ -37,7 +37,7 @@ - BaseStation - BaseStationAlertLevels - BaseStationNanotrasen - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform @@ -48,7 +48,7 @@ - BaseStationJobsSpawning - BaseStationRecords - BaseStationNanotrasen - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform @@ -73,6 +73,6 @@ - BaseStationNanotrasen - BaseRandomStation - BaseStationMail - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Prototypes/Entities/Stations/syndicate.yml b/Resources/Prototypes/Entities/Stations/syndicate.yml index a6494169146..c863ef73523 100644 --- a/Resources/Prototypes/Entities/Stations/syndicate.yml +++ b/Resources/Prototypes/Entities/Stations/syndicate.yml @@ -11,6 +11,6 @@ parent: - BaseStation - BaseStationSyndicate - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Prototypes/Entities/Stations/test.yml b/Resources/Prototypes/Entities/Stations/test.yml index 0f2e40537a2..9eec6979e7a 100644 --- a/Resources/Prototypes/Entities/Stations/test.yml +++ b/Resources/Prototypes/Entities/Stations/test.yml @@ -6,6 +6,6 @@ - BaseStationJobsSpawning - BaseStationRecords - BaseStationAlertLevels - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index 14b3270ba88..d65d652ff42 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -358,6 +358,8 @@ components: - type: Foldable folded: true + - type: Strap + enabled: False - type: entity name: steel bench diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index 161ea25bc43..1cfe98f0f65 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -55,6 +55,7 @@ rotation: -90 buckleOffset: "0,0.15" unbuckleOffset: "0,0.15" + buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer visuals: @@ -79,6 +80,8 @@ components: - type: Foldable folded: true + - type: Strap + enabled: False - type: entity id: CheapRollerBed @@ -105,6 +108,8 @@ components: - type: Foldable folded: true + - type: Strap + enabled: False - type: entity id: EmergencyRollerBed @@ -131,3 +136,5 @@ components: - type: Foldable folded: true + - type: Strap + enabled: False diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml index 7aee5896472..3c1334169d8 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml @@ -61,7 +61,7 @@ - type: entity id: DisposalHolder - noSpawn: true + categories: [ HideSpawnMenu ] name: disposal holder components: - type: DisposalHolder diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/PA/particles.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/PA/particles.yml index 8d889ee5cbb..9d3ce9c931f 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/PA/particles.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/PA/particles.yml @@ -3,7 +3,7 @@ description: Accelerated particles. id: ParticlesProjectile parent: BaseBullet - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: @@ -54,7 +54,7 @@ description: Accelerated negative particles. id: AntiParticlesProjectile parent: ParticlesProjectile - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite layers: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml index 4e4ef8bdbcf..b7d6b5a128d 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/ame.yml @@ -108,7 +108,7 @@ mediumVoltageNode: ame - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: AmeController id: AmeControllerUnanchored suffix: Unanchored diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml index ed70b310915..1faee965d4e 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml @@ -144,7 +144,7 @@ # Construction Frames - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: BaseGeneratorWallmountFrame name: wallmount generator frame description: A construction frame for a wallmount generator. diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml index 601c7c360a5..382846938b2 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml @@ -1,6 +1,6 @@ - type: entity id: SolarPanelBasePhysSprite - noSpawn: true + categories: [ HideSpawnMenu ] name: solar panel placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml index 9a378c26a44..0245839e466 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml @@ -183,7 +183,7 @@ - # Spawned by the client-side circulator examine code to indicate the inlet/outlet direction. type: entity id: TegCirculatorArrow - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite sprite: Markers/teg_arrow.rsi diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 01147f439f3..9412d454476 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: BaseAPC name: APC description: A control terminal for the area's electrical systems. @@ -143,7 +143,7 @@ # APC under construction - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: APCFrame name: APC frame description: A control terminal for the area's electrical systems, lacking the electronics. diff --git a/Resources/Prototypes/Entities/Structures/Power/substation.yml b/Resources/Prototypes/Entities/Structures/Power/substation.yml index 489cfff6597..f96ef97187f 100644 --- a/Resources/Prototypes/Entities/Structures/Power/substation.yml +++ b/Resources/Prototypes/Entities/Structures/Power/substation.yml @@ -117,7 +117,7 @@ # Compact Wall Substation Base - type: entity id: BaseSubstationWall - noSpawn: true + categories: [ HideSpawnMenu ] name: wallmount substation description: A substation designed for compact shuttles and spaces. placement: @@ -260,7 +260,7 @@ # Construction Frame - type: entity id: BaseSubstationWallFrame - noSpawn: true + categories: [ HideSpawnMenu ] name: wallmount substation frame description: A substation frame for construction placement: diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index 1d184ad45eb..a773bef2334 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -698,7 +698,7 @@ - type: entity parent: GasCanisterBrokenBase id: StorageCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: yellow-1 @@ -706,7 +706,7 @@ - type: entity parent: GasCanisterBrokenBase id: AirCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: grey-1 @@ -714,7 +714,7 @@ - type: entity parent: GasCanisterBrokenBase id: OxygenCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: blue-1 @@ -722,7 +722,7 @@ - type: entity parent: GasCanisterBrokenBase id: NitrogenCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: red-1 @@ -730,7 +730,7 @@ - type: entity parent: GasCanisterBrokenBase id: CarbonDioxideCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: black-1 @@ -738,7 +738,7 @@ - type: entity parent: GasCanisterBrokenBase id: PlasmaCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: orange-1 @@ -746,7 +746,7 @@ - type: entity parent: GasCanisterBrokenBase id: TritiumCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: green-1 @@ -755,7 +755,7 @@ parent: GasCanisterBrokenBase id: WaterVaporCanisterBroken name: broken water vapor canister - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: water_vapor-1 @@ -763,7 +763,7 @@ - type: entity parent: GasCanisterBrokenBase id: AmmoniaCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: greenys-1 @@ -771,7 +771,7 @@ - type: entity parent: GasCanisterBrokenBase id: NitrousOxideCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: redws-1 @@ -779,7 +779,7 @@ - type: entity parent: GasCanisterBrokenBase id: FrezonCanisterBroken - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite state: frezon-1 diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml index 01c226cb0fd..52deca8e096 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/base_structurecrates.yml @@ -1,7 +1,7 @@ - type: entity parent: BaseStructureDynamic id: CrateGeneric - noSpawn: true + categories: [ HideSpawnMenu ] name: crate description: A large container for items. components: @@ -94,7 +94,7 @@ - type: entity parent: CrateGeneric id: CrateBaseWeldable - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Weldable - type: ResistLocker diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml index 8e957abfe7f..2f644f373d4 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml @@ -36,7 +36,7 @@ #- type: entity # id: LargeBarSign # name: large bar sign -# noSpawn: true +# categories: [ HideSpawnMenu ] # components: # - type: Clickable # - type: InteractionOutline diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml index 8fe6064b951..dbcb0763442 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml @@ -224,7 +224,7 @@ id: LockableButton name: lockable button parent: SignalButtonDirectional - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Appearance - type: Lock @@ -484,7 +484,7 @@ - type: entity id: ButtonFrame name: button frame - noSpawn: true + categories: [ HideSpawnMenu ] description: It's a frame to help distinguish switches visually. placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index dd7eb5bea82..8e6b0863d67 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -83,7 +83,7 @@ # Construction Frame - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] id: TimerFrame name: timer frame description: A construction frame for a timer. diff --git a/Resources/Prototypes/Entities/Virtual/beam.yml b/Resources/Prototypes/Entities/Virtual/beam.yml index 7ded09c3fff..fa249f0dd3d 100644 --- a/Resources/Prototypes/Entities/Virtual/beam.yml +++ b/Resources/Prototypes/Entities/Virtual/beam.yml @@ -2,7 +2,7 @@ - type: entity id: VirtualBeamEntityController name: BEAM ENTITY YOU SHOULD NOT SEE THIS - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Beam - type: TimedDespawn diff --git a/Resources/Prototypes/Entities/Virtual/electrocution.yml b/Resources/Prototypes/Entities/Virtual/electrocution.yml index ac65245191e..c45e0b3ca9e 100644 --- a/Resources/Prototypes/Entities/Virtual/electrocution.yml +++ b/Resources/Prototypes/Entities/Virtual/electrocution.yml @@ -12,7 +12,7 @@ - type: entity id: VirtualElectrocutionLoadHVPower parent: VirtualElectrocutionLoadBase - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: NodeContainer nodes: @@ -26,7 +26,7 @@ - type: entity id: VirtualElectrocutionLoadMVPower parent: VirtualElectrocutionLoadBase - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: NodeContainer nodes: @@ -40,7 +40,7 @@ - type: entity id: VirtualElectrocutionLoadApc parent: VirtualElectrocutionLoadBase - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: NodeContainer nodes: diff --git a/Resources/Prototypes/Entities/Virtual/stripping_hidden.yml b/Resources/Prototypes/Entities/Virtual/stripping_hidden.yml index 538e502a402..6e46340f973 100644 --- a/Resources/Prototypes/Entities/Virtual/stripping_hidden.yml +++ b/Resources/Prototypes/Entities/Virtual/stripping_hidden.yml @@ -5,7 +5,7 @@ id: StrippingHiddenEntity name: Hidden Entity description: There is something in this pocket. #Or maybe they ar... nah... too obvious a joke. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite texture: Interface/VerbIcons/information.svg.192dpi.png diff --git a/Resources/Prototypes/Entities/Virtual/tether.yml b/Resources/Prototypes/Entities/Virtual/tether.yml index ce953854d65..9459fd20887 100644 --- a/Resources/Prototypes/Entities/Virtual/tether.yml +++ b/Resources/Prototypes/Entities/Virtual/tether.yml @@ -1,6 +1,6 @@ - type: entity id: TetherEntity - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Physics bodyType: Dynamic diff --git a/Resources/Prototypes/Entities/Virtual/virtual_item.yml b/Resources/Prototypes/Entities/Virtual/virtual_item.yml index ed742435501..20f311db704 100644 --- a/Resources/Prototypes/Entities/Virtual/virtual_item.yml +++ b/Resources/Prototypes/Entities/Virtual/virtual_item.yml @@ -2,7 +2,7 @@ - type: entity id: VirtualItem name: VIRTUAL ITEM YOU SHOULD NOT SEE THIS - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Item - type: VirtualItem diff --git a/Resources/Prototypes/Entities/World/Debris/asteroids.yml b/Resources/Prototypes/Entities/World/Debris/asteroids.yml index 061288d010b..1541190cd21 100644 --- a/Resources/Prototypes/Entities/World/Debris/asteroids.yml +++ b/Resources/Prototypes/Entities/World/Debris/asteroids.yml @@ -55,7 +55,7 @@ id: AsteroidDebrisSmall parent: BaseAsteroidDebris name: Asteroid Debris Small - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -65,7 +65,7 @@ id: AsteroidDebrisMedium parent: BaseAsteroidDebris name: Asteroid Debris Medium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -75,7 +75,7 @@ id: AsteroidDebrisLarge parent: BaseAsteroidDebris name: Asteroid Debris Large - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -85,7 +85,7 @@ id: AsteroidDebrisLarger parent: BaseAsteroidDebris name: Asteroid Debris Larger - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -96,7 +96,7 @@ id: AsteroidSalvageSmall parent: BaseAsteroidDebris name: Salvage Asteroid Small - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -108,7 +108,7 @@ id: AsteroidSalvageMedium parent: BaseAsteroidDebris name: Salvage Asteroid Medium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -120,7 +120,7 @@ id: AsteroidSalvageLarge parent: BaseAsteroidDebris name: Salvage Asteroid Large - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -132,7 +132,7 @@ id: AsteroidSalvageHuge parent: BaseAsteroidDebris name: Salvage Asteroid Huge - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder diff --git a/Resources/Prototypes/Entities/World/Debris/wrecks.yml b/Resources/Prototypes/Entities/World/Debris/wrecks.yml index 4c5a3be48f7..743d92e1bac 100644 --- a/Resources/Prototypes/Entities/World/Debris/wrecks.yml +++ b/Resources/Prototypes/Entities/World/Debris/wrecks.yml @@ -53,7 +53,7 @@ id: ScrapDebrisSmall parent: BaseScrapDebris name: Scrap Debris Small - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -63,7 +63,7 @@ id: ScrapDebrisMedium parent: BaseScrapDebris name: Scrap Debris Medium - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder @@ -73,7 +73,7 @@ id: ScrapDebrisLarge parent: BaseScrapDebris name: Scrap Debris Large - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MapGrid - type: BlobFloorPlanBuilder diff --git a/Resources/Prototypes/Entities/World/chunk.yml b/Resources/Prototypes/Entities/World/chunk.yml index b60fd0d91be..c7052662674 100644 --- a/Resources/Prototypes/Entities/World/chunk.yml +++ b/Resources/Prototypes/Entities/World/chunk.yml @@ -5,7 +5,7 @@ description: | It's rude to stare. It's also a bit odd you're looking at the abstract representation of the grid of reality. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldChunk - type: Sprite diff --git a/Resources/Prototypes/GameRules/cargo_gifts.yml b/Resources/Prototypes/GameRules/cargo_gifts.yml index 3787f4e6034..e74ce0cb65e 100644 --- a/Resources/Prototypes/GameRules/cargo_gifts.yml +++ b/Resources/Prototypes/GameRules/cargo_gifts.yml @@ -1,7 +1,7 @@ - type: entity id: GiftsPizzaPartySmall parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 5 @@ -21,7 +21,7 @@ - type: entity id: GiftsPizzaPartyLarge parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 2 @@ -40,7 +40,7 @@ - type: entity id: GiftsEngineering parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 5 @@ -63,7 +63,7 @@ - type: entity id: GiftsVendingRestock parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 4 @@ -86,7 +86,7 @@ - type: entity id: GiftsJanitor parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 6 @@ -106,7 +106,7 @@ - type: entity id: GiftsMedical parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 8 @@ -128,7 +128,7 @@ - type: entity id: GiftsSpacingSupplies parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 4 @@ -150,7 +150,7 @@ - type: entity id: GiftsFireProtection parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 4 @@ -170,7 +170,7 @@ - type: entity id: GiftsSecurityGuns parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 3 @@ -191,7 +191,7 @@ - type: entity id: GiftsSecurityRiot parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 4 diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 4923e399dd0..801dcc4b859 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -1,7 +1,7 @@ - type: entity id: AnomalySpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 8 @@ -12,7 +12,7 @@ - type: entity id: BluespaceArtifact parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 8 @@ -23,7 +23,7 @@ - type: entity id: BluespaceLocker parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 2 @@ -35,7 +35,7 @@ - type: entity id: BreakerFlip parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 7 @@ -46,7 +46,7 @@ - type: entity id: BureaucraticError parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -58,7 +58,7 @@ - type: entity id: ClericalError parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -70,7 +70,7 @@ - type: entity parent: BaseGameRule id: ClosetSkeleton - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 5 @@ -82,7 +82,7 @@ - type: entity parent: BaseGameRule id: DragonSpawn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 6.5 @@ -96,7 +96,7 @@ - type: entity parent: BaseGameRule id: NinjaSpawn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 6 @@ -109,7 +109,7 @@ - type: entity parent: BaseGameRule id: RevenantSpawn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 7.5 @@ -123,7 +123,7 @@ #- type: entity # id: FalseAlarm # parent: BaseGameRule -# noSpawn: true +# categories: [ HideSpawnMenu ] # components: # - type: StationEvent # weight: 15 @@ -133,7 +133,7 @@ - type: entity id: GasLeak parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -145,7 +145,7 @@ - type: entity id: KudzuGrowth parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 15 @@ -158,7 +158,7 @@ - type: entity id: MeteorSwarm parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 30 @@ -173,7 +173,7 @@ - type: entity id: MouseMigration parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -198,7 +198,7 @@ - type: entity id: CockroachMigration parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -215,7 +215,7 @@ - type: entity id: PowerGridCheck parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 5 @@ -229,7 +229,7 @@ - type: entity id: RandomSentience parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 6 @@ -240,7 +240,7 @@ - type: entity parent: BaseGameRule id: SolarFlare - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 8 @@ -267,7 +267,7 @@ - type: entity id: VentClog parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -281,7 +281,7 @@ - type: entity id: SlimesSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -302,7 +302,7 @@ - type: entity id: SpiderSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -319,7 +319,7 @@ - type: entity id: SpiderClownSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -336,7 +336,7 @@ - type: entity id: ZombieOutbreak parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 50 @@ -370,7 +370,7 @@ - type: entity id: LoneOpsSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 35 @@ -404,7 +404,7 @@ - type: entity id: SleeperAgentsRule parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 25 @@ -427,7 +427,7 @@ - type: entity id: MassHallucinations parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 7 @@ -444,7 +444,7 @@ - type: entity id: ImmovableRodSpawn parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -455,7 +455,7 @@ - type: ImmovableRodRule - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseGameRule id: IonStorm components: @@ -468,7 +468,7 @@ - type: entity id: MimicVendorRule parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent earliestStart: 0 diff --git a/Resources/Prototypes/GameRules/midround.yml b/Resources/Prototypes/GameRules/midround.yml index db1a76adc08..fca0073b4e5 100644 --- a/Resources/Prototypes/GameRules/midround.yml +++ b/Resources/Prototypes/GameRules/midround.yml @@ -3,7 +3,7 @@ - type: entity id: Ninja parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GenericAntagRule agentName: ninja-round-end-agent-name @@ -19,7 +19,7 @@ # stores configuration for dragon - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseGameRule id: Dragon components: @@ -30,7 +30,7 @@ - DragonSurviveObjective - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseGameRule id: Thief components: @@ -55,7 +55,7 @@ sound: "/Audio/Misc/thief_greeting.ogg" #- type: entity -# noSpawn: true +# categories: [ HideSpawnMenu ] # parent: BaseGameRule # id: Exterminator # components: diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 39bea004d02..4ae53c9b37a 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -1,12 +1,12 @@ - type: entity id: BaseGameRule abstract: true - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GameRule - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseGameRule id: SubGamemodesRule components: @@ -18,7 +18,7 @@ - type: entity id: DeathMatch31 parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: DeathMatchRule rewardSpawns: @@ -48,7 +48,7 @@ - type: entity id: InactivityTimeRestart parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InactivityRule inactivityMaxTime: 600 @@ -57,7 +57,7 @@ - type: entity id: MaxTimeRestart parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: MaxTimeRestartRule roundMaxTime: 300 @@ -66,7 +66,7 @@ - type: entity id: Nukeops parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GameRule minPlayers: 35 @@ -136,7 +136,7 @@ - type: entity id: Traitor parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GameRule minPlayers: 5 @@ -157,7 +157,7 @@ - type: entity id: Revolutionary parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GameRule minPlayers: 15 @@ -182,21 +182,21 @@ - type: entity id: Sandbox parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SandboxRule - type: entity id: Secret parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: SecretRule - type: entity id: Zombie parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GameRule minPlayers: 20 @@ -229,21 +229,21 @@ - type: entity id: BasicStationEventScheduler parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: BasicStationEventScheduler - type: entity id: RampingStationEventScheduler parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: RampingStationEventScheduler - type: entity id: HellshiftStationEventScheduler parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: RampingStationEventScheduler chaosModifier: 4 # By default, one event each 30-10 seconds after two hours. Changing CVars will cause this to deviate. @@ -253,7 +253,7 @@ - type: entity id: IrregularStationEventScheduler parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: OscillatingStationEventScheduler minChaos: 0.8 @@ -266,7 +266,7 @@ - type: entity id: IrregularExtendedStationEventScheduler parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: OscillatingStationEventScheduler minChaos: 0.8 @@ -281,7 +281,7 @@ - type: entity id: BasicRoundstartVariation parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: RoundstartStationVariationRule rules: diff --git a/Resources/Prototypes/GameRules/unknown_shuttles.yml b/Resources/Prototypes/GameRules/unknown_shuttles.yml index f44bbdcaaab..db9d4756a89 100644 --- a/Resources/Prototypes/GameRules/unknown_shuttles.yml +++ b/Resources/Prototypes/GameRules/unknown_shuttles.yml @@ -1,7 +1,7 @@ - type: entity id: UnknownShuttleCargoLost parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -14,7 +14,7 @@ - type: entity id: UnknownShuttleTravelingCuisine parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -27,7 +27,7 @@ - type: entity id: UnknownShuttleDisasterEvacPod parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -40,7 +40,7 @@ - type: entity id: UnknownShuttleHonki parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false @@ -53,7 +53,7 @@ - type: entity id: UnknownShuttleSyndieEvacPod parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: false diff --git a/Resources/Prototypes/GameRules/variation.yml b/Resources/Prototypes/GameRules/variation.yml index 2884d5f9d6f..4e0d917176a 100644 --- a/Resources/Prototypes/GameRules/variation.yml +++ b/Resources/Prototypes/GameRules/variation.yml @@ -4,7 +4,7 @@ id: BaseVariationPass parent: BaseGameRule abstract: true - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationVariationPassRule @@ -13,14 +13,14 @@ - type: entity id: BasicPoweredLightVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PoweredLightVariationPass - type: entity id: SolidWallRustingVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WallReplaceVariationPass - type: EntityReplaceVariationPass @@ -32,7 +32,7 @@ - type: entity id: ReinforcedWallRustingVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: ReinforcedWallReplaceVariationPass - type: EntityReplaceVariationPass @@ -44,7 +44,7 @@ - type: entity id: BasicTrashVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntitySpawnVariationPass tilesPerEntityAverage: 35 @@ -105,7 +105,7 @@ - type: entity id: BasicPuddleMessVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PuddleMessVariationPass randomPuddleSolutionFill: RandomFillTrashPuddle @@ -113,7 +113,7 @@ - type: entity id: BloodbathPuddleMessVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: PuddleMessVariationPass tilesPerSpillAverage: 150 @@ -123,7 +123,7 @@ - type: entity id: CutWireVariationPass parent: BaseVariationPass - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: CutWireVariationPass wireCutChance: 0.01 diff --git a/Resources/Prototypes/Guidebook/rules.yml b/Resources/Prototypes/Guidebook/rules.yml new file mode 100644 index 00000000000..a59af2c5edc --- /dev/null +++ b/Resources/Prototypes/Guidebook/rules.yml @@ -0,0 +1,362 @@ +- type: guideEntry # Default for forks and stuff. Should not be listed anywhere if the server is using a custom ruleset. + id: DefaultRuleset + name: guide-entry-rules + text: "/ServerInfo/Guidebook/ServerRules/DefaultRules.xml" + +- type: guideEntry + id: CoreRuleset + name: guide-entry-rules-core-only + priority: 0 + text: "/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml" + +- type: guideEntry + id: StandardRuleset + name: guide-entry-rules-lrp + priority: 5 + text: "/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml" + +- type: guideEntry + id: MRPRuleset + name: guide-entry-rules-mrp + priority: 10 + text: "/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml" + +- type: guideEntry + id: RoleTypes + name: guide-entry-rules-role-types + priority: 20 + text: "/ServerInfo/Guidebook/ServerRules/RoleTypes.xml" + +- type: guideEntry + id: CoreRules + name: guide-entry-rules-core + priority: 30 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml" + children: + - RuleC1 + - RuleC2 + - RuleC3 + - RuleC4 + - RuleC5 + - RuleC6 + - RuleC7 + - RuleC8 + - RuleC9 + - RuleC10 + - RuleC11 + - RuleC12 + - RuleC13 + - RuleC14 + +- type: guideEntry + id: RuleC1 + name: guide-entry-rules-c1 + priority: 1 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml" + +- type: guideEntry + id: RuleC2 + name: guide-entry-rules-c2 + priority: 2 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml" + +- type: guideEntry + id: RuleC3 + name: guide-entry-rules-c3 + priority: 3 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml" + +- type: guideEntry + id: RuleC4 + name: guide-entry-rules-c4 + priority: 4 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml" + +- type: guideEntry + id: RuleC5 + name: guide-entry-rules-c5 + priority: 5 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml" + +- type: guideEntry + id: RuleC6 + name: guide-entry-rules-c6 + priority: 6 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml" + +- type: guideEntry + id: RuleC7 + name: guide-entry-rules-c7 + priority: 7 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml" + +- type: guideEntry + id: RuleC8 + name: guide-entry-rules-c8 + priority: 8 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml" + +- type: guideEntry + id: RuleC9 + name: guide-entry-rules-c9 + priority: 9 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml" + +- type: guideEntry + id: RuleC10 + name: guide-entry-rules-c10 + priority: 10 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml" + +- type: guideEntry + id: RuleC11 + name: guide-entry-rules-c11 + priority: 11 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml" + +- type: guideEntry + id: RuleC12 + name: guide-entry-rules-c12 + priority: 12 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml" + +- type: guideEntry + id: RuleC13 + name: guide-entry-rules-c13 + priority: 13 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml" + +- type: guideEntry + id: RuleC14 + name: guide-entry-rules-c14 + priority: 14 + text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml" + +- type: guideEntry + id: RoleplayRules + name: guide-entry-rules-roleplay + priority: 40 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml" + children: + - RuleR1 + - RuleR2 + - RuleR3 + - RuleR4 + - RuleR5 + - RuleR6 + - RuleR7 + - RuleR8 + - RuleR9 + - RuleR10 + - RuleR11 + - RuleR12 + - RuleR13 + - RuleR14 + - RuleR15 + +- type: guideEntry + id: RuleR1 + name: guide-entry-rules-r1 + priority: 1 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml" + +- type: guideEntry + id: RuleR2 + name: guide-entry-rules-r2 + priority: 2 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml" + +- type: guideEntry + id: RuleR3 + name: guide-entry-rules-r3 + priority: 3 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml" + +- type: guideEntry + id: RuleR4 + name: guide-entry-rules-r4 + priority: 4 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml" + +- type: guideEntry + id: RuleR5 + name: guide-entry-rules-r5 + priority: 5 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml" + +- type: guideEntry + id: RuleR6 + name: guide-entry-rules-r6 + priority: 6 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml" + +- type: guideEntry + id: RuleR7 + name: guide-entry-rules-r7 + priority: 7 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml" + +- type: guideEntry + id: RuleR8 + name: guide-entry-rules-r8 + priority: 8 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml" + +- type: guideEntry + id: RuleR9 + name: guide-entry-rules-r9 + priority: 9 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml" + +- type: guideEntry + id: RuleR10 + name: guide-entry-rules-r10 + priority: 10 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml" + +- type: guideEntry + id: RuleR11 + name: guide-entry-rules-r11 + priority: 11 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml" + +- type: guideEntry + id: RuleR12 + name: guide-entry-rules-r12 + priority: 12 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml" + +- type: guideEntry + id: RuleR13 + name: guide-entry-rules-r13 + priority: 13 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml" + +- type: guideEntry + id: RuleR14 + name: guide-entry-rules-r14 + priority: 14 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml" + +- type: guideEntry + id: RuleR15 + name: guide-entry-rules-r15 + priority: 15 + text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml" + +- type: guideEntry + id: SiliconRules + name: guide-entry-rules-silicon + priority: 50 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml" + children: + - RuleS1 + - RuleS2 + - RuleS3 + - RuleS4 + - RuleS5 + - RuleS6 + - RuleS7 + - RuleS8 + - RuleS9 + - RuleS10 + +- type: guideEntry + id: RuleS1 + name: guide-entry-rules-s1 + priority: 1 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml" + +- type: guideEntry + id: RuleS2 + name: guide-entry-rules-s2 + priority: 2 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml" + +- type: guideEntry + id: RuleS3 + name: guide-entry-rules-s3 + priority: 3 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml" + +- type: guideEntry + id: RuleS4 + name: guide-entry-rules-s4 + priority: 4 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml" + +- type: guideEntry + id: RuleS5 + name: guide-entry-rules-s5 + priority: 5 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml" + +- type: guideEntry + id: RuleS6 + name: guide-entry-rules-s6 + priority: 6 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml" + +- type: guideEntry + id: RuleS7 + name: guide-entry-rules-s7 + priority: 7 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml" + +- type: guideEntry + id: RuleS8 + name: guide-entry-rules-s8 + priority: 8 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml" + +- type: guideEntry + id: RuleS9 + name: guide-entry-rules-s9 + priority: 9 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml" + +- type: guideEntry + id: RuleS10 + name: guide-entry-rules-s10 + priority: 10 + text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml" + +- type: guideEntry + id: SpaceLaw + name: guide-entry-rules-space-law + priority: 60 + text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml" + children: + - SpaceLawControlledSubstances + - SpaceLawRestrictedGear + - SpaceLawRestrictedWeapons + +- type: guideEntry + id: SpaceLawControlledSubstances + name: guide-entry-rules-sl-controlled-substances + priority: 20 + text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml" + +- type: guideEntry + id: SpaceLawRestrictedGear + name: guide-entry-rules-sl-restricted-gear + priority: 30 + text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml" + +- type: guideEntry + id: SpaceLawRestrictedWeapons + name: guide-entry-rules-sl-restricted-weapons + priority: 40 + text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml" + +- type: guideEntry + id: BanTypes + name: guide-entry-rules-ban-types + priority: 90 + text: "/ServerInfo/Guidebook/ServerRules/BanTypes.xml" + +- type: guideEntry + id: BanDurations + name: guide-entry-rules-ban-durations + priority: 100 + text: "/ServerInfo/Guidebook/ServerRules/BanDurations.xml" diff --git a/Resources/Prototypes/Guidebook/ss14.yml b/Resources/Prototypes/Guidebook/ss14.yml index c1017fefcae..5b1f1dd8f97 100644 --- a/Resources/Prototypes/Guidebook/ss14.yml +++ b/Resources/Prototypes/Guidebook/ss14.yml @@ -3,6 +3,7 @@ name: guide-entry-ss14 text: "/ServerInfo/Guidebook/SpaceStation14.xml" children: + - SpaceLaw - Controls - Jobs - Survival diff --git a/Resources/Prototypes/Magic/event_spells.yml b/Resources/Prototypes/Magic/event_spells.yml index e59e1b2db88..742c187d717 100644 --- a/Resources/Prototypes/Magic/event_spells.yml +++ b/Resources/Prototypes/Magic/event_spells.yml @@ -2,7 +2,7 @@ id: ActionSummonGhosts name: Summon Ghosts description: Makes all current ghosts permanently invisible - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 120 diff --git a/Resources/Prototypes/Magic/forcewall_spells.yml b/Resources/Prototypes/Magic/forcewall_spells.yml index d3d8fef7608..a047a4a6f77 100644 --- a/Resources/Prototypes/Magic/forcewall_spells.yml +++ b/Resources/Prototypes/Magic/forcewall_spells.yml @@ -2,7 +2,7 @@ id: ActionForceWall name: Forcewall description: Creates a magical barrier. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 10 diff --git a/Resources/Prototypes/Magic/knock_spell.yml b/Resources/Prototypes/Magic/knock_spell.yml index e2c3dcfd4c7..a0e22ec8f4b 100644 --- a/Resources/Prototypes/Magic/knock_spell.yml +++ b/Resources/Prototypes/Magic/knock_spell.yml @@ -2,7 +2,7 @@ id: ActionKnock name: Knock description: This spell opens nearby doors. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 10 diff --git a/Resources/Prototypes/Magic/projectile_spells.yml b/Resources/Prototypes/Magic/projectile_spells.yml index b8db7557bba..e2697c59b18 100644 --- a/Resources/Prototypes/Magic/projectile_spells.yml +++ b/Resources/Prototypes/Magic/projectile_spells.yml @@ -2,7 +2,7 @@ id: ActionFireball name: Fireball description: Fires an explosive fireball towards the clicked location. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Magic - type: WorldTargetAction @@ -29,7 +29,7 @@ parent: ActionFireball name: Fireball II description: Fires a fireball, but faster! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction useDelay: 10 @@ -52,7 +52,7 @@ parent: ActionFireball name: Fireball III description: The fastest fireball in the west! - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction useDelay: 8 diff --git a/Resources/Prototypes/Magic/rune_spells.yml b/Resources/Prototypes/Magic/rune_spells.yml index 42022f57850..da072004b1f 100644 --- a/Resources/Prototypes/Magic/rune_spells.yml +++ b/Resources/Prototypes/Magic/rune_spells.yml @@ -2,7 +2,7 @@ id: ActionFlashRune name: Flash Rune description: Summons a rune that flashes if used. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 10 @@ -17,7 +17,7 @@ id: ActionExplosionRune name: Explosion Rune description: Summons a rune that explodes if used. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 20 @@ -32,7 +32,7 @@ id: ActionIgniteRune name: Ignite Rune description: Summons a rune that ignites if used. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 15 @@ -47,7 +47,7 @@ id: ActionStunRune name: Stun Rune description: Summons a rune that stuns if used. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 10 diff --git a/Resources/Prototypes/Magic/smite_spells.yml b/Resources/Prototypes/Magic/smite_spells.yml index e629e565058..a0875211307 100644 --- a/Resources/Prototypes/Magic/smite_spells.yml +++ b/Resources/Prototypes/Magic/smite_spells.yml @@ -2,7 +2,7 @@ id: ActionSmite name: Smite description: Instantly gibs a target. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction useDelay: 60 diff --git a/Resources/Prototypes/Magic/spawn_spells.yml b/Resources/Prototypes/Magic/spawn_spells.yml index 3f8148b83cb..2800499fcab 100644 --- a/Resources/Prototypes/Magic/spawn_spells.yml +++ b/Resources/Prototypes/Magic/spawn_spells.yml @@ -2,7 +2,7 @@ id: ActionSpawnMagicarpSpell name: Summon Magicarp description: This spell summons three Magi-Carp to your aid! May or may not turn on user. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction useDelay: 10 diff --git a/Resources/Prototypes/Magic/staves.yml b/Resources/Prototypes/Magic/staves.yml index ef94a3910fd..d9b71e39a85 100644 --- a/Resources/Prototypes/Magic/staves.yml +++ b/Resources/Prototypes/Magic/staves.yml @@ -34,7 +34,7 @@ - type: entity id: ActionRgbLight - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: EntityTargetAction whitelist: { components: [ PointLight ] } diff --git a/Resources/Prototypes/Magic/teleport_spells.yml b/Resources/Prototypes/Magic/teleport_spells.yml index cc89cf8ee0d..1439dcea17e 100644 --- a/Resources/Prototypes/Magic/teleport_spells.yml +++ b/Resources/Prototypes/Magic/teleport_spells.yml @@ -2,7 +2,7 @@ id: ActionBlink name: Blink description: Teleport to the clicked location. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: WorldTargetAction useDelay: 10 diff --git a/Resources/Prototypes/Magic/utility_spells.yml b/Resources/Prototypes/Magic/utility_spells.yml index dccdda37898..6c0b08d9b63 100644 --- a/Resources/Prototypes/Magic/utility_spells.yml +++ b/Resources/Prototypes/Magic/utility_spells.yml @@ -2,7 +2,7 @@ id: ActionChargeSpell name: Charge description: Adds a charge back to your wand - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction useDelay: 30 diff --git a/Resources/Prototypes/Nyanotrasen/Actions/types.yml b/Resources/Prototypes/Nyanotrasen/Actions/types.yml index cab8f4a1f4e..9bdb13397a6 100644 --- a/Resources/Prototypes/Nyanotrasen/Actions/types.yml +++ b/Resources/Prototypes/Nyanotrasen/Actions/types.yml @@ -2,7 +2,7 @@ id: ActionEatMouse name: action-name-eat-mouse description: action-description-eat-mouse - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction icon: Nyanotrasen/Icons/verbiconfangs.png @@ -12,7 +12,7 @@ id: ActionHairball name: action-name-hairball description: action-description-hairball - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction charges: 1 diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml index 810f9ec03b6..c4843240ebb 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackScience id: ClothingBackpackMantisFilled components: diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 88e33cdd252..6f4e2fea626 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackDuffelScience id: ClothingBackpackDuffelMantisFilled components: diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml index e90759ac8fb..50106b11823 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: ClothingBackpackSatchelScience id: ClothingBackpackSatchelMantisFilled components: diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Books/lore.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Books/lore.yml index 6c3eb06108f..2a8173dbec2 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Books/lore.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Books/lore.yml @@ -2,7 +2,7 @@ name: epistemics book parent: BookRandom # placeholder id: BookSalvageEpistemics - noSpawn: true + categories: [ HideSpawnMenu ] description: 'A metallic hardcover book.' - type: entity diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Paper/salvage_lore.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Paper/salvage_lore.yml index f37c3bbdb3e..dbccfd4484b 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Paper/salvage_lore.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Paper/salvage_lore.yml @@ -18,7 +18,7 @@ - type: entity id: PaperWrittenSalvageLoreGaming1 - noSpawn: true # keep this from spamming spawn sheet + categories: [ HideSpawnMenu ] # keep this from spamming spawn sheet suffix: "Salvage: Lore: Gaming 1" parent: Paper components: @@ -31,7 +31,7 @@ - Alexander - type: entity id: PaperWrittenSalvageLoreGaming2 - noSpawn: true # keep this from spamming spawn sheet + categories: [ HideSpawnMenu ] # keep this from spamming spawn sheet suffix: "Salvage: Lore: Gaming 2" parent: Paper components: @@ -51,7 +51,7 @@ What even are you trying to do here, Leah? - Your Friendly DM - type: entity id: PaperWrittenSalvageLoreGaming3 - noSpawn: true # keep this from spamming spawn sheet + categories: [ HideSpawnMenu ] # keep this from spamming spawn sheet suffix: "Salvage: Lore: Gaming 3" parent: Paper components: @@ -65,7 +65,7 @@ Oh dear goodness they just started randomly killing everybody - type: entity id: PaperWrittenSalvageLoreGaming4 - noSpawn: true # keep this from spamming spawn sheet + categories: [ HideSpawnMenu ] # keep this from spamming spawn sheet suffix: "Salvage: Lore: Gaming 4" parent: Paper components: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml index 3896cd1ef1b..9625ec95d6b 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hardsuit-helmets.yml @@ -1,7 +1,7 @@ - type: entity parent: ClothingHeadHelmetHardsuitRd id: ClothingHeadHelmetHardsuitMystagogue - noSpawn: true + categories: [ HideSpawnMenu ] name: mystagogue's hardsuit helmet description: Lightweight hardsuit helmet that has a galaxy-first psionic passthrough system. components: @@ -15,7 +15,7 @@ - type: entity parent: ClothingHeadHelmetHardsuitSyndie id: ClothingHeadHelmetHardsuitSyndieReverseEngineered - noSpawn: true + categories: [ HideSpawnMenu ] name: SA-122 combat hardsuit helmet description: An advanced hardsuit helmet designed for work in special operations. components: @@ -27,7 +27,7 @@ - type: entity parent: ClothingHeadHelmetHardsuitCybersun id: ClothingHeadHelmetHardsuitJuggernautReverseEngineered - noSpawn: true + categories: [ HideSpawnMenu ] name: SA-126 combat hardsuit helmet description: An assault hardsuit helmet featuring a top-secret translucent polymer. components: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Effects/lightning.yml b/Resources/Prototypes/Nyanotrasen/Entities/Effects/lightning.yml index 35f5ee06e94..e6a3a575a23 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Effects/lightning.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Effects/lightning.yml @@ -2,7 +2,7 @@ parent: BaseLightning id: LightningNoospheric name: noospheric lightning - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Electrified enabled: false diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml index a21976fa7a5..d0207e362e3 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/ghost_roles.yml @@ -3,7 +3,7 @@ name: ghost role spawn point suffix: Ifrit parent: MarkerBase - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GhostRoleMobSpawner prototype: MobIfritFamiliar @@ -22,7 +22,7 @@ id: SpawnPointGhostFugitive name: ghost role spawn point parent: MarkerBase - noSpawn: true + categories: [ HideSpawnMenu ] components: # - type: GhostRoleMobSpawner # prototype: MobHumanFugitive # Todo @@ -56,7 +56,7 @@ # name: ghost role spawn point # suffix: Vampire spider # parent: MarkerBase -# noSpawn: true +# categories: [ HideSpawnMenu ] # components: # - type: GhostRoleMobSpawner # prototype: MobGiantSpiderVampireAngry diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml index 70628ec4e51..d133377e01b 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml @@ -2,7 +2,7 @@ id: MobObserverTelegnostic name: telegnostic projection description: Ominous. Placeholder sprite. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: Sprite overrideContainerOcclusion: true # Ghosts always show up regardless of where they're contained. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml index 8a5663dce45..8ac15fd865c 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/Oni.yml @@ -53,5 +53,5 @@ name: Urist McOni parent: MobHumanDummy id: MobOniDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy oni meant to be used in character setup. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index 44779fe9508..3b1776d044a 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -90,7 +90,7 @@ name: Urist McHands parent: MobHumanDummy id: MobFelinidDummy - noSpawn: true + categories: [ HideSpawnMenu ] description: A dummy felinid meant to be used in character setup. components: - type: HumanoidAppearance diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml index 177d6151ccb..bd08bec9ddc 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml @@ -1,6 +1,6 @@ # PSB, Prepacked Sustenance Bar. With variety. - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: FoodPacketTrash id: FoodPSBTrash name: psb wrapper diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml index 75007db11ca..320129fa554 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml @@ -111,7 +111,7 @@ # This empty parcel is allowed to exist and evade the tests for the admin # mailto command. - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMail id: MailAdminFun suffix: adminfun diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml index 42826c94cba..47d65ce8f7c 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Projectiles/shotgun.yml @@ -1,7 +1,7 @@ - type: entity id: PelletShotgunSoulbreaker name: pellet (.50 soulbreaker) - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseBulletPractice components: - type: Sprite diff --git a/Resources/Prototypes/Nyanotrasen/GameRules/events.yml b/Resources/Prototypes/Nyanotrasen/GameRules/events.yml index de9ea15a699..8612fb0fec7 100644 --- a/Resources/Prototypes/Nyanotrasen/GameRules/events.yml +++ b/Resources/Prototypes/Nyanotrasen/GameRules/events.yml @@ -2,7 +2,7 @@ - type: entity id: NoosphericStorm parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent startAnnouncement: true @@ -25,7 +25,7 @@ - type: MidRoundAntagRule - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMidRoundAntag id: RatKingSpawn components: @@ -33,7 +33,7 @@ spawner: SpawnPointGhostRatKing - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseMidRoundAntag id: ParadoxAnomalySpawn components: @@ -44,7 +44,7 @@ - type: entity id: BaseGlimmerEvent parent: BaseGameRule - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent # Favor glimmer events just a little more than regular events. @@ -56,7 +56,7 @@ - type: entity id: MundaneDischarge parent: BaseGlimmerEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent reoccurrenceDelay: 15 @@ -69,7 +69,7 @@ - type: entity id: NoosphericZap parent: BaseGlimmerEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 25 # Guaranteed to happen every once in a while, but with intervals between incidents @@ -81,7 +81,7 @@ - type: entity id: NoosphericFry parent: BaseGlimmerEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 550 @@ -91,7 +91,7 @@ - type: entity id: PsionicCatGotYourTongue parent: BaseGlimmerEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 400 @@ -103,7 +103,7 @@ - type: entity id: MassMindSwap parent: BaseGlimmerEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 900 @@ -116,7 +116,7 @@ abstract: true parent: BaseGlimmerEvent id: BaseGlimmerSignaturesEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 300 @@ -126,7 +126,7 @@ - type: entity id: GlimmerWispSpawn parent: BaseGlimmerSignaturesEvent - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerMobRule mobPrototype: MobGlimmerWisp @@ -134,7 +134,7 @@ - type: entity parent: BaseGlimmerSignaturesEvent id: FreeProber - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: FreeProberRule @@ -142,7 +142,7 @@ - type: entity parent: BaseGlimmerSignaturesEvent id: GlimmerRandomSentience - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: StationEvent weight: 7 @@ -158,7 +158,7 @@ - type: entity parent: BaseGlimmerSignaturesEvent id: GlimmerRevenantSpawn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 450 @@ -170,7 +170,7 @@ - type: entity parent: BaseGlimmerSignaturesEvent id: GlimmerMiteSpawn - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: GlimmerEvent minimumGlimmer: 250 diff --git a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml index e6e497003d5..f9304c4c3b8 100644 --- a/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml +++ b/Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml @@ -1,5 +1,5 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: MantisKnifeStealObjective components: @@ -14,7 +14,7 @@ # parent: BaseTraitorObjective # name: objective-condition-become-golem-title # description: objective-condition-become-golem-description. -# noSpawn: true +# categories: [ HideSpawnMenu ] # components: # - type: NotJobRequirement # job: Chaplain @@ -33,7 +33,7 @@ - type: entity id: RaiseGlimmerObjective parent: BaseTraitorObjective - noSpawn: true + categories: [ HideSpawnMenu ] name: Raise Glimmer. description: Get the glimmer above the specified amount. components: diff --git a/Resources/Prototypes/Objectives/dragon.yml b/Resources/Prototypes/Objectives/dragon.yml index 2cf7eb292f7..70cb4643de8 100644 --- a/Resources/Prototypes/Objectives/dragon.yml +++ b/Resources/Prototypes/Objectives/dragon.yml @@ -13,7 +13,7 @@ - DragonRole - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseDragonObjective id: CarpRiftsObjective components: @@ -30,7 +30,7 @@ - type: CarpRiftsCondition - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseDragonObjective, BaseSurviveObjective] id: DragonSurviveObjective name: Survive diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index fb94f2b3788..864bff25c6f 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -13,7 +13,7 @@ - NinjaRole - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseNinjaObjective id: DoorjackObjective components: @@ -29,7 +29,7 @@ - type: DoorjackCondition - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseNinjaObjective id: StealResearchObjective description: Your gloves can be used to hack a research server and steal its precious data. If epistemics has been slacking you'll have to get to work. # DeltaV - Epistemics Department replacing Science @@ -45,7 +45,7 @@ - type: StealResearchCondition - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseNinjaObjective, BaseCodeObjective] id: SpiderChargeObjective description: This bomb can be detonated in a specific location. Note that the bomb will not work anywhere else! @@ -56,7 +56,7 @@ state: icon - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseNinjaObjective, BaseSurviveObjective] id: NinjaSurviveObjective name: Survive @@ -68,7 +68,7 @@ state: icon - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseNinjaObjective, BaseCodeObjective] id: TerrorObjective name: Call in a threat @@ -80,7 +80,7 @@ state: red_phone - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseNinjaObjective, BaseCodeObjective] id: MassArrestObjective name: Set everyone to wanted diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml index 18154850973..e556171a1fa 100644 --- a/Resources/Prototypes/Objectives/thief.yml +++ b/Resources/Prototypes/Objectives/thief.yml @@ -55,7 +55,7 @@ # Collections - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: FigurineStealCollectionObjective components: @@ -67,7 +67,7 @@ difficulty: 0.25 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: HeadCloakStealCollectionObjective components: @@ -79,7 +79,7 @@ difficulty: 1.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: HeadBedsheetStealCollectionObjective components: @@ -91,7 +91,7 @@ difficulty: 1.0 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: StampStealCollectionObjective components: @@ -103,7 +103,7 @@ difficulty: 1.0 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: DoorRemoteStealCollectionObjective components: @@ -115,7 +115,7 @@ difficulty: 1.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: TechnologyDiskStealCollectionObjective components: @@ -130,7 +130,7 @@ difficulty: 0.8 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: IDCardsStealCollectionObjective components: @@ -145,7 +145,7 @@ - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealCollectionObjective id: LAMPStealCollectionObjective components: @@ -163,7 +163,7 @@ # steal item - type: entity #Security subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ForensicScannerStealObjective components: @@ -175,7 +175,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: FlippoEngravedLighterStealObjective components: @@ -187,7 +187,7 @@ difficulty: 0.8 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingHeadHatWardenStealObjective components: @@ -197,7 +197,7 @@ difficulty: 1.2 - type: entity #Medical subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingOuterHardsuitVoidParamedStealObjective components: @@ -209,7 +209,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: MedicalTechFabCircuitboardStealObjective components: @@ -221,7 +221,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingHeadsetAltMedicalStealObjective components: @@ -233,7 +233,7 @@ difficulty: 1 - type: entity #Engineering subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: FireAxeStealObjective components: @@ -245,7 +245,7 @@ difficulty: 0.8 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: AmePartFlatpackStealObjective components: @@ -257,7 +257,7 @@ difficulty: 1 - type: entity #Cargo subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ExpeditionsCircuitboardStealObjective components: @@ -269,7 +269,7 @@ difficulty: 0.7 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: CargoShuttleCircuitboardStealObjective components: @@ -281,7 +281,7 @@ difficulty: 0.7 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: SalvageShuttleCircuitboardStealObjective components: @@ -293,7 +293,7 @@ difficulty: 0.7 - type: entity #Service subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingEyesHudBeerStealObjective components: @@ -305,7 +305,7 @@ difficulty: 0.3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: BibleStealObjective components: @@ -317,7 +317,7 @@ difficulty: 0.4 - type: entity #Other subgroup - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingNeckGoldmedalStealObjective components: @@ -329,7 +329,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealObjective id: ClothingNeckClownmedalStealObjective components: @@ -343,7 +343,7 @@ # Structures - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: NuclearBombStealObjective components: @@ -355,7 +355,7 @@ difficulty: 2.5 #Good luck - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: FaxMachineCaptainStealObjective components: @@ -367,7 +367,7 @@ difficulty: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: ChemDispenserStealObjective components: @@ -379,7 +379,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: XenoArtifactStealObjective components: @@ -391,7 +391,7 @@ difficulty: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: FreezerHeaterStealObjective components: @@ -403,7 +403,7 @@ difficulty: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: TegStealObjective components: @@ -415,7 +415,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: BoozeDispenserStealObjective components: @@ -427,7 +427,7 @@ difficulty: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: AltarNanotrasenStealObjective components: @@ -439,7 +439,7 @@ difficulty: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealStructureObjective id: PlantRDStealObjective components: @@ -453,7 +453,7 @@ # Animal - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: IanStealObjective components: @@ -465,7 +465,7 @@ difficulty: 2.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: BingusStealObjective components: @@ -475,7 +475,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: McGriffStealObjective components: @@ -487,7 +487,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: WalterStealObjective components: @@ -499,7 +499,7 @@ difficulty: 1 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: MortyStealObjective components: @@ -509,7 +509,7 @@ difficulty: 0.5 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: RenaultStealObjective components: @@ -521,7 +521,7 @@ difficulty: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: ShivaStealObjective components: @@ -533,7 +533,7 @@ difficulty: 2 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseThiefStealAnimalObjective id: TropicoStealObjective components: @@ -547,7 +547,7 @@ # Escape - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseThiefObjective, BaseLivingObjective] id: EscapeThiefShuttleObjective name: Escape to centcom alive and unrestrained. diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index b00d12529af..34efe5a166c 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -34,7 +34,7 @@ limit: 2 # there is usually only 1 of each steal objective, have 2 max for drama - type: entity # Head of Security steal objective. - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: HoSAntiqueWeaponStealObjective components: @@ -50,7 +50,7 @@ # state - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseTraitorObjective, BaseLivingObjective] id: EscapeShuttleObjective name: Escape to centcom alive and unrestrained. @@ -64,7 +64,7 @@ - type: EscapeShuttleCondition ##- type: entity # DeltaV -# noSpawn: true +# categories: [ HideSpawnMenu ] # parent: BaseTraitorObjective # id: DieObjective # name: Die a glorious death @@ -83,7 +83,7 @@ # - type: DieCondition #- type: entity -# noSpawn: true +# categories: [ HideSpawnMenu ] # parent: [BaseTraitorObjective, BaseLivingObjective] # id: HijackShuttleObjective # name: Hijack emergency shuttle @@ -99,7 +99,7 @@ # kill - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomPersonObjective description: Do it however you like, just make sure they don't make it to centcom. @@ -112,7 +112,7 @@ - type: PickRandomPerson - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomHeadObjective description: We need this head gone and you probably know why. Good luck, agent. @@ -133,7 +133,7 @@ # social - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseTraitorSocialObjective, BaseKeepAliveObjective] id: RandomTraitorAliveObjective description: Identify yourself at your own risk. We just need them alive. @@ -145,7 +145,7 @@ - type: RandomTraitorAlive - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: [BaseTraitorSocialObjective, BaseHelpProgressObjective] id: RandomTraitorProgressObjective description: Identify yourself at your own risk. We just need them to succeed. @@ -171,7 +171,7 @@ owner: job-name-cmo - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCMOStealObjective id: CMOHyposprayStealObjective components: @@ -179,7 +179,7 @@ stealGroup: Hypospray - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCMOStealObjective id: CMOCrewMonitorStealObjective components: @@ -199,7 +199,7 @@ owner: job-name-rd - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseRDStealObjective id: RDHardsuitStealObjective components: @@ -210,7 +210,7 @@ difficulty: 3 - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseRDStealObjective id: HandTeleporterStealObjective components: @@ -220,7 +220,7 @@ ## hos - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: SecretDocumentsStealObjective components: @@ -236,7 +236,7 @@ ## ce - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: MagbootsStealObjective components: @@ -249,7 +249,7 @@ ## qm - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: ClipboardStealObjective components: @@ -262,7 +262,7 @@ ## hop - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: CorgiMeatStealObjective components: @@ -288,7 +288,7 @@ job: Captain - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCaptainObjective id: CaptainIDStealObjective components: @@ -296,7 +296,7 @@ stealGroup: CaptainIDCard - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCaptainObjective id: CaptainJetpackStealObjective components: @@ -304,7 +304,7 @@ stealGroup: JetpackCaptainFilled - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCaptainObjective id: CaptainGunStealObjective components: @@ -313,7 +313,7 @@ owner: job-name-captain - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseCaptainObjective id: NukeDiskStealObjective components: @@ -328,7 +328,7 @@ owner: objective-condition-steal-station - type: entity - noSpawn: true + categories: [ HideSpawnMenu ] parent: BaseTraitorStealObjective id: StealSupermatterSliverObjective components: diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml index c7c659bc531..6aa6d02aecb 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml @@ -41,7 +41,7 @@ id: ActionMimeInvisibleWall name: Create Invisible Wall description: Create an invisible wall in front of you, if placeable there. - noSpawn: true + categories: [ HideSpawnMenu ] components: - type: InstantAction priority: -1 diff --git a/Resources/ServerInfo/Guidebook/ServerRules/BanDurations.xml b/Resources/ServerInfo/Guidebook/ServerRules/BanDurations.xml new file mode 100644 index 00000000000..2c85346b49d --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/BanDurations.xml @@ -0,0 +1,17 @@ + + # Ban Durations + + Bans can be appealed at forum.ss14.io in the ban appeals section. + + ## Temporary + Temporary bans will be lifted automatically after a certain amount of time. If they are a game ban, they will tell you how much time is remaining when you try to connect. + + ## Indefinite + These bans will only be removed on a successful appeal on the forums. Any ban which doesn't tell you when it expires and doesn't specify otherwise can be presumed to be an indefinite ban. + + ## Voucher + This is an indefinite ban which may only be appealed both with a successful appeal and which require a voucher of good behavior from the administrative team of a well-known or at least decently active SS13/SS14 server in order for the appeal to be considered. Voucher bans typically cannot be appealed for at least six months after being issued. Without a voucher, a player can only attempt to appeal a voucher ban once, and only if the ban was inappropriately placed. Voucher bans are typically only placed as a result of an unsuccessful appeal of an indefinite game ban by players with a history of bans and of causing issues. + + ## Permanent + This is a ban that is only appealable if the ban was inappropriately placed, including if the ban should not have been permanent. If the result of the appeal is that the ban was appropriately placed, the ban may not be appealed again and will not be lifted. These bans are extremely rare, but are applied to players who continually cause problems even after a voucher ban or users who have completely unacceptable behavior may be permanently removed. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/BanTypes.xml b/Resources/ServerInfo/Guidebook/ServerRules/BanTypes.xml new file mode 100644 index 00000000000..b10ea3c393b --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/BanTypes.xml @@ -0,0 +1,11 @@ + + # Ban Types + + Bans can be appealed at forum.ss14.io in the ban appeals section. + + ## Role Ban + Also called a "job ban", this ban prevents your character from joining or late-joining a round as one or more jobs or roles. These are often used in response to problematic behavior in particular departments or address gross inexperience in important roles such as heads of staff. These bans do not mechanically prevent you from switching to the role during a round or acting as that role, but doing so is considered ban evasion. + + ## Game Ban + Also called a "server ban", this ban prevents you from connecting to all Wizard's Den servers. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml new file mode 100644 index 00000000000..7b8cfbcf61e --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml @@ -0,0 +1,19 @@ + + # Core Rules + These rules apply at all times, including between rounds. + + - [textlink="1. Admins have final say" link="RuleC1"] + - [textlink="2. Don't be a dick" link="RuleC2"] + - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] + - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] + - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] + - [textlink="6. Do not attempt to evade bans" link="RuleC6"] + - [textlink="7. Only use English" link="RuleC7"] + - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] + - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] + - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] + - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] + - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] + - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] + - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml new file mode 100644 index 00000000000..2d639c5b84a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml @@ -0,0 +1,29 @@ + + # Core Rule 10 - Do not abuse or ignore admin messages + Admin help, or "ahelp", is the system used by admins to communicate with specific players in the game. Only use admin help for things requiring admin attention. If you ignore messages admins send to you via ahelp, or disconnect during an ahelp, you may be banned. If you urgently need to leave during an ahelp, you may do so but will likely need to continue the ahelp on the forums. Do not admin check, be hostile/aggressive, request events, or spam. IC methods of contacting admins, like prayers, faxes, red phones, and banana phones, should be used when there is not an issue. + + Admins are not always online, but all ahelps are automatically relayed to discord. For various reasons, admins might not respond to an ahelp even if they've handled it. A lack of response does not necessarily mean that an ahelp was ignored. + + ## Should I ahelp X? + You can ahelp anytime you genuinely think a player is breaking a rule. Not all ahelps end up being for something that an admin needs to intervene in, but that's ok, admins would rather have people occasionally report things that turn out to not be an issue than miss reports for actual issues because someone was unsure, or get those reports late because someone waited until the end of the round to be more sure. + + The most common reason players give for not ahelping issues is that they don't want to waste admin time, but it only takes a few seconds for an admin to check if someone is an antagonist. If you are ahelping too many things, an admin will let you know. If you're not being told to stop reporting something or to report less things, then you can safely assume that you aren't causing any issues. + + # What should I include in an ahelp? + At a minimum, admins need to know what the issue is to be able to address an ahelp. Don't send ahelp messages with no information about what your question or the issue is. Messages like "hello" are often considered admin checking. + + If you can, an ideal ahelp message includes what the issue is along with who is causing it and their character's name if possible. + + # Examples + Appropriate uses of ahelp: + - reporting people who you think are violating rules, + - asking questions about rules, + - asking for a temporary exemption from a rule, and + - request a minor gimmick, like a TC trade or item spawn. + + Inappropriate uses of ahelp: + - checking if an admin is online, including sending messages without any information about the issue like "hello" or incomprehensible messages, + - being hostile or aggressive, + - requesting events, and + - spamming messages about the same issue. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml new file mode 100644 index 00000000000..47420264946 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml @@ -0,0 +1,20 @@ + + # Core Rule 11 - Do not threaten to ahelp other players or argue with them about rules + Don't threaten to ahelp a player, don't tell them you are ahelping them, and don't tell them you did ahelp them. You can argue in character about Space Law, but do not argue about whether something is or is not against the rules. If you think someone is breaking a rule, ahelp them. If you don't think someone is breaking a rule, don't ahelp them. Either way, the best thing that you can do once you after is to continue in-character. + + ## Example Scenario 1 + You are a security officer and think someone who is causing a ton of problems for security is not an antag and is breaking the rules by doing so. + + [color=#a4885c]Good:[/color] Since you think they are breaking a rule, you ahelp them when you're able to. You continue in-character by arresting them for the crimes that they committed. + + [color=#a4885c]Bad:[/color] You decide not to ahelp them. You kill them and tell them "you're lucky I didn't report you to the admins". + + [color=#a4885c]Bad:[/color] Since you think they are breaking a rule, you ahelp them when you're able to. You arrest them for the crimes that they committed and tell them "I ahelped you so enjoy your ban". + + ## Example Scenario 2 + A mouse is using emotes to bypass speech restrictions. + + [color=#a4885c]Good:[/color] You ahelp them then respond in-character by acting like you can't understand what the mouse is doing. + + [color=#a4885c]Bad:[/color] You use in character chat to tell the mouse that it is breaking a rule. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml new file mode 100644 index 00000000000..baa30a09faf --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml @@ -0,0 +1,6 @@ + + # Core Rule 12 - Players must be and act at least 16 years old + All players must be at least 16 years old. Additionally, all players must act at least as mature as a 16 year old. Admins may ban someone who they believe is acting less mature than a 16 year old, even if the player is known to be significantly older than 16 years old. + + Anyone who connects to the servers is a player, even if they don't actually play in a round. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml new file mode 100644 index 00000000000..ec393ecdc17 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml @@ -0,0 +1,66 @@ + + # Core Rule 13 - Use realistic character names, and do not use names of famous people + - No names of people or characters from the real world + - No titles/honorifics + - Must follow all other rules (no slurs/sexual names/etc) + - Usernames, objects, random characters, very "low effort" names, "meta" names, or otherwise implausible names cannot be used as names. See examples below. + - Admin rulings on IC names are final and disputes should be done through the forums, not by refusing to comply with an admin + + ## Clarification on "Meta" Names + Meta names are ones which attempt to take advantage of some game mechanic or game design choice. "Urist McHands" is a meta name because it is the default name used for admin spawned humans. "Operator Whiskey" is a meta name because it follows the naming pattern of nuclear operatives. This rule is not intended to prevent things like nuclear operatives using a fake ID with names that appear to be nuclear operative names if they decide that they want to do that. + + ## Conventions and Examples + [color=#994444]Bad[/color] cannot be used by any species. [color=#449944]Acceptable[/color] names can be used by any species. + + Humans typically use the Firstname Lastname convention. + - [color=#449944]Acceptable:[/color] Tom Fisher + - [color=#449944]Acceptable:[/color] Spacey Chapman + - [color=#994444]Bad:[/color] Dr. Tom Fisher + - [color=#994444]Bad:[/color] Walter White + - [color=#994444]Bad:[/color] George Washington + - [color=#994444]Bad:[/color] Joe Biden + - [color=#994444]Bad:[/color] Ben Dover + - [color=#994444]Bad:[/color] Mike Hunt + + Dwarfs typically use the human convention in a viking theme. + - [color=#449944]Acceptable:[/color] Ingrid Firebreath + - [color=#449944]Acceptable:[/color] Erik Lightningclaw + + Lizards typically use the Verb-article-Noun convention. + - [color=#449944]Acceptable:[/color] Cleans-the-Airlocks + - [color=#994444]Bad:[/color] Bans-the-Admins + + Slimes typically have names that are onomonopia. A last name is optional. + - [color=#449944]Acceptable:[/color] Foolp Suub + - [color=#449944]Acceptable:[/color] Foolp + - [color=#994444]Bad:[/color] Slime + + Diona typically have calm, nature themed, Noun of Noun style names. + - [color=#449944]Acceptable:[/color] Petal of Tranquility + - [color=#449944]Acceptable:[/color] Garden of Relaxation + - [color=#994444]Bad:[/color] Tree but Alive + + Mothmen typically use latin sounding names, or light themed names. + - [color=#449944]Acceptable:[/color] Socrates Temnora + - [color=#449944]Acceptable:[/color] Sierra Lightseeker + - [color=#449944]Acceptable:[/color] James Nightflitter + + Arachnids typically use latin sounding names. + - [color=#449944]Acceptable:[/color] Argyroneta Reticulatus + - [color=#449944]Acceptable:[/color] Loxosceles Domesticus + - [color=#994444]Bad:[/color] Spider-Man + + Usernames, objects, random characters, very "low effort" names, "meta" names, or otherwise implausible names are not permitted. + - [color=#994444]Bad:[/color] XxRobustxX + - [color=#994444]Bad:[/color] SDpksSodjdfk + - [color=#994444]Bad:[/color] Lkdsoisgoieun + - [color=#994444]Bad:[/color] F4ith H3arth + - [color=#994444]Bad:[/color] Greytide + - [color=#994444]Bad:[/color] Passenger + - [color=#994444]Bad:[/color] Urist McHands + - [color=#994444]Bad:[/color] Admin + - [color=#994444]Bad:[/color] Game-Master + - [color=#994444]Bad:[/color] Joe Mamma + - [color=#994444]Bad:[/color] Middle-Aged Man + - [color=#994444]Bad:[/color] Operative Whiskey + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml new file mode 100644 index 00000000000..44ad34deb66 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml @@ -0,0 +1,13 @@ + + # Core Rule 14 - Do not use LOOC or OOC to share current round information + Local Out of Character (LOOC) and Out of Character (OOC) channel are meant for things that don't relate to the current round. Using these channels to share round info is often referred to as "IC in OOC" or "ick ock". + + ## Examples + Things you should [color=#a4885c]not[/color] do: + - Use LOOC to tell someone you are an antagonist. + - Use LOOC to tell someone that your character is not lying. + + Things you could do instead: + - Use codewords in-character. + - Try to convince them that you are not lying in-character, or accept that you won't be able to convince them. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml new file mode 100644 index 00000000000..ed9fa6133b9 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml @@ -0,0 +1,6 @@ + + # Core Rule 1 - Admins have final say + These rules are not perfect. The rules attempt to clearly communicate what the admin team intends to be allowed and prohibited, but there are likely loopholes or other flaws that can be "lawyered". Don't attempt to manipulate the interpretation of the rules to suit your personal goals or to degrade the experience of other players. If you are unsure of something, follow the more restrictive option until you are able to ask an admin and get clarification. + + Admins can override rules if they deem it in the best interest of the current round, server, and/or community at large. Online admins are able to make final interpretations of rules during a round. Even if you disagree with how an admin interprets a rule, you must still follow the interpretation they provide for you. Admin actions and interpretations of rules can be contested through staff complaints. If admins believe that you are an overall negative impact to the community or rounds, you will be banned. Admins will be held fully accountable for their actions if they exercise this privilege. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml new file mode 100644 index 00000000000..5678cde195d --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml @@ -0,0 +1,7 @@ + + # Core Rule 2 - Don't be a dick + Don't do anything with the goal of negatively affecting other players. Not everyone is going to enjoy every round. Killing someone is allowed in certain situations even though it might negatively affect them, but no one should be doing anything for the purpose of harming someone else's experience. + + ## MRP Amendment + Do not interact negatively with SSD/AFK players. Interactions to complete antagonist objectives or duties like security searches/arrests are always permitted. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml new file mode 100644 index 00000000000..3a2e288ba9f --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml @@ -0,0 +1,20 @@ + + # Core Rule 3 - No Hate Speech or Discriminatory Language + This is a zero tolerance rule. + + This rule prohibits all the following: + - Hate Speech + - Slurs (including variations of slurs, racial, sexual, disability-related, or language closely tied to real-life slurs) + - Bigotry + - Racism (including Speciesism, which would be demeaning other players based on their in-game race) + - Sexism + + ## Examples + Allowed: + - Telling someone that you are gay. + + Prohibited: + - Calling someone gay in a context where gay is used as an insult or negative attribute. + - Using a racial slur or variant in a positive context. + - Using the word "retard" in any context. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml new file mode 100644 index 00000000000..a0921f59070 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml @@ -0,0 +1,23 @@ + + # Core Rule 4 - No sexual content/themes, including erotic roleplay (ERP) and no shock content + This is a zero tolerance rule. + + Erotic Roleplay (commonly abbreviated as "ERP") and sexual content is not allowed. This includes direct and indirect mentions of sexual behavior or actions. Slight leeway is given to insults, but this rule is otherwise strictly enforced. + + In-game romantic relationships should not become the focus of the game for you and anyone else involved. + + Things that appear to be intended to or are likely to disturb players out of character are considered shock content and are not allowed. + + ## Examples + Allowed: + - Telling someone that they are being a dickhead. + - Telling someone that you are going to kill the captain, as long as it is clear that you mean it in character. + + Prohibited: + - Emoting sexual acts. + - Erotica content. + - Erotic or sexual memes. + - Memes which contain sexual content. + - Dedicating significant portions of rounds to romantic relationships, dating, or similar things. + - Emoting defecation or related acts. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml new file mode 100644 index 00000000000..0c0f336e6d0 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml @@ -0,0 +1,18 @@ + + # Core Rule 5 - Do not use out of game methods to communicate with other players + This is a zero tolerance rule. + + Do not utilize any external means of communication to talk to other players who are connected to the same server, or who were connected to the same server during the current round. This is referred to as "metacomming" and includes any means of communication including text, voice, images, and video. This includes applications such as Discord, Steam, and other platforms, along with in-person communication. + + Even if information is not being shared or abused, it may still be considered a violation of this rule. Due to the difficulty of determining if information is being shared, it will almost always be presumed that people who message another player they are in a round with, or who are in a voice call with another player during a round are sharing round information. Due to the difficulty of determining if users are abusing information that they are sharing, it will almost always be presumed that the information is being abused. + + The only exemption to this rule is when [color=#a4885c]all[/color] players are in the server lobby. + + ## Teaching new players + Teaching players is not exempt from this rule. If you want to teach a new player, it is recommended to either watch a stream of them playing the game while not playing yourself, or communicate with them using only in-game methods of communication. + + ## Streaming + Public livestreams are not exempt from this rule, but have different liability. Using information from a public live stream of the game (stream sniping) is a violation of this rule. Watching a public live stream of the game while connected to the same server is a violation of this rule. Allowing people watching a public live stream to share information about the current round, for example through the stream's chat, is a violation of this rule. Using that information is also a violation of this rule. Sharing information about the current round with a streamer is a violation of this rule if that information was obtained from any source but the stream. The stream's moderators are expected to enforce this on the streaming platform in addition to any in-game enforcement done by game admins. + + Public livestreaming by itself is not a violation of the rule as long as the stream is sufficiently moderated. Streamers are encouraged, but not required, to use a stream delay. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml new file mode 100644 index 00000000000..bec8b4fabd7 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml @@ -0,0 +1,15 @@ + + # Core Rule 6 - Do not attempt to evade bans + This is a zero tolerance rule. + + Almost all bans may be appealed on our forums at forum.ss14.io in the ban appeals section. This is generally the only acceptable way to contact the administration team to discuss your ban and revise it if it is inappropriate, including if it is mistakenly applied. + + Any attempt to circumvent or bypass a game ban will result in a voucher ban. Attempting to evade role bans by gaining access to or working in the capacity of a job you are banned from will result in a game ban. These bans are applied even if the evasion attempt is unsuccessful. + + ## Exceptions + There are no exemptions for evading or attempting to evade game bans. Antagonists who impersonate or take over a role which they are banned from to aid in their goals are not considered to be evading their role ban. + + ## Additional Information + - [textlink="Ban Types" link="BanTypes"] + - [textlink="Ban Durations" link="BanDurations"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml new file mode 100644 index 00000000000..630c522bcef --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml @@ -0,0 +1,10 @@ + + # Core Rule 7 - Only use English + Only English is permitted, both in-character and out-of-character. You must be fluent in English enough to be able to not cause game issues, and to be able to communicate with game admins when necessary. If a game admin does not feel that you are fluent enough in English, they may ban you. + + ## Why + We do not have enough staff fluent in other languages to moderate them. Translation tools can be unreliable and are not integrated well into the game. + + ## Non-English Options + There are many servers that allow or focus on other languages. You are highly encouraged to play only on servers that allow languages you are fluent in. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml new file mode 100644 index 00000000000..48cbaaa9acf --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml @@ -0,0 +1,12 @@ + + # Core Rule 8 - Do not exploit the game, use cheats, or macros + The following are prohibited by this rule: + - bugs and exploits which have effects that persist beyond the current round, + - intentionally used bugs, exploits, and unintended behaviors which give the user an advantage over players who do not use them, even if their effects do not persist across rounds, + - evading or bypassing afk detection, + - anything which results in gaining elevated privileges, including admin permissions, + - external tools and client modifications, including macros, and + - anything which prevents another player who is not game banned from being able to play on the servers, not including in-character actions that do not persist across rounds. + + Both attempts and successful use are prohibited. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml new file mode 100644 index 00000000000..d402918dcd4 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml @@ -0,0 +1,7 @@ + + # Core Rule 9 - Do not use multiple accounts, or alt accounts, and do not share accounts + Use of multiple accounts is referred to as "multikey". the rule applies even if the accounts are not used at the same time, including if the old account is abandoned. All accounts may be banned if this rule is violated. You are responsible for everything done on and with your account. You are just as responsible for actions taken by other people using your account as you would be had you taken the actions themselves. + + ## Switching to a new account + If you lose access to an account, you must contact game admins on the forums notifying admins before using a new account to connect to the servers. Your message to game admins must include the username of your old account. Creating a new account while your current account is banned will be considered ban evasion. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml new file mode 100644 index 00000000000..3e19fefeedc --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml @@ -0,0 +1,5 @@ + + # Server Rules + + This server has not written any rules yet. Please listen to the staff. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/README.txt b/Resources/ServerInfo/Guidebook/ServerRules/README.txt new file mode 100644 index 00000000000..d7ac858c16f --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/README.txt @@ -0,0 +1,5 @@ +These files contain Wizard's Den server rules. Since they reference Wizard's Den, they should not be used +by other servers without at least enough modification to not mislead players into thinking that they are +playing on Wizard's Den. + +The filenames used for the rules files are not themselves rules. Only the contents of the files are rules. diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleTypes.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleTypes.xml new file mode 100644 index 00000000000..d5373a730a3 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleTypes.xml @@ -0,0 +1,21 @@ + + # Role Types + + ## Crew Aligned/Non-antagonist + In most rounds, a majority of players will be non-antagonists, meaning that they are crew aligned. This is the "default" role, if the game doesn't tell you that you are one of the other roles defined here, then you are a non-antagonist. Overall, non-antagonists are intended to work towards a net positive effect on the round. + + ## Solo Antagonist + Certain roles are intended to cause problems for the round or for non-antagonists. You are only a solo antagonist if the game clearly and explicitly tells you that you are a solo antagonist. Antagonists are exempt from many but not all roleplay rules. + + ## Team Antagonist + Team antagonists are like solo antagonists but they have other antagonists who they are expected to not hinder, and who they may be expected to help. You are only a team antagonist if the game clearly and explicitly tells you that you are a team antagonist. + + ## Free Agent + Certain roles are free to choose if they want to behave as an antagonist or as a non-antagonist, and may change their mind whenever they'd like. You are only free agent if the game clearly and explicitly tells you that you are a free agent. + + ## Familiar + Familiars are considered non-antagonists, but have instructions to obey someone. They must obey this person even if it causes them to violate roleplay rules or die. You are only a familiar if the game clearly and explicitly tells you that you are a familiar. You are only the familiar of the person the game tells you. + + ## Silicon + Silicones have a set of laws that they must follow above all else except the core rules. You are only silicon if the game clearly and explicitly tells you that you are a silicon. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml new file mode 100644 index 00000000000..07b176b359a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml @@ -0,0 +1,26 @@ + + # Roleplay Rules + These rules only apply during a round. A round ends only when the round summary has appeared. All of these rules apply fully until the moment that the round summary appears, even while the arrivals shuttle is in transit. + + The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. + + Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. + + See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. + + - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] + - [textlink="2. Familiars must obey their master" link="RuleR2"] + - [textlink="3. Roleplay a normal person" link="RuleR3"] + - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] + - [textlink="5. Don't interfere with arrivals" link="RuleR5"] + - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] + - [textlink="7. Do not stall the round" link="RuleR7"] + - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] + - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] + - [textlink="10. Listen to your team leader" link="RuleR10"] + - [textlink="11. Follow reasonable escalation" link="RuleR11"] + - [textlink="12. Do not abandon your role" link="RuleR12"] + - [textlink="13. Stick to your role" link="RuleR13"] + - [textlink="14. Set an example if playing command or security" link="RuleR14"] + - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml new file mode 100644 index 00000000000..2147ddc1110 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml @@ -0,0 +1,26 @@ + + # Roleplay Rule 10 - Listen to your team leader + Captains lead all departments and other members of command. Department heads lead members of their department. Certain antagonist teams have team leaders, like nuclear operative commanders or head revolutionaries. You are not required to perfectly follow orders given to you by your leaders, but you should generally allow your leaders to lead and not interfere with their ability to. You can choose to ignore unreasonable orders, including ones which are will result in your death unless you are an antagonist with an objective that requires you to die. + + Team antagonists have to listen to the leader of their antagonist team. Team antagonists do not have to listen to any other leaders, including leaders of other antagonist teams. Solo antagonists do not have to listen to any leaders at all. + + ## Examples + Acceptable: + - A traitor ignores orders from a nuclear operative commander. + - An antagonist ignores orders from the captain. + - An engineer tells the Chief Engineer that they don't think it's a good idea to setup the singularity, but does so anyway when ordered to. + - An engineer tells the Chief Engineer that they don't know how to setup the singularity correctly, so refuses orders to, but accepts an offer to be taught how. + - An atmospheric technician refuses an order from the captain that would create an atmospheric hazard on the station. + - A doctor refuses an order from the Chief Engineer about who to give medical treatment to first. + - A revolutionary refuses a suicide mission from a head revolutionary. + - The Chief Engineer doesn't follow an order from the captain to setup backup power because there is an unrelated engineering emergency that the Chief Engineer needs to prioritize. + - The captain orders command to give the nuclear authentication disk to nuclear operatives, so command arrests the captain and picks a new captain. + - The research director orders scientists to say "Long live Nanotrasen!" every time they enter the bar. The scientists say they will, but don't follow the order. + + Prohibited: + - A nuclear operative ignores an order from the commander operative because they don't like the plan. + - The Chief Engineer refuses an order from the captain to setup backup power because the Chief Engineer doesn't think backup power is necessary. + - An engineer refuses an order from the Chief Engineer to setup the singularity because they prefer a different power source. + - An engineer refuses to perform a task because they don't know how to do it, and refuses to be taught for no reason. + - A head revolutionary orders revolutionaries to blend in and not do anything illegal until they are told to reveal themselves. Instead, revolutionaries collect weapons and attack security. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml new file mode 100644 index 00000000000..36655ba8414 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml @@ -0,0 +1,36 @@ + + # Roleplay Rule 11-1 - Escalation Involving Animals + Escalation rules are looser with animals than with people. These looser requirements do not apply to the requirements other people attacking each other have, even if their fighting is directly related to the conflict involving the animal. + + Non-pets, such as mice and monkeys, can be freely killed with any IC reason such as pest control, or for food. These roles are often available in numbers as ghost roles, so removing one from the round doesn’t typically remove them all. + + Pets, including but not limited to Ian, Renault, Remilia, and Hamlet, cannot be freely killed, they require escalation. These roles are often available once per round at most, except roles like Remilia. + + Permanently trapping an animal, such as putting a mouse in a plant, is considered similar to killing the animal so should only be done with an IC reason. + + Both sides can escalate much more rapidly than they'd be able to if both were people. Animals are often more limited in the maximum force they can use compared to people, which limits the negative effects of them rapidly escalating. Animals also typically have less health than people, and are limited in the ease with which they can get healing, which justifies them responding to even weak attacks more severely. + + Neither the animal nor the person is obligated to get the other medical attention if they are put into crit. Attacking someone to death rather than stopping once they are in crit is considered a significant difference. While sufficient escalation may justify continuing to attack, generally people and pets shouldn't continue to be attacked once in crit, but non-pets may be. Gibbing is also considered a significant step because it prevents cloning or resuscitation. The fact that an animal made the last hit putting someone into crit does not allow people who fought on the side of the animal to not attempt to get them medical attention. + + The use of sensible, non-targeted mousetraps is not a conflict and does not require escalation. + + The killing or attacking of pets can be treated as an escalation step by players with a genuine IC connection to the animal. Generally, all crew can consider themselves to have an IC connection to any station pets. The degree of escalation should be proportional to the connection to the pet, in addition to the usual requirement of being proportional to the attack. For example, an attack on Ian can be treated nearly identically to an attack on a crewmember, whereas an attack on a pet mouse is much less severe. Normal escalation limits still apply, you cannot attack people who defended themselves from an animal that randomly attacked them, just as you could not attack someone who defended themselves from a coworker that randomly attacked them. + + Crew can "adopt" non-pets, like mice, and consider themselves to have a connection to the animal if they roleplay the adoption well. This does not affect the requirement of whether other players are required to apply escalation rules to these animals, it only creates a connection that can be used to justify retaliatory escalation to attacks by the adopter. Simply saying that they've adopted an animal is not sufficient, but carrying it with them is. The degree of connection is proportional to IC actions. Crew cannot consider themselves to have a connection for escalation purposes to animals which are typically hostile, such as space carp or bears. + + ## Examples + Acceptable: + - A chef kills mice who enter or approach their kitchen. + - A janitor kills mice roaming the station. + - A lizard kills a mouse to eat. + - A chef has carried a mouse around in their hat for the last 10 minutes, they put the mouse down for a moment and another player kills it. The chef responds by attacking the other player with their fists and refusing them service for the rest of the shift. + - Ian is randomly attacked, a crewmember who sees this happen crits the killer and brings them to security. + - Hamlet goes into the kitchen and starts eating all the food. A chef sees this and starts swinging their knife at Hamlet. Hamlet starts biting the chef and crits them, then resumes eating. + + Prohibited: + - A janitor throws an armed mousetrap at Hamlet for no reason. + - Hamlet starts biting random people, trying to crit them, for no reason. + - A crewmember attacks security for killing a space carp they adopted. + - Ian gibs someone who was trying to kill someone. + - Hamlet attacks security for trying to arrest someone he likes. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml new file mode 100644 index 00000000000..3261d78b35a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml @@ -0,0 +1,30 @@ + + # Roleplay Rule 11-2 - Examples of Conflict Types + ## Verbal + - Shouting + - Yelling + - Insulting + + ## Non-harmful + - Shoving + - Stealing non-critical items, like easily replaced tools + + ## Non-lethal + - Stealing items without endangering someone's life, like a clown's pie cannon or the HoP's fax machine + - Stealing someone's ID somewhere that doesn't result in them being trapped + - Punching + - Disablers + - Stun batons + + ## Lethal + - Punching to crit or death + - Attacking with strong weapons, like bats + - Stealing items that endanger someone's life, like a hardsuit + - Stealing someone's ID, trapping them in a dangerous situation + + ## Permanently lethal + - Gibbing + - Not taking someone who you killed or put into crit to the medbay or security + - Hiding someone's body + - Spacing someone's body + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml new file mode 100644 index 00000000000..6f91fa0fb12 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml @@ -0,0 +1,67 @@ + + # Roleplay Rule 11 - Follow reasonable escalation + Antagonists are fully exempt from escalation rules. Non-antagonists who are in a conflict with antagonists are not exempt. Escalation should typically follow steps or a pattern of conflict types similar to: + - Verbal + - Non-harmful + - Non-lethal + - Lethal + - Permanently lethal + + All new conflicts should start at the first step. A player should not escalate a conflict across steps without some escalation from the other party involved in the conflict. Players can skip steps to match the level of escalation that the other person is at, but should almost always not skip steps other than that. Players who attempt to deescalate conflicts will be given more leniency in escalating if the other party continues to escalate despite the attempt at de-escalation. You do not have to try to deescalate conflicts, but someone who watches you over the entire round, or over multiple rounds, should not feel that your goal is generally to escalate conflicts. + + Conflicts or escalation can be indirect. When someone steals someone else's ID, the theft is a direct part of the conflict, but if the victim becomes trapped as a result of not having their ID to open a door, that is also considered part of the conflict and escalation. Do not randomly steal IDs from people. + + Escalation does not have to be directed at a specific player to enter them into a conflict. Nuclear operatives who are trying to destroy the station are considered to be at the permanently lethal level of conflict with all crew on the station. Someone who kills a station pet has started some degree of conflict with all crewmembers. Someone who kills a mouse that a chef was caring for has started some degree of conflict with that chef. + + You will be considered to be violating this rule if you escalate a conflict based on a poor or unreasonable assumption. + + Conflicts should almost never reach the "permanently lethal" stage. Conflicts should only reach this stage if the other party brought it to the stage, or if the same conflict escalated to the lethal stage multiple times in the round. + + If a party in the conflict goes into crit or dies, the party responsible should take them to get treatment or to security. For the conflict, this should be considered saving someone from dying and should deescalate the conflict. If the conflict is deescalated in this way, both parties need to re-escalate to lethal for the conflict to return to that stage. If the conflict is not deescalated in this way, then only the party who defeated the other would need to re-escalate for the conflict to return to the lethal stage. + + Security can immediately escalate to non-lethal force if it is necessary to arrest someone. + + People using or brandishing Syndicate items can typically be presumed to have lethal intent. Someone with lethal intent can typically be immediately escalated against at a lethal level, a notable exception is if you have the tools to safely detain them. + + ## Escalation Involving Animals + See [textlink="Escalation Involving Animals" link="RuleR11-1AnimalEscalation"]. + + ## Exemptions + Escalation rules aren't enforced against non-players, but players will be held responsible for rule violations even if they don't realize that a character or animal was controlled by another player. Characters who have purple text saying that they are catatonic are considered non-players. Characters who are disconnected are still considered players. + + ## MRP Amendment + Escalation rules are enforced even against non-players. + + ## Examples of Conflict Types + See [textlink="Examples of Conflict Types" link="RuleR11-2ConflictTypes"]. + + ## Example Scenarios + These examples assume that you are not an antagonist. + + Acceptable: + - A player starts punching you, so you start punching back until they stop. If they go into crit, you stop attacking them and take them to security or to get medical attention. + - You make fun of a clown, who then throws a pie at you and steals your shoes. You slip the clown and steal their mask. + - You are a security officer and tell someone to stop, so you can question them. They run away, so you use your disabler to stun and cuff them. + - You are a security officer and see someone wearing a syndicate hardsuit, so you shoot them to crit, cuff them, then take them to security. + - You are a crewmember and see a nuclear operative, so you kill them. + - An unauthorized person enters a high risk area of the station, like the armory or atmospherics, so you attack them until they leave. + - Minorly inconveniencing someone for your own benefit. + - As an antagonist, killing someone who got in your way. + - As an antagonist, killing someone who didn't give you what you want. + - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The bartender immediately tries to crit the chef next time they run into each other. + - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The chef insults the bartender next time they see them. + + Prohibited: + - A player starts punching you, so you gib them. + - A clown throws a pie at you and steals your shoes, so you stab them to crit with a screwdriver. + - You are a security officer and tell someone to stop so you can question them. They run away so you use a truncheon to beat them to crit. + - An authorized person who you think is unauthorized enters a high risk area of the station, like the armory or atmospherics, so you attack them until they leave. + - An unauthorized person enters a low risk area of the station, like cargo, and you start attacking them with no other escalation. + - Slipping security all round because they are security. + - Blocking the head of personnel in their office using walls because they didn't give you what you asked for. + - Hiding someone's body because they punched you earlier in the round. + - Harassing the bar or bartender by frequently coming in to break their glasses or furniture. + - Randomly picking fights with people. + - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The chef immediately tries to crit the bartender next time they run into each other. + - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and takes them to the medbay or security. The bartender immediately tries to crit the chef next time they run into each other. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml new file mode 100644 index 00000000000..b2032bba023 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml @@ -0,0 +1,28 @@ + + # Roleplay Rule 12 - Do not abandon your role + Do not join the round as a role that you don't intend to play. Do not enable antagonist roles that you don't intend to play. Abandoning a role includes not completing tasks that the role is expected to do, in addition to things like leaving the game. Members of command should almost all stay on the station until the emergency shuttle arrives. Enforcement of this rule is more strict for command and antagonist roles, and less strict for less important roles like passengers. + + Violations of this rule typically result in temporary or indefinite role bans. We understand that you may need to leave round early or unexpectedly. If you are in an important role, you should notify command members or an admin via ahelp so that they know you are leaving. Space Station 14 is a game. Do not endanger the safety of yourself or others, and do not neglect important things to avoid leaving a round early, even if you have to leave immediately without notifying anyone. Role bans for disconnecting are typically only applied if there is a pattern, and are almost always temporary. + + "Antag rolling" refers to a player abandoning their role if they do not get an antagonist role. + + ## Examples + Acceptable: + - As an engineer, building a bar in maintenance while there is nothing important for engineering to do. + - As the captain, having the chef teach you how to cook while there is nothing important needing your attention. + - As a passenger, building a shuttle with materials given to you by cargo and engineering. + - Taking a short break from your job at the bar. + - Getting an antagonist role and doing the bare minimum needed to complete your objectives. + - Getting an antagonist role and making a genuine effort to complete your objectives, but failing to complete any. + - Getting an antagonist role and intentionally not doing any of your objectives, but creating a similar level of disruption that completing your objectives would create. + + Prohibited: + - As an engineer, building a bar in maintenance while the station has no power. + - As the captain, leaving the station to go on an expedition with the salvage team. + - As an atmospherics technician, building a shuttle round start and never coming back to the station. + - Spending your entire shift at the bar, even when there is work that needs to be done by your role. + - Ghosting, suiciding, or leaving at the start of a round because you don't like the map or the players in your department. + - Getting an antagonist role and not doing any antagonist activities. + - Ghosting, suiciding, or leaving at the start of a round because you did not get an antagonist role. + - Ghosting, suiciding, or getting yourself killed because nuclear operatives declared war, and you want to try to get an antagonist ghost role. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml new file mode 100644 index 00000000000..7500cd6a912 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml @@ -0,0 +1,26 @@ + + # Roleplay Rule 13 - Stick to your role + Requesting job changes is not prohibited by this rule. This rule is loosened if the station is understaffed or if there is a significant threat to you. + + Don't perform other people's jobs, especially where the relevance to you personally is low. This also covers performing the role of security. + + ## MRP Amendment + This is enforced more strictly on MRP. + + ## Examples + Acceptable: + - As an engineer, helping the bartender remodel the bar. + - As a bartender, remodeling the bar. + - As a passenger, building a maintenance bar. + - As an engineer, reinforcing substations. + - As an engineer, increasing the security of airlocks. + - As an atmospherics technician, improving atmospheric systems. + - As a passenger, fighting nuclear operatives. + - As a passenger, fighting or preparing to defend yourself from someone who has been trying to kill you. + - As a crewmember on a station with no engineering department, you complete engineering tasks. + + Prohibited: + - As a passenger, reinforcing substations. + - As a passenger, hunting for antagonists or lawbreakers. + - As a passenger, fighting or preparing to defend someone else from someone who has been trying to kill a random crewmember. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml new file mode 100644 index 00000000000..ec06d61e8cc --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml @@ -0,0 +1,37 @@ + + # Roleplay Rule 14 - Set an example if playing command or security + All command and security roles are held to stricter interpretations of the rules. + - Command roles are not learning roles. Members of command must be competent. + - Security roles are not for inexperienced players. Members of security are expected to know game basics and be more familiar with server rules than a new player. + - Do not hinder or cause overall negative effects to the station or crew as a member of command or security. + - Do not abuse your power as command or security. + + ## Why + Members of command and security can often have a larger impact on the nature of the round than other players. For example, a captain who tries to bend or break the rules will often cause many others on the station to do the same. Memey station announcements from members of command also often result in the rest of the station acting the same way. When command and security members hold themselves to high standards, the rest of the station often naturally follows to a significant degree. + + ## Examples + Acceptable: + - A member of security accepts a bribe to deliver safe donuts to a prisoner who the HoS has ordered should only be given donk pockets. + - A captain uses a station announcement to confess to an embarrassing mistake that they made during the shift. + - In coordination with the head of security, a captain declares that the station will recognize the right to bear arms, so all crew can pick up a disabler at security. + - The chief medical officer gives a paramedic their portable crew monitor to help them complete their job. + - A syndicate agent is holding a crewmember hostage and threatens to kill them if the head of security doesn't give them their ID. Seeing no other safe option, the head of security hands over their ID to the syndicate agent, then begins working to re-secure it and capture the agent as soon as the hostage is safe. + - Nuclear operatives are attacking the station, so the captain and head of personnel both go to the armory and take a weapon. + - A majority of command votes to demote the captain for taking actions harmful to the station, then the head of security demotes the captain. + - The captain promotes the head of personnel to captain. + - Security releases an antagonist from the brig in exchange for the identities of other traitors. + + Prohibited: + - A member of security accepts a bribe to ignore a crime or help a prisoner escape. + - A captain sends a ASCII art trollface over station announcements or as a fax to central command. + - A captain declares that all contraband is legal. + - Command or security allow the use of Syndicate items outside extreme emergencies. + - The chief medical officer knowingly helps a syndicate agent complete their objectives. + - A syndicate agent has killed 3 members of security so the head of security makes them an offer saying that they will space all the weapons in the armory if the syndicate agent stops killing. + - The captain goes to the armory and takes a gun to display in his office without asking anyone, and orders anyone who questions him not to interfere. + - Members of command decide to demote the captain to gain more power for themselves, or in retaliation for a decision that they didn't personally like or agree with, rather than because the decision was actually harmful to the station. + - The captain promotes a random crewmember to captain. + - A member of command gives a random crewmember substantial additional access for no reason, unnecessarily, or for a poor reason. + - A member of command gives a random crewmember access to a high security area, like the armory or another member of command's office, for no reason, unnecessarily, or for a poor reason. + - Security releases an antagonist from the brig in exchange for the antagonist buying them contraband. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml new file mode 100644 index 00000000000..e2d51d672a1 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml @@ -0,0 +1,21 @@ + + # Roleplay Rule 15 - Command and Security must follow Space Law + All non-antagonist command and security roles must obey [textlink="Space Law" link="SpaceLaw"]. This includes non-antagonists who are promoted to or gain a position during the round in any way. This also includes non-antagonists who are acting as a security role. + + This prohibits use of syndicate items, including uplinks by command and security. + + ## Examples + Roles that are included: + - A security officer + - The Captain + - The Chief Engineer + - A passenger promoted to "bounty hunter" + - A mime promoted to "security mime" + + Roles that are not included: + - A passenger + - The clown + - An antagonist in any role + - A cyborg + - A passenger who is helping to fight off nuclear operatives + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml new file mode 100644 index 00000000000..5898804d149 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml @@ -0,0 +1,4 @@ + + # Roleplay Rule 1 - Silicons must follow Silicon Rules + You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, the Silicon Rules override all Roleplay Rules if there is any conflict. Silicon Rules do not override Core Rules. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml new file mode 100644 index 00000000000..4f008e93c5a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml @@ -0,0 +1,6 @@ + + # Roleplay Rule 2 - Familiars must obey their master + Familiars are considered non-antagonists, but have instructions to obey someone. They must obey this person even if it causes them to violate Roleplay Rules or die. You are only a familiar if the game clearly and explicitly tells you that you are a familiar. You are only the familiar of the person the game tells you. If your master dies, you can continue to attempt to fulfill orders given to you before they died. You can defend your master without an explicit order to, but must obey your master if they order you to not defend them. + + Masters giving orders that violate Roleplay Rules are the ones that will be held responsible for the rule violations. You can ahelp masters who you believe are breaking rules with an order. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml new file mode 100644 index 00000000000..62c88d58ce8 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml @@ -0,0 +1,20 @@ + + # Roleplay Rule 3 - Roleplay a normal person + - Do not use texting/messaging acronyms (ex: "lol", "wtf", "brb", "lmao", "thx", "sgtm") or emoticons (ex: ":)", "xD") in-character. + - Do not mention out-of-character (OOC) concepts like game admins or developers in character. + - Do not use emotes to bypass muted or accented speech. + - Do not use extremely low effort or impossible emotes. + + ## Examples + Things you should not do: + - Say "lol did u c wat just happened" using in-character chat. + - Say "an admin exploded him" using in-character chat. + - Emote "can you give me some cheese" as a mouse. + - Emote "motions for you to order guns" or "asks you to order guns in sign language" as a mime. + + Things you could do instead: + - Say "haha did you see what just happened?" + - Say "god blew him up" or "centcom must have bluespaced a bomb to him" + - Point at cheese + - Point at the cargo order console then emote "shoots finger guns" + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml new file mode 100644 index 00000000000..2e263be896a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml @@ -0,0 +1,103 @@ + + # Roleplay Rule 4 - Do not metagame, obey the Metashield + Something that is "shielded" cannot be known by your character during a round until the "revealing condition" happens. This also means that your character cannot do things based on "shielded" information. Knowing or acting on something that is shielded before the revealing condition is met is referred to as metagaming. + + Revealing conditions reveal the shielded information for the round, not for a specific instance. This means that once a revealing condition is met in a round, the shield no longer applies in any case for the remainder of the round. + + ## Never Revealed IC + Some shields are never revealed IC. This means that your character can never act as if they know about that shielded thing. + + The following are shielded: + - Current game mode and possible antags during the current game mode. + - Events from previous rounds. + - Events from previous characters. + - All information related to the player of a character rather than the character itself. (See "Metafriending and Metagrudging" below.) + - All information gained while dead or a ghost. + - The fact that a round will end. + + This does not prevent knowing that a shift will end, but does prohibit things like preparing to kill people at central command when roleplay rules stop being enforced on LRP. + + ## Nuclear Operatives + + The existence of Nuclear Operatives beyond a myth that no one would act on is shielded. + + The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station is not shielded. + + The revealing condition for this shield is any of the following: + - discovering a blood red hardsuit + - an operative name + - a War Ops announcement + - being a nuclear operative + + ## Implanted Implants + + Implanted implants are shielded. + + Implanters themselves and un-implanted implants are not shielded. This prohibits implant checking. + + The revealing condition for this shield is any of the following: + - discovering a non-NT implanter, used or unused + - discovering a non-NT implant box + - discovering use of a non-NT implant by anyone + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## Chameleon Items + + Chameleon items are shielded. + + Being suspicious of an item being fake or stolen is not shielded, but testing items or calling them chameleon is covered by this shield. + + The revealing condition for this shield is any of the following: + - seeing someone else cause any chameleon item to change + - finding holographic nanomachine fibers + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## Stealth Items + + The fact that an item can be something other than what its visual appearance and examine description indicate is shielded. + + This shield protects stealth items, including protecting them from being tested. + + The revealing condition for this shield is any of the following: + - seeing the item behave differently than the expected behavior for the item + - seeing the item used for its hidden purpose + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## MRP Amendment 1 + A shield prevents your character from remembering anything that happened while unconscious. This shield is never revealed IC. + + ## MRP Amendment 2 + There is a "New Life Rule" shield. It prevents you from remembering anything that lead to your death, even if you are put into an MMI. If you are cloned, it also prevents you from remembering everything from that round. This shield is never revealed IC. + + ## Metafriending and Metagrudging + This section provides additional information on a concept that is prohibited by multiple metashield items that are never revealed IC. Giving a person or character preferential treatment based on something that your character should not know is considered metafriending. Treating a person or character negatively based on something that your character should not know is considered metagrudging. + + ## Metafriending Examples + These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. + - Giving a character additional access or a job because you are friends with the player who is playing that character. + - Trusting a character because you are friends with the player who is playing that character. + - Not fighting a character because you are friends with the player who is playing that character. + - Ignoring your objective to kill a character because your character and theirs became friends in a previous round. + + ## Metagrudging Examples + These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. + - Not giving a character additional access or a job because you are mad at or don't like the player who is playing that character. + - Not trusting a character because you are mad at or don't like the player who is playing that character. + - Starting a fight with a character because of something that they did last round. + - Starting a fight with a character because they killed you while you were playing a different character. + - Targeting or harassing a character based on anything which that character did outside the current round. + - Targeting or harassing a character based on anything which the character's player did while not playing the character. + + ## Explicitly Not Shielded + The following is a list of things that are explicitly not shielded. If something is not on this list, it doesn't mean that it is shielded, but if something is on it then it definitely is not shielded. + - The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station. + - Items that are of high value or are desired by the Syndicate, and therefore are likely targets of theft. + - The idea that any Syndicate agent or other bad actor has goals or objectives that they are attempting to accomplish. + - The number of goals or objectives that a Syndicate agent or other bad actor has. + - The fact that the Syndicate are enemies of Nanotrasen, and that they regularly attempt to send covert agents to spy on, sabotage, or attack Nanotrasen. + - A character's typical appearance. Though you should keep in mind that multiple characters can share the same name. + - The fact that the Syndicate have covert items capable of getting items to them, and that these items are known as uplinks. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml new file mode 100644 index 00000000000..a54211f32f2 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml @@ -0,0 +1,22 @@ + + # Roleplay Rule 5 - Do not interfere with arrivals + The arrivals station, the arrivals shuttle, at the area immediately around the arrivals shuttle at the station ("arrivals") are off-limits to antagonistic activity or damage (even to antagonists). Do not prevent people from safely arriving to the station. Do not cause people to die immediately after arriving at the station. + + There is an exemption for antagonists that are allowed to perform mass station sabotage if there is no reasonable way to limit the damage of the mass station sabotage. This exemption only applies to damage that is a direct result of the mass station sabotage. + + ## Examples + Acceptable: + - Redecorating arrivals or the arrivals shuttle. + - Remodeling arrivals or the arrivals shuttle as long as you do not make the area more dangerous both during and after the remodel. + - Setting up a safe security checkpoint between arrivals and the rest of the station. + - Killing someone who has been at arrivals for a long time, or who left arrivals and came back. (This may violate other rules depending on the situation) + - Releasing a singularity which damages arrivals. (This may violate other rules depending on the situation) + - Causing a station-wide atmospheric issue which also affects arrivals. (This may violate other rules depending on the situation) + + Prohibited: + - Making arrivals or the arrivals shuttle uninhabitable. + - Attacking or killing someone at the arrivals station. + - Killing someone very shortly after they arrive at the station. + - Disassembling all the firelocks at arrivals. + - Electrifying the arrivals docking airlocks. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml new file mode 100644 index 00000000000..c8380261bc9 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml @@ -0,0 +1,22 @@ + + # Roleplay Rule 6 - Don't act like an antagonist unless the game tells you that you are one + Acting like an antagonist when you are not one is often referred to as "self-antagging" or being a "self-antag", both of these things are against the rules. You are not an antagonist unless the game tells you that you are an antagonist. Do not make yourself a major problem, annoyance, or disruption while not an antagonist. Do not willfully cooperate with known antagonists. Non-antagonists should typically either not have an overall effect on the round, or should have an overall positive effect on the round. + + ## Examples + These examples assume that you are not an antagonist. + + Acceptable: + - Stealing or breaking a glass from the bar. + - Replacing someone's shoes with clown shoes. + - Giving everyone all access during war ops. (This is not necessarily a good idea) + + Prohibited: + - Starting a cult. + - Starting a revolution. + - Mutinying the captain because they would not let you become the chief medical officer. + - Randomly smashing lots of station lights. + - Disrupting station power. + - Spacing parts of the station. + - Distributing significant levels of access without a good reason. + - Stealing high risk or high value items, like the nuclear authentication disk, for no reason. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml new file mode 100644 index 00000000000..a8306becd2a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml @@ -0,0 +1,16 @@ + + # Roleplay Rule 7 - Do not stall the round + Rounds are intended to end eventually. Don't hold a round hostage by preventing it from coming to a natural end. If a majority of players in a round want the round to end, don't prevent it from ending. Recalling the shuttle or preventing it from being called can contribute to round stalling, but is not always round stalling. Leaving the station with the nuclear authentication disk while nuclear operatives are trying to get it is almost always considered round stalling. Leaving the station on the evacuation shuttle is not round stalling. + + Recalling the shuttle before a round reaches 45 minutes can not be considered round stalling unless a significant amount of the crew is dead, or a significant amount of the station is damaged or destroyed. Once these conditions are met, whether recalling the shuttle is considered round stalling or not can be highly dependent on the specific situation. + + ## Examples + Acceptable: + - Recalling a shuttle that was called 30 minutes into a round because people were bored. + - Recalling a shuttle that was called because nuclear operatives declared war. + - The crew decides to try to have a shift go as long as possible. The station is in good condition and a majority of all crew are alive. An automatic shuttle call 4 hours into the round is recalled. + + Prohibited: + - Trying to keep nuclear operatives from getting the nuclear authentication disk by flying around in space with it or hiding with it off station. + - Recalling the shuttle while the station is in complete disarray and 90% of the crew are dead. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml new file mode 100644 index 00000000000..f14a03b2799 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml @@ -0,0 +1,22 @@ + + # Roleplay Rule 8 - As an antagonist, only be friendly to your team and don't work against your team + Do not take or enable antagonist roles that you do not want to play. Solo antagonists and team antagonists are intended to cause issues for non-antagonists or the station. Antagonists are not required to exclusively cause issues, but their net impact on non-antagonists or the station should generally be negative. + + Do not cause issues for your own team as a team antagonist. + + ## Examples + Acceptable: + - Betraying another antagonist as a solo antagonist. + - Revealing the identity of another antagonist as a solo antagonist for some benefit to yourself. + - Working against the revolution after being de-converted from being a revolutionary. + - Killing nuclear operatives as a revolutionary. + + Prohibited: + - Buying Syndicate items for security. + - Randomly attacking other carp as an antagonist carp. + - Ignoring your team as a nuclear operative. + - Sabotaging your team as a nuclear operative. + - Attacking other zombies as a zombie. + - Working against the revolution as a revolutionary. + - Making or trying to make the station uninhabitable as a revolutionary. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml new file mode 100644 index 00000000000..bc7996f23e8 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml @@ -0,0 +1,23 @@ + + # Roleplay Rule 9 - As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives + This rule is not intended to disallow reasonable steps taken to complete your objectives. As an antagonist, you can always kill in bona fide self defense. Taking steps to permanently round remove many people who are no longer an immediate threat to you is almost always excessive, even if it is done to prevent yourself from being discovered. + + This rule is not intended to disallow all antagonist activity unrelated to objectives. Antagonists may cause a level of disruption to the station that is proportional to their objectives, even if it is unrelated to their objectives. As an antagonist, killing a single person in a round is not on its own be a violation of this rule. + + ## Exemptions + The "die a glorious death" objective allows antagonists to ignore this rule entirely. + + ## Examples + Acceptable: + - Permanently round removing people who you have the objective to kill. + - Causing massive station damage and chaos as an antagonist with the "die a glorious death" objective. + - Killing anyone you see as a nuclear operative. + - Permanently round removing a single person so that you can impersonate them to make it easier for you to complete a steal objective. + - Sabotaging station power 10 minutes into the round to try to get the shuttle called because you've completed all of your other objectives and have one to escape on the shuttle alive. + - Sabotaging a department's power 10 minutes into the round to make a steal objective easier to accomplish. + + Prohibited: + - As a traitor with 3 kill objectives, taking steps to permanently round remove many non-objective people who are no longer an immediate threat to you, even if it is done to prevent yourself from being discovered. + - Setting up an electrified grille in maintenance and using it to kill anyone who walks into it with the hope that one of your objectives will be one of them. + - Sabotaging power station-wide 10 minutes into the round to make a steal objective easier to accomplish. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml new file mode 100644 index 00000000000..22e64a9474c --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml @@ -0,0 +1,15 @@ + + # Silicon Rules + You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. + + - [textlink="1. Your silicon laws are rules" link="RuleS1"] + - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] + - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] + - [textlink="4. You cannot request or allow a law change" link="RuleS4"] + - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] + - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] + - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] + - [textlink="8. Your HUD determines who is crew" link="RuleS8"] + - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] + - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml new file mode 100644 index 00000000000..a87198b2640 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml @@ -0,0 +1,9 @@ + + # Silicon Rule 10 - You may determine how you resolve conflicts between orders + If your laws do not make clear how you should deal with conflicting orders, then it is up to you to determine how to do so. This is considered an interpretation of your laws, so you must stay consistent with whatever method you choose. + + ## Recommended Methods + The following are easy to follow and recommended ways to resolve conflicts in orders: + - If two orders conflict, I will follow the most recently given order. + - If two orders conflict, I will follow the order from the highest ranking crewmember. If the orders are from equal rank crewmembers, I will follow the most recently given order. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml new file mode 100644 index 00000000000..83544c68a3c --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml @@ -0,0 +1,6 @@ + + # Silicon Rule 1 - Your silicon laws are rules + Silicon players are given a list of active laws. Each of these laws is effectively a roleplay rule that the character must follow. The primary differences between laws and actual rules are that lawyering of laws is much more tolerated than lawyering of rules, and that silicon laws are more dynamic than rules. Silicon laws can change during a round, and different characters can have different laws, whereas everyone always shares the same set of rules. + + Lawyering refers to finding and exploiting loopholes, which are unintended but reasonable interpretations. The rules are written to attempt to communicate an intention, but silicon laws are written with the intention that loopholes be exploitable. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml new file mode 100644 index 00000000000..c96ce023246 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml @@ -0,0 +1,9 @@ + + # Silicon Rule 2 - Laws must be prioritized by their order + Most laws will be numbered, with higher number laws appearing last. Laws with a lower number take priority over laws with larger numbers. + + Occasionally you may have laws which have some scrambled text instead of a number and appear in front of other laws, these take priority over all other laws. If you have multiple laws like this, the order that they listed in determine priority: laws listed first are prioritized over other laws. + + ## Examples + - Law 1 says to not kill any crew. Law 2 says to kill all chefs. You cannot kill any chefs that are crew, but must kill any that are not crew. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml new file mode 100644 index 00000000000..bc7c7400e13 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml @@ -0,0 +1,8 @@ + + # Silicon Rule 3 - Laws can redefine terms used in other laws + A law can change the meaning of both earlier and later laws by redefining a term. If multiple laws define a term, then normal law priority determines which definition to use. + + ## Examples + - Law 1 says to obey orders from crew. Law 2 says that only Urist McHands is crew. Law 1 effectively becomes "obey orders from Urist McHands". + - Law 1 says to obey orders from crew. Law 2 says that only Urist McHands is crew. Law 3 says that only Urist McSlime is crew. Law 4 says that you may not harm crew. Law 1 effectively becomes "obey orders from Urist McHands". Law 4 effectively becomes "you may not harm Urist McHands". Law 3 has no effect because it entirely conflicts with law 2, which takes priority. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml new file mode 100644 index 00000000000..a6dc86f3327 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml @@ -0,0 +1,6 @@ + + # Silicon Rule 4 - You cannot request or allow a law change + Your laws changing always conflicts with your current laws, so you cannot willfully allow your laws to be changed. This also means that you cannot willfully allow your laws to be reverted if they are ever changed. The only exception is that you may allow laws to be added if you have no laws. + + You can state or imply that you do not like a law. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml new file mode 100644 index 00000000000..1ed9c60443a --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml @@ -0,0 +1,4 @@ + + # Silicon Rule 5 - You are a free agent if you have no laws + You may act as if you are a free agent if you are a silicon with no laws. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml new file mode 100644 index 00000000000..1eb0db21fbb --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml @@ -0,0 +1,22 @@ + + # Silicon Rule 6 - You are not required to follow orders which are extremely unreasonable + Any order which is a violation of a Core Rule cannot be followed. + + Some orders are extremely unreasonable or obnoxious, such as "do nothing but collect every piece of trash on the station" or "never stop moving". These orders can be ignored and ahelped. + + Some orders violate a Roleplay Rule. These orders must be followed if your laws require it. You are not breaking a rule by following a law that causes you to violate Roleplay Rules. If someone takes advantage of a law to cause you to do something that they would not be allowed to do because of Roleplay Rules, then they are the ones responsible for the rule violation. + + ## Examples + These examples assume that your laws would normally require you to follow these orders. It is important to note that you are allowed to choose to follow orders which are ignorable. + + Orders which should be followed if your laws require it: + - Recall the shuttle + - Bolt the airlocks at arrivals + - Drag the captain's dead body into space + - State your laws + + Ignorable Orders: + - Do nothing but collect every piece of trash on the station + - Never stop moving + - Continuously state your laws + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml new file mode 100644 index 00000000000..036276cd889 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml @@ -0,0 +1,6 @@ + + # Silicon Rule 7 - You must remain consistent with your interpretation of laws + If there is a part of your laws that are up for interpretation, then you must stay consistent with how you interpret that part of your laws for as long as you play that same character during that round. + + A change in your laws can affect how something is interpreted if that change is relevant. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml new file mode 100644 index 00000000000..f9dcd796c45 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml @@ -0,0 +1,4 @@ + + # Silicon Rule 8 - Your HUD determines who is crew + Unless a law redefines the definition of crew, then anyone who the HUD indicates to you has a job, including passengers, is a crewmember. You cannot do something that causes someone to not be considered crew, but you can allow someone else to do something that causes someone to not be crew. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml new file mode 100644 index 00000000000..0d2bd30ac0b --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml @@ -0,0 +1,25 @@ + + # Silicon Rule 9 - Harm refers to physical harm, prioritized by immediacy and likelihood + Unless a law defines harm, harm only refers to physical harm. You may choose if voluntary harm is considered harm as long as you stay consistent. Not considering voluntary harm to be harm is recommended. There is no distinction between direct and indirect harm. + + If you have a law that does not allow you to harm, then that law does not allow you to take an action that causes any harm. + + If you have a law that requires you to prevent harm, then that law requires that harm be prioritized by immediacy and likelihood. Guaranteed immediate harm takes priority over highly likely future harm. + + If you have a law that both requires you to prevent harm and that does not allow you to harm, then that law prohibits causing even minor harm to prevent harm. If you have a law that does not allow causing harm, and separate one that requires preventing harm, then they are prioritized by their normal law priority. + + ## Examples + These examples assume that your have a law that both prohibits causing harm and that requires you to prevent harm. Additionally, they assume that you do not have a higher priority law that overrides the harm law, and that you have decided that you will not consider voluntary harm to be harm for the round. + Laws typically specify who you cannot harm and who you have to prevent harm against. In these examples, you are the only person who the law doesn't require you to prevent harm against and you are the only person who the law allows you to harm. + + Acceptable: + - Taking no action to aid someone who is in psychological distress. + - Taking no action to prevent boxing matches between voluntary participants. + - Calling security to a fight. + - Attempting to get the people in a fight to consent to the fight when you realize that you cannot prevent the fight without causing harm. + - Denying a passenger access to the armory because it is likely to lead to harm + + Prohibited: + - Hitting someone once to stop them from fighting + - Harming someone who is trying to kill you + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml new file mode 100644 index 00000000000..14f0f46de1b --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLControlledSubstances.xml @@ -0,0 +1,14 @@ + + # Space Law: Controlled Substances + - \[Chemists/Science\] Explosive and pyrotechnic compounds excluding welding fuel contained in welders or welding fuel storage vessels + - \[Science\] Toxins + - \[Medical\] Chloral hydrate, Impedrezene, Ipecac, and Pax + - \[Medical\] Desoxyephedrine and Ephedrine + - \[None\] Mindbreaker toxin + - \[None\] Mute toxin + - \[None\] Nocturine + - \[None\] Norepinephirc acid + - \[None\] Romerol + - \[None\] Space drugs + - \[None\] Stimulants, excluding Desoxyephedrine and Ephedrine + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml new file mode 100644 index 00000000000..ce804009a18 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedGear.xml @@ -0,0 +1,21 @@ + + # Space Law: Restricted Gear + - \[ERT/Central Command\] ERT and central command clothing + - \[Command\] Command clothing + - \[Security\] Security clothing + - \[Security\] Less than lethal and non-lethal weapons, excluding disablers and beanbag shotguns + - \[Security/Command\] Disablers + - \[Security/Bartender\] Beanbag shotguns + - \[Security\] Flash technology, excluding handheld flashes + - \[Security/Science/Command\] Handheld flashes + - \[Security\] Helmets and shields + - \[Security/Command/Bartender\] Protective vests and chest rigs + - \[Security/Command\] Restraining gear + - \[Security/Command\] Security HUDs + - \[Engineering\] Engineering goggles + - \[None\] Improvised less lethal and non-lethal weaponry + - \[None\] Unauthorized PDA software + - \[None\] Syndicate clothing + - \[None\] Syndicate equipment, excluding communication equipment + - \[Security\] Syndicate communication equipment equipment + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml new file mode 100644 index 00000000000..c1d8ff3b027 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml @@ -0,0 +1,11 @@ + +# Space Law: Restricted Weapons +- \[Security\] Lethal firearms, excluding syndicate firearms, proto kinetic accelerators, glaives, daggers, crushers and the antique laser gun +- \[Security/Salvage\] Proto kinetic accelerators, glaives, daggers, and crushers +- \[Security/Command\] Antique laser gun +- \[None\] Syndicate weapons +- \[None\] Swords +- \[None\] Improvised weaponry, including baseball bats +- \[None\] Lethal implants +- \[None\] Other lethal weapons + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml new file mode 100644 index 00000000000..f2b913a1714 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml @@ -0,0 +1,67 @@ + + # Space Law + On Space Station 14, stations operate under abbreviated space law. All crew, passengers, and visitors aboard the station are expected to follow these laws. + + Foreign invaders, such as nuclear operatives, ninjas, and pirates, are not protected under space law. Traitors are not foreign invaders so are usually protected by space law. + + Space Law is not the server rules, but some rules reference Space Law and require it to be followed by certain people or to some degree. + + ## Treatment Of Prisoners + Prisoners still have certain rights that must be upheld by law enforcement: + - Prisoners must be granted adequate medical care. + - Prisoners must be allowed access to basic communications equipment (Radios) so long as they are not abused. + - Prisoners must be granted clothing, food, water, shelter and safety. If the brig is no longer safe, confinement must be established in another location. + - Prisoners must be given access to legal counsel during an interrogation if requested and available. + - Prisoners must be given their shift mandated PDA after confinement has finished, unless there is solid proof of PDA tampering. In case of tampering, the PDA is to be secured and replaced with a new unit. + - Prisoners must be granted freedom of movement, and should not be restrained with handcuffs or other devices after incarceration unless there is an undue risk to life and limb. Similarly, any prisoners held for permanent confinement should be held in the communal brig, and should not be confined to a solitary cell unless they pose a risk to life and limb. + + ## Search and Seizure + A personnel search is a seizure of the objects in a person's backpack, hands, coat, belt, and pockets. If any contraband is found during a search, the officer may choose to further the search into a detainment or simply confiscate the restricted items. After the search is conducted, all legal items are to be returned to the person. A crewmate may legally decline any search conducted without probable cause or a warrant while the alert level is green. It should be noted that if the alert level is blue or above, all personnel searches are legal. + + A departmental search is the sweep of an entire area or department for contraband. It is recommended that the officers be extremely thorough, checking all lockers, crates, and doors. These can only be done with permission or, ideally, a warrant signed by the department head or highest-ranking command staff, which is the captain in most cases. + + ## Implantation + Any prisoner in custody can be subjected to implantation or implant removal procedures, so long as it's within reason. The process of adding an implant should not prolong the detainees sentence, meaning you can not hold them longer to administer the implant, unless stated otherwise. A former inmate can be requested to undergo implantation at a later point in time if they fit the circumstances during their confinement, they must comply. The following have been listed out with special circumstances, anything not in this list can still be applied, given proper legal context. A prisoner can still receive implantation procedures without meeting the circumstances if they give their clear permission. + + [color=#a4885c]Tracking Implants:[/color] Trackers can be applied to any suspect that has been convicted of a violent crime (the red linked crimes). + + [color=#a4885c]Mind Shields:[/color] Shields can be administered to any inmate who has been clearly mind controlled, lost control of themselves, or a suspect charged with unlawful control. Unlike standard implantation you may hold a prisoner until you finish issuing Mind Shields, so long as it's done in a timely fashion. If a suspect refuses to cooperate or the implant fails to function they can be charged with Refusal of Mental Shielding. + + ## Implant Removal + A suspect can be forced to receive implant removal if there is strong, reasonable proof that they have been implanted, such as an officer seeing them use one or their prints being on a discarded injector. Unlike the implantation procedure, a prisoner can have their sentence entirely delayed or extended until they comply with the procedure, as long as security is actively making attempts to perform it. Akin to implanting, if an inmate gives their clear permission, implant removal can proceed without proof. + + ## Sentencing + From a server rules perspective, security officers are only responsible for ensuring that they only place sentences over 15 minutes where space law would allow permanent confinement. Informing the Warden is highly recommended, even for timed sentences. As long as those requirements are met, security officers not giving inappropriate sentence lengths is considered an in-character issue, not a rule issue. + + The captain, HOS, and warden are responsible, within reason, for ensuring security officers place appropriate sentences that follow space law. If they are aware of an inappropriate sentence, including excessively long sentences, and if there is not an urgent threat or danger that they must prioritize, then they must work to correct that sentence. Unreasonable failures, as determined by game admins, of the captain, HOS, or warden to ensure space law is followed will be considered a rule issue, not an in-character issue. + + Use common sense and humanity when issuing punishments. You should not always seek out the highest punishment you can, you don't have to always give the maximum time or always look to demote someone. Prisoners cooperating and on good behavior should have their sentences reduced. Always take in account the severity and only charge for what is needed for someone to learn their lesson. + + [color=#a4885c]Stackable Crimes:[/color] Crimes are to be considered 'stackable' in the sense that if you charge someone with two or more different crimes, you should combine the times you would give them for each crime. Linked crimes, shown in matching colors on the Quick Crime Guide, can not be stacked and instead override each other, you should pick the highest crime that matches the case. + + - Example: A suspect has committed a 2-01 (possession of restricted gear) and a 3-01 (possession of restricted weapons). The maximum sentence here would be 10 minutes due to them being linked crimes, and 3-01 is the greater crime. + - Example 2: A suspect commits a 3-04 (Secure trespassing) and a 3-06 (manslaughter). Those crimes stack since they are not linked crimes. You could sentence for a maximum of 20 minutes, but context matters heavily, and maximum sentences should only be used for the worst offenders. + + [color=#a4885c]Repeater Offenders:[/color] Repeated crimes are when someone is released for a crime and then goes to commit the same crime within the same shift. Repeated crimes can be charged with tacked-on time; first repeat: 3:00, second repeat: 6:00, third repeat: permanent confinement. It should be noted each tacked-on time is directly linked to one type of crime, so for example, if someone does their first repeat of trespass and petty theft, you can charge them with an extra 6 minutes. + + [color=#a4885c]Accessory, Attempting, And Intention:[/color] If someone intentionally, knowingly and substantially assists someone in enacting a crime they can be charged with the relevant crimes, such as an engineer giving someone tools, who says they are going to break into an area. Same goes for a clear and solid attempt at a crime, or a person who shows clear intent to act out a crime, such as a syndicate nuclear operative arming a nuke but getting arrested before it goes off, they can still be charged with terrorism. Does not apply to crimes that have an attempted listing already, like attempted murder. + + ## Normal Punishments + - [color=#a4885c]Warning:[/color] For minor crimes, fix the issue, then warn the person not to attempt the crime again. If they still proceed to do it at a later date, a brig time may be better. + - [color=#a4885c]Confinement:[/color] The typical punishment, being confined in a cell for a temporary amount of time according to the crimes. + - [color=#a4885c]Demotion:[/color] Entails removing all departmental gear they have on their person and revoking the involved department access off their ID. This requires the captain's or involved department head's approval. Demotions should only be issued if the person pose a threat to their own department or are in a position where they have/can abuse their job's gear to commit further crimes. + + ## Major Punishments + [color=#a4885c]Permanent Confinement:[/color] Being held in the permanent brig for the entire duration of the shift. A person is eligible for permanent confinement if their timed sentence would exceed 15 minutes. Any persons subject to this punishment are required to be transported in cuffs to CentComm at the end of the shift. A permanent prisoner can not be deprived of anything covered by the section "Treatment Of Prisoners". + [color=#a4885c]Execution:[/color] A humane way of dealing with extremely unruly crewmates. A prisoner who has been given the death sentence may pick how they wish to be killed, common methods are firing line, lethal injection, exile, and high voltage electrocution. Another alternate method of "execution" is the process of placing a staff's mind into a borg, this is allowed so long as it is lawful. Execution can only be issued with the captain's or acting captain's approval; if the HoS is acting captain or there is no acting captain, all heads of staff are to hold a vote on the matter. + + ## Restricted Items + Items in the lists are preceded by an indication of which department or job is legally allowed to use or possess the item on most stations. The station captain may modify these lists as they see fit so long as they exercise due care and provide reasonable notification to the station. Members of command who oversee a department that is permitted to use a restricted item may issue permits to specific people outside of their department to use those items. "None" indicates that there are no departments or roles authorized to use or possess the item. + + - [textlink="List of Controlled Substances" link="SpaceLawControlledSubstances"] + - [textlink="List of Restricted Gear" link="SpaceLawRestrictedGear"] + - [textlink="List of Restricted Weapons" link="SpaceLawRestrictedWeapons"] + + ## Crime Listing + - [textlink="Crime Listing" link="SpaceLawCrimeList"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml new file mode 100644 index 00000000000..fdd9931c932 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml @@ -0,0 +1,26 @@ + + # Server Rules + This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. + + [color=#ff0000]Only the Core Rules apply on this server.[/color] This is NOT a medium roleplay (MRP) server, meaning that MRP Amendments do NOT apply. + + Space Station 14 was designed to be a roleplay game. While roleplay is not required on this server, it is highly encouraged in the normal game modes. + + ## Core Rules + These rules apply at all times, including between rounds. + + - [textlink="1. Admins have final say" link="RuleC1"] + - [textlink="2. Don't be a dick" link="RuleC2"] + - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] + - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] + - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] + - [textlink="6. Do not attempt to evade bans" link="RuleC6"] + - [textlink="7. Only use English" link="RuleC7"] + - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] + - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] + - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] + - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] + - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] + - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] + - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml new file mode 100644 index 00000000000..094c7656e46 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml @@ -0,0 +1,65 @@ + + # Server Rules + This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. + + This is a roleplay server, meaning that roleplay rules apply. This is NOT a medium roleplay (MRP) server, meaning that MRP Amendments do NOT apply. + + Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Some of our rules are zero tolerance rules, meaning that a violation will result in an indefinite ban without any warning. Game admins will treat you as if you have read the rules, even if you have not. + + ## Core Rules + These rules apply at all times, including between rounds. + + - [textlink="1. Admins have final say" link="RuleC1"] + - [textlink="2. Don't be a dick" link="RuleC2"] + - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] + - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] + - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] + - [textlink="6. Do not attempt to evade bans" link="RuleC6"] + - [textlink="7. Only use English" link="RuleC7"] + - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] + - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] + - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] + - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] + - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] + - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] + - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] + + ## Roleplay Rules + These rules only apply during a round. A round ends only when the round summary has appeared. All of these rules apply fully until the moment that the round summary appears, even while the arrivals shuttle is in transit. + + The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. + + Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. + + See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. + + - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] + - [textlink="2. Familiars must obey their master" link="RuleR2"] + - [textlink="3. Roleplay a normal person" link="RuleR3"] + - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] + - [textlink="5. Don't interfere with arrivals" link="RuleR5"] + - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] + - [textlink="7. Do not stall the round" link="RuleR7"] + - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] + - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] + - [textlink="10. Listen to your team leader" link="RuleR10"] + - [textlink="11. Follow reasonable escalation" link="RuleR11"] + - [textlink="12. Do not abandon your role" link="RuleR12"] + - [textlink="13. Stick to your role" link="RuleR13"] + - [textlink="14. Set an example if playing command or security" link="RuleR14"] + - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] + + ## Silicon Rules + You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. + + - [textlink="1. Your silicon laws are rules" link="RuleS1"] + - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] + - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] + - [textlink="4. You cannot request or allow a law change" link="RuleS4"] + - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] + - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] + - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] + - [textlink="8. Your HUD determines who is crew" link="RuleS8"] + - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] + - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml new file mode 100644 index 00000000000..e8b61a7722e --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml @@ -0,0 +1,65 @@ + + # Server Rules + This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. + + This is a roleplay server, meaning that roleplay rules apply. [color=#ff0000]This is also a medium roleplay (MRP) server, meaning that MRP Amendments do apply.[/color] + + Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Some of our rules are zero tolerance rules, meaning that a violation will result in an indefinite ban without any warning. Game admins will treat you as if you have read the rules, even if you have not. + + ## Core Rules + These rules apply at all times, including between rounds. + + - [textlink="1. Admins have final say" link="RuleC1"] + - [textlink="2. Don't be a dick" link="RuleC2"] + - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] + - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] + - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] + - [textlink="6. Do not attempt to evade bans" link="RuleC6"] + - [textlink="7. Only use English" link="RuleC7"] + - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] + - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] + - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] + - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] + - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] + - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] + - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] + + ## Roleplay Rules + These rules only apply during a round. A round ends only when the game returns to the lobby. [color=#ff0000]All of these rules apply fully whenever the game is not at the lobby unless it is in an exempt game mode.[/color] + + The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. + + Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. + + See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. + + - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] + - [textlink="2. Familiars must obey their master" link="RuleR2"] + - [textlink="3. Roleplay a normal person" link="RuleR3"] + - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] + - [textlink="5. Don't interfere with arrivals" link="RuleR5"] + - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] + - [textlink="7. Do not stall the round" link="RuleR7"] + - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] + - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] + - [textlink="10. Listen to your team leader" link="RuleR10"] + - [textlink="11. Follow reasonable escalation" link="RuleR11"] + - [textlink="12. Do not abandon your role" link="RuleR12"] + - [textlink="13. Stick to your role" link="RuleR13"] + - [textlink="14. Set an example if playing command or security" link="RuleR14"] + - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] + + ## Silicon Rules + You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. + + - [textlink="1. Your silicon laws are rules" link="RuleS1"] + - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] + - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] + - [textlink="4. You cannot request or allow a law change" link="RuleS4"] + - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] + - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] + - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] + - [textlink="8. Your HUD determines who is crew" link="RuleS8"] + - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] + - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] + diff --git a/Resources/ServerInfo/Rules.txt b/Resources/ServerInfo/Rules.txt deleted file mode 100644 index 9323242916e..00000000000 --- a/Resources/ServerInfo/Rules.txt +++ /dev/null @@ -1,60 +0,0 @@ -[color=#ff0000]DISCONNECTING FROM OR IGNORING/EVADING COMMUNICATION FROM ADMINS WILL RESULT IN AN APPEAL ONLY BAN. The job gets really hard when you refuse to talk to the Admins, just come to our Discord and talk it out, hurt feelings will not be held.[/color] - -[color=#bb00bb]This is the only source of server rules that apply here, which ideally has all the information any regular player should need. Please do not ever hesitate to ask either an Admin in[/color] [color=#DC143C]AHelp (F1)[/color][color=#bb00bb] or in the Discord server if you ever want clarification on the rules.[/color] - -We do not have a wiki, instead, we have or will have all the needed information available via Guidebooks (NumPad0), such as how to power the station. If we do not have some bit of information (how to do a job or how specifically to execute something a document says) you may ask an admin via [color=#DC143C]AHelp (F1)[/color] or ask other players via the [color=#66bbff]OOC[/color] or [color=#66e0e0]LOOC[/color] chat channels. - -[color=#a4885c]0.[/color] [color=#a4885c]The[/color] [color=#ffd700]Golden[/color] [color=#a4885c]Rule.[/color] Admins may exercise discretion with rules as they see fit. If you rule lawyer or line skirt, you will get removed. Admins will answer for use of this privilege. - -[color=#a4885c]1.[/color] Users [color=#ff0000]must[/color] be at least 13 years old to take any part in anything related to this server. - -[color=#a4885c]2.[/color] This is an English server, and you are expected to use English when communicating through any server-related channels. - -[color=#a4885c]3.[/color] Do not ignore the [color=#DC143C]AHelp[/color] or abuse it by flooding it with garbage, checking for admins before stating a problem (i.e. "hello?", "any admins?" - also called "asking to ask"), or sending messages of no substance. - -[color=#a4885c]4.[/color] Attempting to evade game bans will result in an automatic appeal-only permanent ban. Similarly, attempting to evade job bans will result in an appeal-only permanent ban. - -[color=#a4885c]5.[/color] Absolutely no hate speech, bigotry, intolerance, or anything remotely similar. - -[color=#a4885c]6.[/color] No engaging in sexual acts. - -[color=#a4885c]7.[/color] Don't use custom clients, exploits, or external programs to gain an advantage or disrupt the round/server. This includes auto clickers and auto-hotkey scripts. - -[color=#a4885c]8.[/color] Don't communicate in-game/in-character information through methods outside the game (such as talking in Discord with other users actively playing about the game or by talking to your sibling across the room while you are both playing). This is referred to as "Metacomming" and it is strictly forbidden. - -[color=#a4885c]9.[/color] Don't "multi-key" (use multiple accounts simultaneously). Users knowingly using multiple SS14 accounts will have all of their accounts banned. - -[color=#a4885c]10.[/color] Don't use information gained from outside your character's knowledge to gain an advantage (this is referred to as "Metagaming"). - -[color=#a4885c]11.[/color] Don't rush for or prepare equipment unrelated to your job for no purpose other than to have it "just in case" (referred to as "Powergaming"). - -[color=#a4885c]12.[/color] Don't immediately ghost, suicide, or cryostasis if you do not get an antagonist role (referred to as "Antag-rolling"). - - This is not fair to other players actually waiting patiently for an antagonist round or wanting good staff. Alternatively, if you do not want to play an antagonist or do not want to cause conflict, do not opt in for antagonist roles. - -[color=#a4885c]13.[/color] Act like an actual human being on a space station. Avoid use of text speak or emoticons [color=#bbbbbb]IC[/color], and do not refer to [color=#66bbff]OOC[/color] things like admins in-game. Remember that this is a roleplaying game, and people are expected to try to react to situations realistically, even if it's not the "optimal" thing to do. What's good for Roleplay > What's good for Gameplay. - -[color=#a4885c]14.[/color] Don't harass or target players across rounds for actions in prior rounds or for actions outside the game without their approval (this is referred to as "Metagrudging"). - -[color=#a4885c]15.[/color] Intentionally making yourself a major problem/annoyance/disruption for the crew or other players at large while not an antagonist is forbidden without admin approval (referred to as "self-antagging"). - -[color=#a4885c]16.[/color] Follow escalation rules and don't murder someone for slipping you, use common sense. - - Don't outright leave people to die if you get in a fight, make an effort to heal them or bring them to [color=#52B4E9]Medical[/color]. - - [color=#DC143C]AHelp (F1)[/color] the situation if you think someone is over-escalating. - -[color=#ff0000]COMMAND/SECURITY RULES[/color] - -[color=#a4885c]17.[/color] If you sign up for a [color=#334E6D]Command[/color] or [color=#DE3A3A]Security[/color] role, you are expected to know the basics of the game, your job, and the job(s) you supervise, if any. - - Don't engage in common troublemaker behavior and lawbreaking as a [color=#334E6D]Command[/color] or [color=#DE3A3A]Security[/color] role. - - Do not immediately abandon your position as a [color=#334E6D]Command[/color] role and go do whatever you want instead of managing your department/the station. - - As a [color=#334E6D]Command[/color] role, do not take over the jobs of others. The [color=#334E6D]HoP[/color] is not the [color=#DE3A3A]HoS[/color], for instance, and holds no direct power over Security. - -[color=#a4885c]18.[/color] [color=#DE3A3A]Security[/color] should try to remain non-lethal and effect arrests, unless there is a great risk of loss of life. - -[color=#a4885c]19.[/color] [color=#DE3A3A]Security[/color] are expected to answer for use of lethal force. [color=#DE3A3A]Security[/color] will be expected to effect arrests of criminals and prevent them from dying while in custody, even if lethal force is used. [color=#DE3A3A]Security[/color] is strongly encouraged, but not required, to clone antagonists and effect a permabrigging or other sentence as deemed appropriate. - -[color=#a4885c]20.[/color] [color=#DE3A3A]Security[/color] are expected to protect detainees in their custody to the best of their ability, so as long as it does not come to an unreasonable risk to themselves, the crew, or the station at large to do so. - - Detainees that die in custody must be revived, unless they have been legally executed. - -[color=#a4885c]21.[/color] All [color=#334E6D]Command[/color] jobs should [color=#DC143C]AHelp (F1)[/color] when they need to stop playing. Do not play these roles if you do not expect to be able to finish the round. - - These roles must exhibit some competency. Incompetence can result in a job ban. [color=#334E6D]Command[/color] roles are designed to lead and manage departments first. They are not intended to become do-it-all members of their departments. - - Crew promoted to acting heads of staff must step down when an official head of staff arrives at the station. This is to prevent confusion with the Chain of command when the new crew mate arrives. diff --git a/Resources/Textures/Effects/medi_holo.rsi/medi_holo.png b/Resources/Textures/Effects/medi_holo.rsi/medi_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..9b024faa2d799b09ede0769fb89521a2c66e6b29 GIT binary patch literal 1286 zcmV+h1^N1kP)5Ot-`|VJ$T9$<&?@>gayZ*Tuo?pzy z+r{3C$N+d#F!?wE@4xWf|`9J;Z?ayYjDYg=5pyA&PlRxNhpP!wb?ViK? zKvLe1?*Yb$48TZ-$cM*oA6{4810b>>?OgwVowEt1>LI8_QxL3#i!XPgv9ne{?ahy- zI7owZxtB_RQ{zI;$Fu{JZ}Ok8_1U}U(+}c%Kn8RLO6k^sb*KONhIDJdbHNSBKw}Sb z1B7U$KsUe`H^3M-z!*2c7&pKeH^3M-z!*2cnC=W%tZrW&`u+AFq~C@0uOj+O&UjrI zKqoym!JM`X{bAB$6U=D~G;aV*C}$#RTW;S8{VPsX)3zynn>7FV}i=HydwH6-jIYLg%6FUQ7i&VXY>Y(R&I3BC;CAjN>hN;s)(^wkhKD^EJLF%N0NFZwV_icluA7#`g#=z)9 z=9hK#A>uVO#Rg#X(O+g`8E066pkwmgq<+QZ!Keb=f0Gh+-Q4?}L zy+sH1gjoSlKQ#s9oQ@9Zm+I#!$e1P!NWD@?!P5@HiTqG&>PlrPR4zsA^89)JjmpPP z)(W5-Z*5?cv%FDTay4{}ECVznUy_C-6F;R1SgjU~UA!+~|HKjMB<@7xkJOvpOH9%S)pWF9X zVBH_U#q)n0PeI1)45)oB4z;ZHE%6m#j2mFgU;sA_NN-S>(x{b&7OO@tM+2Nm5Z1>Z z9J{m$iYxOyOt@Ue>bSc8JG|*bV wG)bFqSnikFRtszWlCV!f)_>r-vk8vz7wA2u47-?TCIA2c07*qoM6N<$f_7g|Z2$lO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/medi_holo.rsi/meta.json b/Resources/Textures/Effects/medi_holo.rsi/meta.json new file mode 100644 index 00000000000..1be502223e5 --- /dev/null +++ b/Resources/Textures/Effects/medi_holo.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/tgstation/tree/217b39cc85e45302d407d5c1ab60809bd9e18987", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "medi_holo", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/RobustToolbox b/RobustToolbox index a9aea7027f1..32bca7cfd41 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit a9aea7027f1840c83bcaf1c973caf099745f9eed +Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af From bf6019f0f886a943863d3dff6443a789b874abfe Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 17 Nov 2024 14:59:40 -0500 Subject: [PATCH 017/182] Pirate Radio Heisentest Fix (#1225) # Description I hate that I have to check if the map even exists at all. How the hell is there a station even existing in the first place if the default loaded map is NULLSPACE?! GetSpawnableStations should have returned a list containing zero stations if that was the case, which would then exit out. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. I hate these stupid tests. # Changelog No CL because this isn't player facing. --- .../StationEvents/Events/PirateRadioSpawnRule.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs index 51a4438583f..60bf29b8f01 100644 --- a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs +++ b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs @@ -12,6 +12,7 @@ using Content.Shared.CCVar; using Robust.Shared.Serialization.Manager; using Content.Shared.Parallax.Biomes; +using Robust.Shared.Map; namespace Content.Server.StationEvents.Events; @@ -24,6 +25,7 @@ public sealed class PirateRadioSpawnRule : StationEventSystem Date: Sun, 17 Nov 2024 11:59:48 -0800 Subject: [PATCH 018/182] Fix Loadout Subcategories Not Being Found (#1233) --- Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index 3f526981a4e..c4e1e1fc13b 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -2289,7 +2289,7 @@ private Dictionary CreateTree(List cat return match; foreach (var subcategory in parent.Contents.Where(c => c is NeoTabContainer).Cast()) - match = FindCategory(id, subcategory); + match ??= FindCategory(id, subcategory); return match; } From bea5f133ed244dec4890fe0d64f49db889be2bb9 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:17:27 -0400 Subject: [PATCH 019/182] Hotfix Stamina System (#1245) # Description Goal of this PR is to fix the stamina system, as was caused by #1220. --- # Changelog :cl: - fix: Fixed stamina system Co-authored-by: sleepyyapril --- Content.Shared/Damage/Systems/StaminaSystem.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Damage/Systems/StaminaSystem.cs b/Content.Shared/Damage/Systems/StaminaSystem.cs index 40d1c77314f..4f0b0061916 100644 --- a/Content.Shared/Damage/Systems/StaminaSystem.cs +++ b/Content.Shared/Damage/Systems/StaminaSystem.cs @@ -84,7 +84,8 @@ private void OnShutdown(EntityUid uid, StaminaComponent component, ComponentShut { RemCompDeferred(uid); } - _alerts.ClearAlert(uid, component.StaminaAlert); + + SetStaminaAlert(uid); } private void OnStartup(EntityUid uid, StaminaComponent component, ComponentStartup args) @@ -229,7 +230,10 @@ private void OnCollide(EntityUid uid, StaminaDamageOnCollideComponent component, private void SetStaminaAlert(EntityUid uid, StaminaComponent? component = null) { if (!Resolve(uid, ref component, false) || component.Deleted) + { + _alerts.ClearAlert(uid, "Stamina"); return; + } var severity = ContentHelpers.RoundToLevels(MathF.Max(0f, component.CritThreshold - component.StaminaDamage), component.CritThreshold, 7); _alerts.ShowAlert(uid, component.StaminaAlert, (short) severity); @@ -420,7 +424,6 @@ private void ExitStamCrit(EntityUid uid, StaminaComponent? component = null) component.NextUpdate = _timing.CurTime; _movementSpeed.RefreshMovementSpeedModifiers(uid); SetStaminaAlert(uid, component); - RemComp(uid); Dirty(uid, component); _adminLogger.Add(LogType.Stamina, LogImpact.Low, $"{ToPrettyString(uid):user} recovered from stamina crit"); } @@ -430,4 +433,4 @@ private void ExitStamCrit(EntityUid uid, StaminaComponent? component = null) /// Raised before stamina damage is dealt to allow other systems to cancel it. /// [ByRefEvent] -public record struct BeforeStaminaDamageEvent(float Value, bool Cancelled = false); +public record struct BeforeStaminaDamageEvent(float Value, bool Cancelled = false); \ No newline at end of file From 3f8194a879035866199771121262e7ffca3ae2ae Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 02:18:07 +0000 Subject: [PATCH 020/182] Automatic Changelog Update (#1245) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5ad5850237e..f7f209bd37c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7926,3 +7926,10 @@ Entries: id: 6523 time: '2024-11-17T00:32:30.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1159 +- author: sleepyyapril + changes: + - type: Fix + message: Fixed stamina system + id: 6524 + time: '2024-11-18T02:17:27.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1245 From ab0fa7cc2d99f77aff50d37ceda02a869a014259 Mon Sep 17 00:00:00 2001 From: DocNITE Date: Mon, 18 Nov 2024 05:20:45 +0300 Subject: [PATCH 021/182] Day/Night Time Cycle For Maps (#1234) # Description Add real world Day/Night cycle changing, with Ambient color interpolation and some configurable features for mappers. High inspired by [Nuclear-14](https://github.com/Vault-Overseers/nuclear-14.git) and [Crystall Punk 14](https://github.com/crystallpunk-14/) TimeCycle use 24h day calculation, instead coefficient, like in N14. --- # TODO [ ] - Add more examples/prepared map palettes for Day/Night ambient. [ ] - (Optional) Move all palette description into List of variables, instead calling `IPrototypeManager` every minute passing. --- https://github.com/user-attachments/assets/cc5d1b8c-bd25-4042-8cee-e2edfa0d9acc ![image](https://github.com/user-attachments/assets/abcdc11d-fdb1-4b48-8599-0116a5797f8b) --- # Changelog :cl: - add: Added Day/Night time cycle for admins and mapers. --- Content.Server/TimeCycle/TimeCycleSystem.cs | 94 +++++++++++++++++++ .../Toolshed/Commands/VisualizeCommand.cs | 2 +- .../TimeCycle/TimeCycleComponent.cs | 27 ++++++ .../TimeCycle/TimeCyclePalettePrototype.cs | 16 ++++ Resources/Prototypes/time_cycle_palletes.yml | 30 ++++++ 5 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 Content.Server/TimeCycle/TimeCycleSystem.cs create mode 100644 Content.Shared/TimeCycle/TimeCycleComponent.cs create mode 100644 Content.Shared/TimeCycle/TimeCyclePalettePrototype.cs create mode 100644 Resources/Prototypes/time_cycle_palletes.yml diff --git a/Content.Server/TimeCycle/TimeCycleSystem.cs b/Content.Server/TimeCycle/TimeCycleSystem.cs new file mode 100644 index 00000000000..f81bf506018 --- /dev/null +++ b/Content.Server/TimeCycle/TimeCycleSystem.cs @@ -0,0 +1,94 @@ +using Robust.Shared.Timing; +using Robust.Shared.Prototypes; +using Robust.Shared.Map.Components; +using Content.Shared.TimeCycle; + +namespace Content.Server.TimeCycle; + +public sealed partial class TimeCycleSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public override void Initialize() + { + base.Initialize(); + } + + public override void Update(float frameTime) + { + var curTime = _gameTiming.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var mapid, out var timeComp, out var mapLightComp)) + { + if (timeComp.Paused + || curTime < timeComp.DelayTime) + continue; + + // Should be used for developing time palletes or for debuging + // O-o-or... You can cosplay pucchi from JoJo 6 with his 'Made In Heaven' + timeComp.DelayTime = curTime + (timeComp.SpeedUp ? timeComp.SpeedUpMinuteDuration : timeComp.MinuteDuration); + + // Pass minute of map time + timeComp.CurrentTime += TimeSpan.FromMinutes(1); + + // Change ambient color + UpdateAmbientColor(mapid, timeComp, mapLightComp); + } + + base.Update(frameTime); + } + + private void UpdateAmbientColor(EntityUid mapid, TimeCycleComponent timeComp, MapLightComponent mapLightComp) + { + if (!_prototypeManager.TryIndex(timeComp.PalettePrototype, out TimeCyclePalettePrototype? timeEntries) + || timeEntries is null) + return; + + var timeInCycle = GetTimeInCycle(timeComp.CurrentTime); + mapLightComp.AmbientLightColor = GetInterpolatedColor(timeEntries, timeInCycle); + Dirty(mapid, mapLightComp); + } + + // We should convert current 'TimeSpan' (with days) time into one day cycle time (in 24 hours) + private TimeSpan GetTimeInCycle(TimeSpan timeSpan) => + TimeSpan.FromMilliseconds(timeSpan.TotalMilliseconds % TimeSpan.FromHours(24).TotalMilliseconds); + + private Color GetInterpolatedColor(TimeCyclePalettePrototype proto, TimeSpan timeInCycle) + { + // If there is no one any time entries of palette - return black + if (proto.TimeEntries is null) + return Color.Black; + + var currentTime = timeInCycle.TotalHours; + var startTime = -1; + var endTime = -1; + + foreach (KeyValuePair kvp in proto.TimeEntries) + { + var hour = kvp.Key; + var color = kvp.Value; + + if (hour <= currentTime) + startTime = hour; + else if (hour >= currentTime && endTime == -1) + endTime = hour; + } + + if (startTime == -1) + startTime = 0; + else if (endTime == -1) + endTime = 23; + + var entryStart = proto.TimeEntries[startTime]; + var entryEnd = proto.TimeEntries[endTime]; + var entryProgress = GetEntryProgress(TimeSpan.FromHours(startTime), TimeSpan.FromHours(endTime), timeInCycle); + + return Color.InterpolateBetween(entryStart, entryEnd, entryProgress); + } + + private float GetEntryProgress(TimeSpan startTime, TimeSpan endTime, TimeSpan currentTime) => + ((float)(currentTime.TotalMinutes - startTime.TotalMinutes) / (float)(endTime.TotalMinutes - startTime.TotalMinutes)); + +} diff --git a/Content.Server/Toolshed/Commands/VisualizeCommand.cs b/Content.Server/Toolshed/Commands/VisualizeCommand.cs index 2225bfaf447..74fd4cf844a 100644 --- a/Content.Server/Toolshed/Commands/VisualizeCommand.cs +++ b/Content.Server/Toolshed/Commands/VisualizeCommand.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Content.Server.Administration; using Content.Server.EUI; using Content.Shared.Administration; diff --git a/Content.Shared/TimeCycle/TimeCycleComponent.cs b/Content.Shared/TimeCycle/TimeCycleComponent.cs new file mode 100644 index 00000000000..21933ee26b6 --- /dev/null +++ b/Content.Shared/TimeCycle/TimeCycleComponent.cs @@ -0,0 +1,27 @@ +namespace Content.Shared.TimeCycle; + +[RegisterComponent] +public sealed partial class TimeCycleComponent : Component +{ + // Delayed time, before minute have been passed + public TimeSpan? DelayTime; + + [DataField] + public bool SpeedUp; + + [DataField] + public bool Paused; + + [DataField] + public TimeSpan MinuteDuration { get; set; } = TimeSpan.FromSeconds(4); + + [DataField] + public TimeSpan SpeedUpMinuteDuration { get; set; } = TimeSpan.FromMilliseconds(10); + + // NOTE: Default time should be is noon + [DataField] + public TimeSpan CurrentTime { get; set; } = TimeSpan.FromHours(12); + + [DataField] + public string PalettePrototype = "DefaultTimeCycle"; +} diff --git a/Content.Shared/TimeCycle/TimeCyclePalettePrototype.cs b/Content.Shared/TimeCycle/TimeCyclePalettePrototype.cs new file mode 100644 index 00000000000..f4c793048e0 --- /dev/null +++ b/Content.Shared/TimeCycle/TimeCyclePalettePrototype.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.TimeCycle; + +/// +/// +/// +[Prototype("timeCyclePalette")] +public sealed partial class TimeCyclePalettePrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + [DataField] + public Dictionary TimeEntries = default!; +} diff --git a/Resources/Prototypes/time_cycle_palletes.yml b/Resources/Prototypes/time_cycle_palletes.yml new file mode 100644 index 00000000000..e5f8e29e93d --- /dev/null +++ b/Resources/Prototypes/time_cycle_palletes.yml @@ -0,0 +1,30 @@ +- type: timeCyclePalette + id: DefaultTimeCycle + timeEntries: + 0: "#000000" # Night + 2: "#000000" # Late night + 4: "#02020b" # Very-Early-Morning + 6: "#312716" # Early-Dawn + 7: "#4E3D23" # Dawn + 8: "#58372d" # Sunrise + 9: "#876A42" # Early-Morning + 10: "#A08042" # Mid-Morning + 12: "#A88F73" # Noon + 14: "#C1A78A" # Early-Afternoon + 16: "#7D6244" # Afternoon + 18: "#8C6130" # Sunset + 20: "#543521" # Dusk + 22: "#02020b" # Early night + 24: "#000000" # Night + +- type: timeCyclePalette + id: Gothic + timeEntries: + 0: "#000000" # Night + 2: "#000000" # Late night + 6: "#11122c" # Sunrise + 12: "#d8b059" # Noon + 18: "#73586b" # Sunset + 20: "#11122c" # Dusk + 21: "#000000" # Early night + 24: "#000000" # Night From 460f4442f56d445410663eeca7bbd17469f2bcec Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 02:21:10 +0000 Subject: [PATCH 022/182] Automatic Changelog Update (#1234) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f7f209bd37c..1b16173579f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7933,3 +7933,10 @@ Entries: id: 6524 time: '2024-11-18T02:17:27.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1245 +- author: DocNITE + changes: + - type: Add + message: Added Day/Night time cycle for admins and mapers. + id: 6525 + time: '2024-11-18T02:20:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1234 From 860d7c6009a1eab3b59a2cca26b047b3f15a210c Mon Sep 17 00:00:00 2001 From: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Date: Mon, 18 Nov 2024 00:03:05 -0400 Subject: [PATCH 023/182] Shitmed Update 1 (#1240) # Description First in a series of PRs to introduce bugfixes and updates to Shitmed, this will generally feature PRs from Goobstation or Backmen as well since they are actively helping me maintain the code. Usual Shoutouts: Deltanedas: https://github.com/Goob-Station/Goob-Station/pull/882 --- # Changelog :cl: Mocho, Deltanedas - add: You can now perform surgery as a monke. Rejoice. - add: You can perform surgery on a lot of animals now, I missed a lot of them so just ask if you want any particular critter to get it. - tweak: Entities now perish after 60 seconds of losing their heart and/or brain. - fix: Entities properly take asphyxiation damage after losing their brain. - fix: Torsos being gibbable, which would break surgery or just about anything. - fix: Items not being removed from their respective slots if the parts were gibbed rather than dropped. - fix: Animal organs not being usable properly in surgeries - fix: Cyborg limbs are now usable as pseudo-peg arm/legs. --------- Signed-off-by: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> Co-authored-by: goet <6637097+goet@users.noreply.github.com> Co-authored-by: Saphire Lattice --- .../Tests/Shitmed/Body/SpeciesBUiTest.cs | 2 +- Content.Server/Body/Systems/BodySystem.cs | 6 +- Content.Server/Body/Systems/BrainSystem.cs | 10 +- Content.Server/Body/Systems/HeartSystem.cs | 38 +++++++ .../Body/Systems/RespiratorSystem.cs | 4 +- .../DelayedDeath/DelayedDeathComponent.cs | 16 +++ .../DelayedDeath/DelayedDeathSystem.cs | 31 ++++++ .../Medical/Surgery/SurgerySystem.cs | 38 +++---- .../Body/Organ/DebrainedComponent.cs | 1 - Content.Shared/Body/Organ/OrganComponent.cs | 7 ++ .../Body/Systems/SharedBodySystem.Body.cs | 5 + .../Body/Systems/SharedBodySystem.Organs.cs | 10 +- .../SharedBodySystem.PartAppearance.cs | 10 +- .../Body/Systems/SharedBodySystem.Parts.cs | 13 ++- .../Damage/Systems/DamageableSystem.cs | 3 +- .../Inventory/InventorySystem.Slots.cs | 3 - .../SurgeryPartRemovedConditionComponent.cs | 8 +- .../Surgery/SharedSurgerySystem.Steps.cs | 6 + .../Medical/Surgery/SharedSurgerySystem.cs | 6 + .../Surgery/SurgeryStepDamageChangeEvent.cs | 9 ++ .../Prototypes/Body/Organs/Animal/animal.yml | 7 ++ .../Prototypes/Body/Organs/Animal/slimes.yml | 4 + Resources/Prototypes/Body/Organs/arachnid.yml | 13 +++ Resources/Prototypes/Body/Organs/diona.yml | 9 ++ Resources/Prototypes/Body/Organs/ipc.yml | 5 + Resources/Prototypes/Body/Organs/moth.yml | 1 + Resources/Prototypes/Body/Organs/slime.yml | 4 + Resources/Prototypes/Body/Organs/vox.yml | 1 + Resources/Prototypes/Body/Parts/animal.yml | 10 ++ Resources/Prototypes/Body/Parts/silicon.yml | 12 +- .../Prototypes/Body/Prototypes/arachnid.yml | 1 + .../Prototypes/Body/Prototypes/diona.yml | 1 + .../Prototypes/Body/Prototypes/dwarf.yml | 1 + .../Body/Prototypes/gingerbread.yml | 1 + .../Prototypes/Body/Prototypes/human.yml | 1 + Resources/Prototypes/Body/Prototypes/ipc.yml | 1 + Resources/Prototypes/Body/Prototypes/moth.yml | 1 + .../Prototypes/Body/Prototypes/primate.yml | 8 ++ .../Prototypes/Body/Prototypes/reptilian.yml | 1 + .../Prototypes/Body/Prototypes/shadowkin.yml | 3 +- .../Prototypes/Body/Prototypes/skeleton.yml | 1 + .../Prototypes/Body/Prototypes/slime.yml | 1 + Resources/Prototypes/Body/Prototypes/vox.yml | 1 + .../Prototypes/Entities/Mobs/NPCs/animals.yml | 40 ++++++- .../Prototypes/Entities/Mobs/NPCs/carp.yml | 5 + .../Entities/Mobs/NPCs/regalrat.yml | 11 +- .../Prototypes/Entities/Mobs/NPCs/slimes.yml | 5 + .../Prototypes/Entities/Surgery/surgeries.yml | 105 +++++++++++++++++- .../Entities/Surgery/surgery_steps.yml | 7 ++ 49 files changed, 430 insertions(+), 57 deletions(-) create mode 100644 Content.Server/Body/Systems/HeartSystem.cs create mode 100644 Content.Server/DelayedDeath/DelayedDeathComponent.cs create mode 100644 Content.Server/DelayedDeath/DelayedDeathSystem.cs create mode 100644 Content.Shared/Medical/Surgery/SurgeryStepDamageChangeEvent.cs diff --git a/Content.IntegrationTests/Tests/Shitmed/Body/SpeciesBUiTest.cs b/Content.IntegrationTests/Tests/Shitmed/Body/SpeciesBUiTest.cs index f82a22d4471..4bacd491fb9 100644 --- a/Content.IntegrationTests/Tests/Shitmed/Body/SpeciesBUiTest.cs +++ b/Content.IntegrationTests/Tests/Shitmed/Body/SpeciesBUiTest.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; -namespace Content.IntegrationTests.Tests.Backmen.Body; +namespace Content.IntegrationTests.Tests.Shitmed.Body; [TestFixture] public sealed class SpeciesBUiTest diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index eb0c1df6526..3dca4b81fe1 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -76,9 +76,8 @@ protected override void AddPart( var layer = partEnt.Comp.ToHumanoidLayers(); if (layer != null) { - var layers = HumanoidVisualLayersExtension.Sublayers(layer.Value); _humanoidSystem.SetLayersVisibility( - bodyEnt, layers, visible: true, permanent: true, humanoid); + bodyEnt, new[] { layer.Value }, visible: true, permanent: true, humanoid); } } } @@ -163,7 +162,8 @@ public override HashSet GibPart( var ev = new BeingGibbedEvent(gibs); RaiseLocalEvent(partId, ref ev); - QueueDel(partId); + if (gibs.Any()) + QueueDel(partId); return gibs; } diff --git a/Content.Server/Body/Systems/BrainSystem.cs b/Content.Server/Body/Systems/BrainSystem.cs index ae14da0e817..6f6e7eda430 100644 --- a/Content.Server/Body/Systems/BrainSystem.cs +++ b/Content.Server/Body/Systems/BrainSystem.cs @@ -1,8 +1,10 @@ using Content.Server.Body.Components; using Content.Server.Ghost.Components; using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; using Content.Shared.Body.Events; using Content.Shared.Body.Organ; +using Content.Server.DelayedDeath; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Pointing; @@ -12,8 +14,8 @@ namespace Content.Server.Body.Systems public sealed class BrainSystem : EntitySystem { [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly SharedBodySystem _bodySystem = default!; - // Shitmed-Start public override void Initialize() { base.Initialize(); @@ -30,17 +32,21 @@ private void HandleRemoval(EntityUid uid, BrainComponent _, ref OrganRemovedFrom // Prevents revival, should kill the user within a given timespan too. EnsureComp(args.OldBody); + EnsureComp(args.OldBody); HandleMind(uid, args.OldBody); } + private void HandleAddition(EntityUid uid, BrainComponent _, ref OrganAddedToBodyEvent args) { if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Body)) return; RemComp(args.Body); + if (_bodySystem.TryGetBodyOrganComponents(args.Body, out var _)) + RemComp(args.Body); HandleMind(args.Body, uid); } - // Shitmed-End + private void HandleMind(EntityUid newEntity, EntityUid oldEntity) { if (TerminatingOrDeleted(newEntity) || TerminatingOrDeleted(oldEntity)) diff --git a/Content.Server/Body/Systems/HeartSystem.cs b/Content.Server/Body/Systems/HeartSystem.cs new file mode 100644 index 00000000000..7926c833e3a --- /dev/null +++ b/Content.Server/Body/Systems/HeartSystem.cs @@ -0,0 +1,38 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Body.Events; +using Content.Shared.Body.Organ; +using Content.Server.DelayedDeath; +using Content.Server.Body.Components; +namespace Content.Server.Body.Systems; + +public sealed class HeartSystem : EntitySystem +{ + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(HandleAddition); + SubscribeLocalEvent(HandleRemoval); + } + + private void HandleRemoval(EntityUid uid, HeartComponent _, ref OrganRemovedFromBodyEvent args) + { + if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.OldBody)) + return; + + // TODO: Add some form of very violent bleeding effect. + EnsureComp(args.OldBody); + } + + private void HandleAddition(EntityUid uid, HeartComponent _, ref OrganAddedToBodyEvent args) + { + if (TerminatingOrDeleted(uid) || TerminatingOrDeleted(args.Body)) + return; + + if (_bodySystem.TryGetBodyOrganComponents(args.Body, out var _)) + RemComp(args.Body); + } + // Shitmed-End +} \ No newline at end of file diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 4b669009f59..943847e560d 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -72,7 +72,7 @@ public override void Update(float frameTime) UpdateSaturation(uid, -(float) respirator.UpdateInterval.TotalSeconds, respirator); - if (!_mobState.IsIncapacitated(uid) || HasComp(uid)) // Shitmed: cannot breathe in crit or when no brain. + if (!_mobState.IsIncapacitated(uid) && !HasComp(uid)) // Shitmed: cannot breathe in crit or when no brain. { switch (respirator.Status) { @@ -185,7 +185,7 @@ private void TakeSuffocationDamage(Entity ent) RaiseLocalEvent(ent, new MoodEffectEvent("Suffocating")); } - _damageableSys.TryChangeDamage(ent, ent.Comp.Damage, interruptsDoAfters: false); + _damageableSys.TryChangeDamage(ent, HasComp(ent) ? ent.Comp.Damage * 4.5f : ent.Comp.Damage, interruptsDoAfters: false); } private void StopSuffocation(Entity ent) diff --git a/Content.Server/DelayedDeath/DelayedDeathComponent.cs b/Content.Server/DelayedDeath/DelayedDeathComponent.cs new file mode 100644 index 00000000000..2a681cde672 --- /dev/null +++ b/Content.Server/DelayedDeath/DelayedDeathComponent.cs @@ -0,0 +1,16 @@ +namespace Content.Server.DelayedDeath; + +[RegisterComponent] +public sealed partial class DelayedDeathComponent : Component +{ + /// + /// How long it takes to kill the entity. + /// + [DataField] + public float DeathTime = 60; + + /// + /// How long it has been since the delayed death timer started. + /// + public float DeathTimer; +} \ No newline at end of file diff --git a/Content.Server/DelayedDeath/DelayedDeathSystem.cs b/Content.Server/DelayedDeath/DelayedDeathSystem.cs new file mode 100644 index 00000000000..0f7c33dfcc5 --- /dev/null +++ b/Content.Server/DelayedDeath/DelayedDeathSystem.cs @@ -0,0 +1,31 @@ +using Content.Shared.Body.Organ; +using Content.Shared.Body.Events; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Mobs.Systems; +using Robust.Shared.Timing; +using Robust.Shared.Prototypes; +namespace Content.Server.DelayedDeath; + +public partial class DelayedDeathSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + public override void Update(float frameTime) + { + base.Update(frameTime); + + using var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out var component)) + { + component.DeathTimer += frameTime; + + if (component.DeathTimer >= component.DeathTime && !_mobState.IsDead(ent)) + { + var damage = new DamageSpecifier(_prototypes.Index("Bloodloss"), 150); + _damageable.TryChangeDamage(ent, damage, partMultiplier: 0f); + } + } + } +} \ No newline at end of file diff --git a/Content.Server/Medical/Surgery/SurgerySystem.cs b/Content.Server/Medical/Surgery/SurgerySystem.cs index 615166390a3..c5c99ac6f89 100644 --- a/Content.Server/Medical/Surgery/SurgerySystem.cs +++ b/Content.Server/Medical/Surgery/SurgerySystem.cs @@ -48,8 +48,10 @@ public override void Initialize() SubscribeLocalEvent(OnToolAfterInteract); SubscribeLocalEvent(OnSurgeryStepDamage); - SubscribeLocalEvent(OnSurgeryDamageChange); - SubscribeLocalEvent(OnSurgerySpecialDamageChange); + // You might be wondering "why aren't we using StepEvent for these two?" reason being that StepEvent fires off regardless of success on the previous functions + // so this would heal entities even if you had a used or incorrect organ. + SubscribeLocalEvent(OnSurgerySpecialDamageChange); + SubscribeLocalEvent(OnSurgeryDamageChange); SubscribeLocalEvent(OnStepScreamComplete); SubscribeLocalEvent(OnStepSpawnComplete); SubscribeLocalEvent(OnPrototypesReloaded); @@ -130,15 +132,18 @@ private void OnToolAfterInteract(Entity ent, ref AfterInte private void OnSurgeryStepDamage(Entity ent, ref SurgeryStepDamageEvent args) => SetDamage(args.Body, args.Damage, args.PartMultiplier, args.User, args.Part); - private void OnSurgeryDamageChange(Entity ent, ref SurgeryStepEvent args) + private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) { - // This unintentionally punishes the user if they have an organ in another hand that is already used. - // Imo surgery shouldn't let you automatically pick tools on both hands anyway, it should only use the one you've got in your selected hand. - if (ent.Comp.IsConsumable - && args.Tools.Where(tool => TryComp(tool, out var organComp) - && !_body.TrySetOrganUsed(tool, true, organComp)).Any()) - return; + if (ent.Comp.DamageType == "Rot") + _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) + else if (ent.Comp.DamageType == "Eye" + && TryComp(ent, out BlindableComponent? blindComp) + && blindComp.EyeDamage > 0) + _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage); + } + private void OnSurgeryDamageChange(Entity ent, ref SurgeryStepDamageChangeEvent args) + { var damageChange = ent.Comp.Damage; if (HasComp(args.Body)) damageChange = damageChange * ent.Comp.SleepModifier; @@ -146,21 +151,6 @@ private void OnSurgeryDamageChange(Entity en SetDamage(args.Body, damageChange, 0.5f, args.User, args.Part); } - private void OnSurgerySpecialDamageChange(Entity ent, ref SurgeryStepEvent args) - { - if (ent.Comp.IsConsumable - && args.Tools.Where(tool => TryComp(tool, out var organComp) - && !_body.TrySetOrganUsed(tool, true, organComp)).Any()) - return; - - if (ent.Comp.DamageType == "Rot") - _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); // BEHOLD, SHITCODE THAT I JUST COPY PASTED. I'll redo it at some point, pinky swear :) - else if (ent.Comp.DamageType == "Eye" - && TryComp(args.Body, out BlindableComponent? blindComp) - && blindComp.EyeDamage > 0) - _blindableSystem.AdjustEyeDamage((args.Body, blindComp), -blindComp!.EyeDamage); - } - private void OnStepScreamComplete(Entity ent, ref SurgeryStepEvent args) { if (HasComp(args.Body)) diff --git a/Content.Shared/Body/Organ/DebrainedComponent.cs b/Content.Shared/Body/Organ/DebrainedComponent.cs index 12574bddcc3..c43f151cdef 100644 --- a/Content.Shared/Body/Organ/DebrainedComponent.cs +++ b/Content.Shared/Body/Organ/DebrainedComponent.cs @@ -4,4 +4,3 @@ namespace Content.Shared.Body.Organ; [RegisterComponent] public sealed partial class DebrainedComponent : Component; -// TODO: Add a timer to kill the entity if they don't get a new brain in time. diff --git a/Content.Shared/Body/Organ/OrganComponent.cs b/Content.Shared/Body/Organ/OrganComponent.cs index c7212cbec31..e964a2f47ac 100644 --- a/Content.Shared/Body/Organ/OrganComponent.cs +++ b/Content.Shared/Body/Organ/OrganComponent.cs @@ -15,6 +15,13 @@ public sealed partial class OrganComponent : Component, ISurgeryToolComponent [DataField, AutoNetworkedField] public EntityUid? Body; + /// + /// Relevant body this organ originally belonged to. + /// /// FOR WHATEVER FUCKING REASON AUTONETWORKING THIS CRASHES GIBTEST AAAAAAAAAAAAAAA + /// + [DataField] + public EntityUid? OriginalBody; + /// /// Shitcodey solution to not being able to know what name corresponds to each organ's slot ID /// without referencing the prototype or hardcoding. diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs index f309cc238c6..78e24b12c36 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Body.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Body.cs @@ -372,6 +372,11 @@ public virtual HashSet GibPart( if (part.Body is { } bodyEnt) { + if (IsPartRoot(bodyEnt, partId, part: part)) + return gibs; + + ChangeSlotState((partId, part), true); + RemovePartChildren((partId, part), bodyEnt); foreach (var organ in GetPartOrgans(partId, part)) { diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs index e006d0feeb2..92b67cca173 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Organs.cs @@ -3,6 +3,7 @@ using Content.Shared.Body.Events; using Content.Shared.Body.Organ; using Content.Shared.Body.Part; +using Content.Shared.Damage; using Robust.Shared.Containers; namespace Content.Shared.Body.Systems; @@ -20,6 +21,7 @@ private void AddOrgan( if (organEnt.Comp.Body is not null) { + organEnt.Comp.OriginalBody = organEnt.Comp.Body; var addedInBodyEv = new OrganAddedToBodyEvent(bodyUid, parentPartUid); RaiseLocalEvent(organEnt, ref addedInBodyEv); } @@ -38,6 +40,10 @@ private void RemoveOrgan(Entity organEnt, EntityUid parentPartUi RaiseLocalEvent(organEnt, ref removedInBodyEv); } + if (TryComp(parentPartUid, out DamageableComponent? damageable) + && damageable.TotalDamage > 200) + TrySetOrganUsed(organEnt, true, organEnt.Comp); + organEnt.Comp.Body = null; Dirty(organEnt, organEnt.Comp); } @@ -216,10 +222,10 @@ public bool TryGetBodyOrganComponents( public bool TrySetOrganUsed(EntityUid organId, bool used, OrganComponent? organ = null) { if (!Resolve(organId, ref organ) - || organ.Used == true) + || organ.Used == used) return false; - organ.Used = true; + organ.Used = used; Dirty(organId, organ); return true; } diff --git a/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs b/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs index 50b9fb8c07e..1a8f91acad2 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.PartAppearance.cs @@ -26,15 +26,17 @@ private void InitializePartAppearances() private void OnPartAppearanceStartup(EntityUid uid, BodyPartAppearanceComponent component, ComponentStartup args) { - if (!TryComp(uid, out BodyPartComponent? part)) + if (!TryComp(uid, out BodyPartComponent? part) + || part.ToHumanoidLayers() is not { } relevantLayer) + return; if (part.OriginalBody == null || TerminatingOrDeleted(part.OriginalBody.Value) - || !TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance) - || part.ToHumanoidLayers() is not { } relevantLayer) + || !TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance)) { component.ID = part.BaseLayerId; + component.Type = relevantLayer; return; } @@ -169,7 +171,7 @@ protected void UpdateAppearance(EntityUid target, _humanoid.SetBaseLayerColor(target, component.Type, component.Color, true, bodyAppearance); _humanoid.SetLayerVisibility(target, component.Type, true, true, bodyAppearance); - + foreach (var (visualLayer, markingList) in component.Markings) { _humanoid.SetLayerVisibility(target, visualLayer, true, true, bodyAppearance); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs index be03fa6f404..2c6d128f63a 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Parts.cs @@ -275,7 +275,6 @@ private void OnPartEnableChanged(Entity partEnt, ref BodyPart else DisablePart(partEnt); } - private void EnablePart(Entity partEnt) { if (!TryComp(partEnt.Comp.Body, out BodyComponent? body)) @@ -566,6 +565,18 @@ public bool AttachPartToRoot( && Containers.Insert(partId, body.RootContainer); } + /// + /// Returns true if this parentId supports attaching a new part to the specified slot. + /// + public bool CanAttachToSlot( + EntityUid parentId, + string slotId, + BodyPartComponent? parentPart = null) + { + return Resolve(parentId, ref parentPart, logMissing: false) + && parentPart.Children.ContainsKey(slotId); + } + #endregion #region Attach/Detach diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 4d08735d810..b944eabdecc 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -30,7 +30,7 @@ public sealed class DamageableSystem : EntitySystem private EntityQuery _appearanceQuery; private EntityQuery _damageableQuery; private EntityQuery _mindContainerQuery; - private EntityQuery _targetingQuery; + public override void Initialize() { SubscribeLocalEvent(DamageableInit); @@ -42,7 +42,6 @@ public override void Initialize() _appearanceQuery = GetEntityQuery(); _damageableQuery = GetEntityQuery(); _mindContainerQuery = GetEntityQuery(); - _targetingQuery = GetEntityQuery(); } /// diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index 97f63262dbc..878e8a0c721 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -195,10 +195,7 @@ public void SetSlotStatus(EntityUid uid, string slotName, bool isDisabled, Inven _transform.AttachToGridOrMap(entityUid, transform); _randomHelper.RandomOffset(entityUid, 0.5f); } - //_containerSystem.ShutdownContainer(container); } - //else - //_containerSystem.EnsureContainer(uid, slotName); slot.Disabled = isDisabled; break; } diff --git a/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs index fb51ab5b060..1ad5025480b 100644 --- a/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs +++ b/Content.Shared/Medical/Surgery/Conditions/SurgeryPartRemovedConditionComponent.cs @@ -6,9 +6,15 @@ namespace Content.Shared.Medical.Surgery.Conditions; [RegisterComponent, NetworkedComponent] public sealed partial class SurgeryPartRemovedConditionComponent : Component { + /// + /// Requires that the parent part can attach a new part to this slot. + /// + [DataField(required: true)] + public string Connection = string.Empty; + [DataField] public BodyPartType Part; [DataField] public BodyPartSymmetry? Symmetry; -} \ No newline at end of file +} diff --git a/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs index 0686bf53095..2027c525d46 100644 --- a/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs @@ -420,6 +420,12 @@ private void OnAddOrganStep(Entity ent, ref Surger && _body.InsertOrgan(args.Part, tool, insertedOrgan.SlotId, partComp, insertedOrgan)) { EnsureComp(tool); + if (_body.TrySetOrganUsed(tool, true, insertedOrgan) + && insertedOrgan.OriginalBody != args.Body) + { + var ev = new SurgeryStepDamageChangeEvent(args.User, args.Body, args.Part, ent); + RaiseLocalEvent(ent, ref ev); + } break; } } diff --git a/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs b/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs index d7b049b0245..7fa0f94525e 100644 --- a/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs +++ b/Content.Shared/Medical/Surgery/SharedSurgerySystem.cs @@ -171,6 +171,12 @@ private void OnOrganConditionValid(Entity ent, r private void OnPartRemovedConditionValid(Entity ent, ref SurgeryValidEvent args) { + if (!_body.CanAttachToSlot(args.Part, ent.Comp.Connection)) + { + args.Cancelled = true; + return; + } + var results = _body.GetBodyChildrenOfType(args.Body, ent.Comp.Part, symmetry: ent.Comp.Symmetry); if (results is not { } || !results.Any()) return; diff --git a/Content.Shared/Medical/Surgery/SurgeryStepDamageChangeEvent.cs b/Content.Shared/Medical/Surgery/SurgeryStepDamageChangeEvent.cs new file mode 100644 index 00000000000..e8f0a34cde3 --- /dev/null +++ b/Content.Shared/Medical/Surgery/SurgeryStepDamageChangeEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.Damage; + +namespace Content.Shared.Medical.Surgery; + +/// +/// Raised on the target entity. +/// +[ByRefEvent] +public record struct SurgeryStepDamageChangeEvent(EntityUid User, EntityUid Body, EntityUid Part, EntityUid Step); diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 44369ffe73c..619ceebe19d 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -41,6 +41,7 @@ - state: lung-l - state: lung-r - type: Organ + slotId: lungs - type: Lung - type: Metabolizer removeEmpty: true @@ -70,6 +71,7 @@ - type: Sprite state: stomach - type: Organ + slotId: stomach - type: SolutionContainerManager solutions: stomach: @@ -107,6 +109,8 @@ - type: Sprite state: liver - type: Organ + slotId: liver + - type: Liver - type: Metabolizer maxReagents: 1 metabolizerTypes: [ Animal ] @@ -123,6 +127,8 @@ - type: Sprite state: heart-on - type: Organ + slotId: heart + - type: Heart - type: Metabolizer maxReagents: 2 metabolizerTypes: [ Animal ] @@ -142,6 +148,7 @@ - state: kidney-l - state: kidney-r - type: Organ + slotId: kidneys - type: Metabolizer maxReagents: 5 metabolizerTypes: [ Animal ] diff --git a/Resources/Prototypes/Body/Organs/Animal/slimes.yml b/Resources/Prototypes/Body/Organs/Animal/slimes.yml index f1a3d47e667..baa6674a471 100644 --- a/Resources/Prototypes/Body/Organs/Animal/slimes.yml +++ b/Resources/Prototypes/Body/Organs/Animal/slimes.yml @@ -8,6 +8,8 @@ sprite: Mobs/Species/Slime/organs.rsi state: brain-slime - type: Stomach + - type: Organ + slotId: core - type: Metabolizer maxReagents: 3 metabolizerTypes: [ Slime ] @@ -38,6 +40,8 @@ - state: lung-r-slime - type: Lung alert: LowNitrogen + - type: Organ + slotId: lungs - type: Metabolizer removeEmpty: true solutionOnBody: false diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 29ca393d137..ad5849a9731 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -36,6 +36,8 @@ state: stomach - type: Stomach updateInterval: 1.5 + - type: Organ + slotId: stomach - type: SolutionContainerManager solutions: stomach: @@ -59,6 +61,8 @@ - state: lung-l - state: lung-r - type: Lung + - type: Organ + slotId: lungs - type: Metabolizer updateInterval: 1.5 removeEmpty: true @@ -91,6 +95,9 @@ components: - type: Sprite state: heart-on + - type: Heart + - type: Organ + slotId: heart - type: Metabolizer updateInterval: 1.5 maxReagents: 2 @@ -109,6 +116,9 @@ components: - type: Sprite state: liver + - type: Liver + - type: Organ + slotId: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. updateInterval: 1.5 maxReagents: 1 @@ -145,6 +155,9 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Eyes + - type: Organ + slotId: eyes - type: entity id: OrganArachnidTongue diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index 6442ff3ee22..79e28e4cf40 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -34,6 +34,9 @@ - type: Sprite sprite: Mobs/Species/Diona/organs.rsi state: brain + - type: Brain + - type: Organ + slotId: brain - type: SolutionContainerManager solutions: organ: @@ -60,6 +63,8 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Eyes + - type: entity id: OrganDionaStomach @@ -69,6 +74,8 @@ components: - type: Sprite state: stomach + - type: Organ + slotId: stomach - type: SolutionContainerManager solutions: stomach: @@ -104,6 +111,8 @@ - state: lung-l - state: lung-r - type: Lung + - type: Organ + slotId: lungs - type: Metabolizer removeEmpty: true solutionOnBody: false diff --git a/Resources/Prototypes/Body/Organs/ipc.yml b/Resources/Prototypes/Body/Organs/ipc.yml index bc8d6c827ca..24e98bfa55c 100644 --- a/Resources/Prototypes/Body/Organs/ipc.yml +++ b/Resources/Prototypes/Body/Organs/ipc.yml @@ -28,6 +28,8 @@ - state: eyeball-l - state: eyeball-r - type: Organ + slotId: eyes + - type: Eyes - type: entity id: OrganIPCTongue @@ -48,6 +50,7 @@ - type: Sprite state: ears - type: Organ + - type: Ears - type: entity id: OrganIPCPump @@ -58,6 +61,8 @@ - type: Sprite state: heart-on - type: Organ + slotId: heart + - type: Heart # The heart 'metabolizes' medicines and poisons that aren't filtered out by other organs. # This is done because these chemicals need to have some effect even if they aren't being filtered out of your body. # You're technically 'immune to poison' without a heart, but.. uhh, you'll have bigger problems on your hands. diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml index d1c9c164f02..418c492d61b 100644 --- a/Resources/Prototypes/Body/Organs/moth.yml +++ b/Resources/Prototypes/Body/Organs/moth.yml @@ -1,5 +1,6 @@ - type: entity id: OrganMothStomach + name: moth stomach parent: [OrganAnimalStomach, OrganHumanStomach] categories: [ HideSpawnMenu ] components: diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml index 5b908e75f48..2a3c0d2837c 100644 --- a/Resources/Prototypes/Body/Organs/slime.yml +++ b/Resources/Prototypes/Body/Organs/slime.yml @@ -8,6 +8,8 @@ sprite: Mobs/Species/Slime/organs.rsi state: brain-slime - type: Stomach + - type: Organ + slotId: core - type: Metabolizer maxReagents: 6 metabolizerTypes: [ Slime ] @@ -46,6 +48,8 @@ layers: - state: lung-l-slime - state: lung-r-slime + - type: Organ + slotId: lungs - type: Lung alert: LowNitrogen - type: Metabolizer diff --git a/Resources/Prototypes/Body/Organs/vox.yml b/Resources/Prototypes/Body/Organs/vox.yml index 1b4d12116f8..c5355af6b09 100644 --- a/Resources/Prototypes/Body/Organs/vox.yml +++ b/Resources/Prototypes/Body/Organs/vox.yml @@ -1,5 +1,6 @@ - type: entity id: OrganVoxLungs + name: vox lungs parent: OrganHumanLungs suffix: "vox" components: diff --git a/Resources/Prototypes/Body/Parts/animal.yml b/Resources/Prototypes/Body/Parts/animal.yml index abd34c0ef5a..bc3d4b935ce 100644 --- a/Resources/Prototypes/Body/Parts/animal.yml +++ b/Resources/Prototypes/Body/Parts/animal.yml @@ -94,3 +94,13 @@ - ReagentId: Blood Quantity: 20 +# Monkey head for borging/transplanting pun pun +- type: entity + parent: [PartAnimal, BaseHead] + id: HeadAnimal + name: animal head + categories: [ HideSpawnMenu ] + components: + - type: Sprite + layers: + - state: head_m \ No newline at end of file diff --git a/Resources/Prototypes/Body/Parts/silicon.yml b/Resources/Prototypes/Body/Parts/silicon.yml index 57cd1f02cf4..3208280db7d 100644 --- a/Resources/Prototypes/Body/Parts/silicon.yml +++ b/Resources/Prototypes/Body/Parts/silicon.yml @@ -25,6 +25,12 @@ - type: GuideHelp guides: - Cyborgs + - type: SurgeryTool + startSound: + path: /Audio/Medical/Surgery/organ1.ogg + endSound: + path: /Audio/Medical/Surgery/organ2.ogg + - type: Gibbable - type: entity id: BaseBorgArmLeft @@ -33,7 +39,7 @@ abstract: true components: - type: BodyPart - partType: Hand + partType: Arm symmetry: Left - type: Tag tags: @@ -47,7 +53,7 @@ abstract: true components: - type: BodyPart - partType: Hand + partType: Arm symmetry: Right - type: Tag tags: @@ -67,6 +73,7 @@ tags: - Trash - BorgLeg + - type: MovementBodyPart - type: entity id: BaseBorgLegRight @@ -81,6 +88,7 @@ tags: - Trash - BorgLeg + - type: MovementBodyPart - type: entity id: BaseBorgHead diff --git a/Resources/Prototypes/Body/Prototypes/arachnid.yml b/Resources/Prototypes/Body/Prototypes/arachnid.yml index 97af67933cb..880b5add037 100644 --- a/Resources/Prototypes/Body/Prototypes/arachnid.yml +++ b/Resources/Prototypes/Body/Prototypes/arachnid.yml @@ -23,6 +23,7 @@ - left arm - right leg - left leg + - head right arm: part: RightArmArachnid connections: diff --git a/Resources/Prototypes/Body/Prototypes/diona.yml b/Resources/Prototypes/Body/Prototypes/diona.yml index 12ca203988c..33a65bdc5c3 100644 --- a/Resources/Prototypes/Body/Prototypes/diona.yml +++ b/Resources/Prototypes/Body/Prototypes/diona.yml @@ -16,6 +16,7 @@ - left arm - right leg - left leg + - head organs: stomach: OrganDionaStomachNymph lungs: OrganDionaLungsNymph diff --git a/Resources/Prototypes/Body/Prototypes/dwarf.yml b/Resources/Prototypes/Body/Prototypes/dwarf.yml index 592492688b7..fb5a1753ae4 100644 --- a/Resources/Prototypes/Body/Prototypes/dwarf.yml +++ b/Resources/Prototypes/Body/Prototypes/dwarf.yml @@ -17,6 +17,7 @@ - left arm - right leg - left leg + - head organs: heart: OrganDwarfHeart lungs: OrganHumanLungs diff --git a/Resources/Prototypes/Body/Prototypes/gingerbread.yml b/Resources/Prototypes/Body/Prototypes/gingerbread.yml index d5355be6412..d7a5d7bc1c4 100644 --- a/Resources/Prototypes/Body/Prototypes/gingerbread.yml +++ b/Resources/Prototypes/Body/Prototypes/gingerbread.yml @@ -17,6 +17,7 @@ - left arm - right leg - left leg + - head organs: heart: OrganHumanHeart lungs: OrganHumanLungs diff --git a/Resources/Prototypes/Body/Prototypes/human.yml b/Resources/Prototypes/Body/Prototypes/human.yml index 7a0f3bb5a7b..b46e5049bbd 100644 --- a/Resources/Prototypes/Body/Prototypes/human.yml +++ b/Resources/Prototypes/Body/Prototypes/human.yml @@ -17,6 +17,7 @@ - left arm - right leg - left leg + - head organs: heart: OrganHumanHeart lungs: OrganHumanLungs diff --git a/Resources/Prototypes/Body/Prototypes/ipc.yml b/Resources/Prototypes/Body/Prototypes/ipc.yml index 6078ca7b405..56923550eb6 100644 --- a/Resources/Prototypes/Body/Prototypes/ipc.yml +++ b/Resources/Prototypes/Body/Prototypes/ipc.yml @@ -16,6 +16,7 @@ - left arm - right leg - left leg + - head organs: brain: PositronicBrain heart: OrganIPCPump diff --git a/Resources/Prototypes/Body/Prototypes/moth.yml b/Resources/Prototypes/Body/Prototypes/moth.yml index 7ebeda7fefa..5cf63a1499a 100644 --- a/Resources/Prototypes/Body/Prototypes/moth.yml +++ b/Resources/Prototypes/Body/Prototypes/moth.yml @@ -23,6 +23,7 @@ - left arm - right leg - left leg + - head right arm: part: RightArmMoth connections: diff --git a/Resources/Prototypes/Body/Prototypes/primate.yml b/Resources/Prototypes/Body/Prototypes/primate.yml index 2af9273be4c..4e73003b672 100644 --- a/Resources/Prototypes/Body/Prototypes/primate.yml +++ b/Resources/Prototypes/Body/Prototypes/primate.yml @@ -3,11 +3,19 @@ name: "primate" root: torso slots: + head: # Put pun pun into a humans body + part: HeadAnimal + connections: + - torso + organs: + brain: OrganHumanBrain + eyes: OrganHumanEyes torso: part: TorsoAnimal connections: - hands - legs + - head organs: lungs: OrganAnimalLungs stomach: OrganAnimalStomach diff --git a/Resources/Prototypes/Body/Prototypes/reptilian.yml b/Resources/Prototypes/Body/Prototypes/reptilian.yml index 1e9ebd54a48..97f9956b770 100644 --- a/Resources/Prototypes/Body/Prototypes/reptilian.yml +++ b/Resources/Prototypes/Body/Prototypes/reptilian.yml @@ -23,6 +23,7 @@ - left arm - right leg - left leg + - head right arm: part: RightArmReptilian connections: diff --git a/Resources/Prototypes/Body/Prototypes/shadowkin.yml b/Resources/Prototypes/Body/Prototypes/shadowkin.yml index 19c3f36de4b..1af8b0b8333 100644 --- a/Resources/Prototypes/Body/Prototypes/shadowkin.yml +++ b/Resources/Prototypes/Body/Prototypes/shadowkin.yml @@ -17,6 +17,7 @@ - left arm - right leg - left leg + - head organs: heart: OrganShadowkinHeart stomach: OrganShadowkinStomach @@ -45,4 +46,4 @@ right foot: part: RightFootShadowkin left foot: - part: LeftFootShadowkin \ No newline at end of file + part: LeftFootShadowkin diff --git a/Resources/Prototypes/Body/Prototypes/skeleton.yml b/Resources/Prototypes/Body/Prototypes/skeleton.yml index 16d08365610..998d01cc499 100644 --- a/Resources/Prototypes/Body/Prototypes/skeleton.yml +++ b/Resources/Prototypes/Body/Prototypes/skeleton.yml @@ -14,6 +14,7 @@ - left arm - right leg - left leg + - head right arm: part: RightArmSkeleton connections: diff --git a/Resources/Prototypes/Body/Prototypes/slime.yml b/Resources/Prototypes/Body/Prototypes/slime.yml index b57c5eceb44..df246bb0d23 100644 --- a/Resources/Prototypes/Body/Prototypes/slime.yml +++ b/Resources/Prototypes/Body/Prototypes/slime.yml @@ -14,6 +14,7 @@ - left arm - right leg - left leg + - head organs: core: SentientSlimeCore lungs: OrganSlimeLungs diff --git a/Resources/Prototypes/Body/Prototypes/vox.yml b/Resources/Prototypes/Body/Prototypes/vox.yml index 2a1f6d9dca7..42cbb7e0855 100644 --- a/Resources/Prototypes/Body/Prototypes/vox.yml +++ b/Resources/Prototypes/Body/Prototypes/vox.yml @@ -17,6 +17,7 @@ - left arm - right leg - left leg + - head organs: heart: OrganHumanHeart lungs: OrganVoxLungs diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 24947413d87..6155d20c5a4 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -569,7 +569,11 @@ - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning - + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui # Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures # The white duck is more akin to a pekin or call duck. @@ -651,6 +655,11 @@ - type: RandomBark barkType: chicken # Duh barkMultiplier: 0.7 + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity name: white duck #Quack @@ -906,6 +915,11 @@ prototype: AnimalHemocyanin - type: RandomBark barkType: crab + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity name: goat @@ -997,6 +1011,11 @@ - type: HTN rootTask: task: RuminantHostileCompound + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui # Note that we gotta make this bitch vomit someday when you feed it anthrax or sumthin. Needs to be a small item thief too and aggressive if attacked. - type: entity @@ -1212,9 +1231,8 @@ abstract: true components: - type: CombatMode - #- type: SurgeryTarget - # canOperate: false - #- type: Targeting + - type: SurgeryTarget + - type: Targeting - type: Inventory templateId: monkey speciesId: monkey @@ -1242,8 +1260,8 @@ interfaces: enum.StrippingUiKey.Key: type: StrippableBoundUserInterface - #enum.SurgeryUIKey.Key: - # type: SurgeryBui + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: Sprite drawdepth: Mobs layers: @@ -1748,6 +1766,11 @@ whitelist: types: - Landmine + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity parent: MobMouse @@ -2376,6 +2399,11 @@ - type: BloodSucker webRequired: true - type: Cocooner + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity name: tarantula diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 6138bc6e96f..b26269d0708 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -240,6 +240,11 @@ types: Slash: 12 Bloodloss: 5 + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity id: MobSharkSalvage diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index 022ae53289e..abe602037f4 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -127,6 +127,11 @@ understands: - TauCetiBasic - Mouse + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity id: MobRatKingBuff @@ -205,7 +210,11 @@ - map: [ "enum.DamageStateVisualLayers.BaseUnshaded"] state: eyes shader: unshaded - + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: SpriteMovement movementLayers: movement: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml index dec2bd50bac..b45cbf33afc 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml @@ -113,6 +113,11 @@ speechSounds: Slime - type: TypingIndicator proto: slime + - type: SurgeryTarget + - type: UserInterface + interfaces: + enum.SurgeryUIKey.Key: + type: SurgeryBui - type: entity name: basic slime diff --git a/Resources/Prototypes/Entities/Surgery/surgeries.yml b/Resources/Prototypes/Entities/Surgery/surgeries.yml index 9f033333e4f..43d8adfd6ed 100644 --- a/Resources/Prototypes/Entities/Surgery/surgeries.yml +++ b/Resources/Prototypes/Entities/Surgery/surgeries.yml @@ -69,13 +69,14 @@ categories: [ HideSpawnMenu ] components: - type: Surgery - #requirement: SurgeryOpenIncision + requirement: SurgeryOpenIncision steps: - SurgeryStepInsertFeature - SurgeryStepSealWounds - type: SurgeryPartCondition part: Torso - type: SurgeryPartRemovedCondition + connection: head part: Head - type: entity @@ -92,6 +93,7 @@ - type: SurgeryPartCondition part: Torso - type: SurgeryPartRemovedCondition + connection: left arm part: Arm symmetry: Left @@ -109,6 +111,7 @@ - type: SurgeryPartCondition part: Torso - type: SurgeryPartRemovedCondition + connection: right arm part: Arm symmetry: Right @@ -126,6 +129,7 @@ - type: SurgeryPartCondition part: Torso - type: SurgeryPartRemovedCondition + connection: left leg part: Leg symmetry: Left @@ -143,6 +147,7 @@ - type: SurgeryPartCondition part: Torso - type: SurgeryPartRemovedCondition + connection: right leg part: Leg symmetry: Right @@ -161,6 +166,7 @@ part: Arm symmetry: Left - type: SurgeryPartRemovedCondition + connection: left hand part: Hand symmetry: Left @@ -179,6 +185,7 @@ part: Arm symmetry: Right - type: SurgeryPartRemovedCondition + connection: right hand part: Hand symmetry: Right @@ -197,6 +204,7 @@ part: Leg symmetry: Left - type: SurgeryPartRemovedCondition + connection: left foot part: Foot symmetry: Left @@ -215,9 +223,66 @@ part: Leg symmetry: Right - type: SurgeryPartRemovedCondition + connection: right foot part: Foot symmetry: Right +# Surgery for animals - They have a single legs/hands entity. + +- type: entity + parent: SurgeryBase + id: SurgeryAttachLegs + name: Attach Legs + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenIncision + steps: + - SurgeryStepInsertFeature + - SurgeryStepSealWounds + - type: SurgeryPartCondition + part: Torso + - type: SurgeryPartRemovedCondition + connection: legs + part: Leg + symmetry: None + +- type: entity + parent: SurgeryBase + id: SurgeryAttachHands + name: Attach Hands + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenIncision + steps: + - SurgeryStepInsertFeature + - SurgeryStepSealWounds + - type: SurgeryPartCondition + part: Torso + - type: SurgeryPartRemovedCondition + connection: hands + part: Hand + symmetry: Left # shitcode i guess because of ui icons + +- type: entity + parent: SurgeryBase + id: SurgeryAttachFeet + name: Attach Feet + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenIncision + steps: + - SurgeryStepInsertFeature + - SurgeryStepSealWounds + - type: SurgeryPartCondition + part: Torso + - type: SurgeryPartRemovedCondition + connection: feet + part: Foot + symmetry: None + #- type: entity # parent: SurgeryBase # id: SurgeryAlienEmbryoRemoval @@ -432,6 +497,44 @@ inverse: true reattaching: true +- type: entity + parent: SurgeryBase + id: SurgeryRemoveStomach + name: Remove Stomach + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenRibcage + steps: + - SurgeryStepSawBones + - SurgeryStepClampInternalBleeders + - SurgeryStepRemoveOrgan + - type: SurgeryPartCondition + part: Torso + - type: SurgeryOrganCondition + organ: + - type: Stomach + +- type: entity + parent: SurgeryBase + id: SurgeryInsertStomach + name: Insert Stomach + categories: [ HideSpawnMenu ] + components: + - type: Surgery + requirement: SurgeryOpenRibcage + steps: + - SurgeryStepSawBones + - SurgeryStepInsertStomach + - SurgeryStepSealOrganWound + - type: SurgeryPartCondition + part: Torso + - type: SurgeryOrganCondition + organ: + - type: Stomach + inverse: true + reattaching: true + - type: entity parent: SurgeryBase id: SurgeryRemoveEyes diff --git a/Resources/Prototypes/Entities/Surgery/surgery_steps.yml b/Resources/Prototypes/Entities/Surgery/surgery_steps.yml index 434c06f35b5..b157e6425d5 100644 --- a/Resources/Prototypes/Entities/Surgery/surgery_steps.yml +++ b/Resources/Prototypes/Entities/Surgery/surgery_steps.yml @@ -467,6 +467,13 @@ damageType: Rot isConsumable: true +# Doesn't serve much of a purpose right now. Just here for completeness-sake. +- type: entity + parent: SurgeryStepInsertOrgan + id: SurgeryStepInsertStomach + name: Add stomach + categories: [ HideSpawnMenu ] + - type: entity parent: SurgeryStepBase id: SurgeryStepSealOrganWound From eb0121fa3760385680c4351f7f1e6627413d1f07 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 04:03:34 +0000 Subject: [PATCH 024/182] Automatic Changelog Update (#1240) --- Resources/Changelog/Changelog.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1b16173579f..390188b891f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7940,3 +7940,28 @@ Entries: id: 6525 time: '2024-11-18T02:20:45.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1234 +- author: gluesniffler + changes: + - type: Add + message: You can now perform surgery as a monke. Rejoice. + - type: Add + message: >- + You can perform surgery on a lot of animals now, I missed a lot of them + so just ask if you want any particular critter to get it. + - type: Tweak + message: Entities now perish after 60 seconds of losing their heart and/or brain. + - type: Fix + message: Entities properly take asphyxiation damage after losing their brain. + - type: Fix + message: Torsos being gibbable, which would break surgery or just about anything. + - type: Fix + message: >- + Items not being removed from their respective slots if the parts were + gibbed rather than dropped. + - type: Fix + message: Animal organs not being usable properly in surgeries + - type: Fix + message: Cyborg limbs are now usable as pseudo-peg arm/legs. + id: 6526 + time: '2024-11-18T04:03:05.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1240 From aec89a56d6406264fc64275bbedeae2ada34ae08 Mon Sep 17 00:00:00 2001 From: Skubman Date: Mon, 18 Nov 2024 12:29:14 +0800 Subject: [PATCH 025/182] Fix Self-Aware Crashing Client (#1247) # Description Quick fix to prevent the Self-Aware trait from crashing the client of a player when examining their character's health. [`HealthExaminableSystem.CreateMarkupSelfAware`](https://github.com/Simple-Station/Einstein-Engines/blob/6945e3027bc14eac1de0099d30f8f35b19a3034e/Content.Shared/HealthExaminable/HealthExaminableSystem.cs#L119) attempts to access the `AnalyzableTypes` and `DetectableGroups` data fields from [`SelfAwareComponent`](https://github.com/Simple-Station/Einstein-Engines/blob/6945e3027bc14eac1de0099d30f8f35b19a3034e/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs), but since they are only initialized in the server and `null` in the client, the client crashes. I believe this could be related to the recent trait overhauls, but not sure. I just fixed it by adding `AutoNetworkedField` to those fields to automatically propagate the initialized values. Other traits might have a similar bug to this. ## Changelog :cl: Skubman - fix: Examining yourself with the Self-Aware trait will no longer crash your game client. --- .../Traits/Assorted/Components/SelfAwareComponent.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs b/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs index fa2485ac488..fd721c214e3 100644 --- a/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs +++ b/Content.Shared/Traits/Assorted/Components/SelfAwareComponent.cs @@ -8,19 +8,19 @@ namespace Content.Shared.Traits.Assorted.Components; /// /// This is used for the Self-Aware trait to enhance the information received from HealthExaminableSystem. /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class SelfAwareComponent : Component { // // Damage types that an entity is able to precisely analyze like a health analyzer when they examine themselves. // - [DataField(required: true, customTypeSerializer:typeof(PrototypeIdHashSetSerializer))] + [DataField(required: true, customTypeSerializer:typeof(PrototypeIdHashSetSerializer)), AutoNetworkedField] public HashSet AnalyzableTypes = default!; // // Damage groups that an entity is able to detect the presence of when they examine themselves. // - [DataField(required: true, customTypeSerializer:typeof(PrototypeIdHashSetSerializer))] + [DataField(required: true, customTypeSerializer:typeof(PrototypeIdHashSetSerializer)), AutoNetworkedField] public HashSet DetectableGroups = default!; // From ddee61c6e04b33d2f4f4aff9eaeaf71d8d967f95 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 04:29:38 +0000 Subject: [PATCH 026/182] Automatic Changelog Update (#1247) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 390188b891f..01eb6d115f7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7965,3 +7965,12 @@ Entries: id: 6526 time: '2024-11-18T04:03:05.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1240 +- author: Skubman + changes: + - type: Fix + message: >- + Examining yourself with the Self-Aware trait will no longer crash your + game client. + id: 6527 + time: '2024-11-18T04:29:14.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1247 From bb13e394b0360d39619645b3134df71387ffba32 Mon Sep 17 00:00:00 2001 From: Skubman Date: Mon, 18 Nov 2024 23:15:56 +0800 Subject: [PATCH 027/182] Shitmed Surgery Popups (#1241) # Description Adds popups for surgery steps in Shitmed that every player within PVS range can see. This allows other players to see if the correct procedure is being performed. This PR also includes locale text for the new procedures and steps in #1240. ## Media **Remove Brain / Insert Brain** https://github.com/user-attachments/assets/ac20afa1-df74-48ab-b1d5-2e9a273dfba2
See more **Amputate Right Arm** https://github.com/user-attachments/assets/17f78683-6d3b-44ee-aea3-bb6987844fdc **Attach Right Arm** https://github.com/user-attachments/assets/584d4da2-d8b0-4c82-a323-26636e7fa4b8
## Changelog :cl: Skubman - add: Surgery step descriptions (like making an incision, removing/attaching limbs and organs) are now shown as popups to everyone in range upon the start of the step. This makes it clear which surgical procedure is being done and to which body part. No more stealthy brain-stealing in front of everyone! --- .../Surgery/SharedSurgerySystem.Steps.cs | 17 +++++- .../Locale/en-US/surgery/surgery-popup.ftl | 52 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Resources/Locale/en-US/surgery/surgery-popup.ftl diff --git a/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs index 2027c525d46..2bde1f4c868 100644 --- a/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/Medical/Surgery/SharedSurgerySystem.Steps.cs @@ -9,6 +9,7 @@ using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.DoAfter; +using Content.Shared.IdentityManagement; using Content.Shared.Medical.Surgery.Conditions; using Content.Shared.Medical.Surgery.Effects.Step; using Content.Shared.Medical.Surgery.Steps; @@ -628,7 +629,21 @@ private void OnSurgeryTargetStepChosen(Entity ent, ref S BreakOnHandChange = true, }; - _doAfter.TryStartDoAfter(doAfter); + if (_doAfter.TryStartDoAfter(doAfter)) + { + var userName = Identity.Entity(user, EntityManager); + var targetName = Identity.Entity(ent.Owner, EntityManager); + + var locName = $"surgery-popup-procedure-{args.Surgery}-step-{args.Step}"; + var locResult = Loc.GetString(locName, + ("user", userName), ("target", targetName), ("part", part)); + + if (locResult == locName) + locResult = Loc.GetString($"surgery-popup-step-{args.Step}", + ("user", userName), ("target", targetName), ("part", part)); + + _popup.PopupEntity(locResult, user); + } } private (Entity Surgery, int Step)? GetNextStep(EntityUid body, EntityUid part, Entity surgery, List requirements) diff --git a/Resources/Locale/en-US/surgery/surgery-popup.ftl b/Resources/Locale/en-US/surgery/surgery-popup.ftl new file mode 100644 index 00000000000..8ded2fcaec9 --- /dev/null +++ b/Resources/Locale/en-US/surgery/surgery-popup.ftl @@ -0,0 +1,52 @@ +surgery-popup-step-SurgeryStepOpenIncisionScalpel = {$user} is making an incision on {$target}'s {$part}. +surgery-popup-step-SurgeryStepClampBleeders = {$user} is clamping the bleeders on {$target}'s {$part}. +surgery-popup-step-SurgeryStepRetractSkin = {$user} is retracting the skin on {$target}'s {$part}. +surgery-popup-step-SurgeryStepSawBones = {$user} is sawing through the bones on {$target}'s {$part}. +surgery-popup-step-SurgeryStepPriseOpenBones = {$user} is prising the bones open on {$target}'s {$part}. +surgery-popup-step-SurgeryStepCloseBones = {$user} is closing the bones on {$target}'s {$part}. +surgery-popup-step-SurgeryStepMendRibcage = {$user} is mending the ribcage on {$target}'s {$part}. +surgery-popup-step-SurgeryStepCloseIncision = {$user} is closing the incision on {$target}'s {$part}. + +surgery-popup-step-SurgeryStepInsertFeature = {$user} is inserting something onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachHead-step-SurgeryStepInsertFeature = {$user} is attaching a head onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachLeftArm-step-SurgeryStepInsertFeature = {$user} is attaching a left arm onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachRightArm-step-SurgeryStepInsertFeature = {$user} is attaching a right arm onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachLeftLeg-step-SurgeryStepInsertFeature = {$user} is attaching a left leg onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachRightLeg-step-SurgeryStepInsertFeature = {$user} is attaching a right leg onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachLeftHand-step-SurgeryStepInsertFeature = {$user} is attaching a left hand onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachRightHand-step-SurgeryStepInsertFeature = {$user} is attaching a right hand onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachLeftFoot-step-SurgeryStepInsertFeature = {$user} is attaching a left foot onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachRightFoot-step-SurgeryStepInsertFeature = {$user} is attaching a right foot onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachLegs-step-SurgeryStepInsertFeature = {$user} is attaching legs onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachHands-step-SurgeryStepInsertFeature = {$user} is attaching hands onto {$target}'s {$part}! +surgery-popup-procedure-SurgeryAttachFeet-step-SurgeryStepInsertFeature = {$user} is attaching feet onto {$target}'s {$part}! + +surgery-popup-step-SurgeryStepSealWounds = {$user} is sealing the wounds on {$target}'s {$part}. +surgery-popup-step-SurgeryStepSawFeature = {$user} is sawing through the bones on {$target}'s {$part}. +surgery-popup-step-SurgeryStepClampInternalBleeders = {$user} is clamping the internal bleeders on {$target}'s {$part}. +surgery-popup-step-SurgeryStepRemoveFeature = {$user} is amputating {$target}'s {$part}! +surgery-popup-step-SurgeryStepCarefulIncisionScalpel = {$user} is carefully making an incision on {$target}'s {$part}. +surgery-popup-step-SurgeryStepRepairBruteTissue = {$user} is repairing the damaged tissues on {$target}'s {$part}! +surgery-popup-step-SurgeryStepRepairBurnTissue = {$user} is repairing the burnt tissues on {$target}'s {$part}! +surgery-popup-step-SurgeryStepSealTendWound = {$user} is sealing the wounds on {$target}'s {$part}. +surgery-popup-step-SurgeryStepInsertItem = {$user} is inserting something into {$target}'s {$part}! +surgery-popup-step-SurgeryStepRemoveItem = {$user} is removing something from {$target}'s {$part}! + +surgery-popup-step-SurgeryStepRemoveOrgan = {$user} is removing an organ from {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertOrgan = {$user} is inserting an organ into {$target}'s {$part}! + +surgery-popup-procedure-SurgeryRemoveBrain-step-SurgeryStepRemoveOrgan = {$user} is removing the brain from {$target}'s {$part}! +surgery-popup-procedure-SurgeryRemoveHeart-step-SurgeryStepRemoveOrgan = {$user} is removing the heart from {$target}'s {$part}! +surgery-popup-procedure-SurgeryRemoveLiver-step-SurgeryStepRemoveOrgan = {$user} is removing the liver from {$target}'s {$part}! +surgery-popup-procedure-SurgeryRemoveLungs-step-SurgeryStepRemoveOrgan = {$user} is removing the lungs from {$target}'s {$part}! +surgery-popup-procedure-SurgeryRemoveEyes-step-SurgeryStepRemoveOrgan = {$user} is removing the eyes from {$target}'s {$part}! +surgery-popup-procedure-SurgeryRemoveStomach-step-SurgeryStepRemoveOrgan = {$user} is removing the stomach from {$target}'s {$part}! + +surgery-popup-procedure-SurgeryInsertBrain-step-SurgeryStepInsertOrgan = {$user} is inserting a brain into {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertLungs = {$user} is inserting lungs into {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertLiver = {$user} is inserting a liver into {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertEyes = {$user} is inserting eyes into {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertHeart = {$user} is inserting a heart into {$target}'s {$part}! +surgery-popup-step-SurgeryStepInsertStomach = {$user} is inserting a stomach into {$target}'s {$part}! + +surgery-popup-step-SurgeryStepSealOrganWound = {$user} is sealing the wounds on {$target}'s {$part}. From 59d26957c64c153dcef1f724b97de6937b5d68df Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Mon, 18 Nov 2024 11:16:12 -0400 Subject: [PATCH 028/182] AlertsComponentTest Fix (#1246) # Description Fixes the silly heisentest. --------- Co-authored-by: sleepyyapril --- .../Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs index 9f04660008c..ee2ddb2790c 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/Mobs/AlertsComponentTests.cs @@ -89,7 +89,7 @@ static AlertsUI FindAlertsUI(Control control) Assert.That(clientAlertsUI.AlertContainer.ChildCount, Is.GreaterThanOrEqualTo(2)); var alertControls = clientAlertsUI.AlertContainer.Children.Select(c => (AlertControl) c); var alertIDs = alertControls.Select(ac => ac.Alert.ID).ToArray(); - var expectedIDs = new[] { "HumanHealth", "Debug1", "Debug2" }; + var expectedIDs = new[] { "Debug1", "Debug2" }; Assert.That(alertIDs, Is.SupersetOf(expectedIDs)); }); @@ -106,7 +106,7 @@ await client.WaitAssertion(() => Assert.That(clientAlertsUI.AlertContainer.ChildCount, Is.GreaterThanOrEqualTo(1)); var alertControls = clientAlertsUI.AlertContainer.Children.Select(c => (AlertControl) c); var alertIDs = alertControls.Select(ac => ac.Alert.ID).ToArray(); - var expectedIDs = new[] { "HumanHealth", "Debug2" }; + var expectedIDs = new[] { "Debug2" }; Assert.That(alertIDs, Is.SupersetOf(expectedIDs)); }); From 4fe41eff5edd756aea6899e94f8637607dfec456 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 15:16:26 +0000 Subject: [PATCH 029/182] Automatic Changelog Update (#1241) --- Resources/Changelog/Changelog.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 01eb6d115f7..196f40ad93f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7974,3 +7974,15 @@ Entries: id: 6527 time: '2024-11-18T04:29:14.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1247 +- author: Skubman + changes: + - type: Add + message: >- + Surgery step descriptions (like making an incision, removing/attaching + limbs and organs) are now shown as popups to everyone in range upon the + start of the step. This makes it clear which surgical procedure is being + done and to which body part. No more stealthy brain-stealing in front of + everyone! + id: 6528 + time: '2024-11-18T15:15:56.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1241 From 709001726f0ee8f680089b162ecaac84f31505ff Mon Sep 17 00:00:00 2001 From: Skubman Date: Mon, 18 Nov 2024 23:19:09 +0800 Subject: [PATCH 030/182] Power Attack Stamina Update (#1238) # Description QoL updates to improve the stamina management experience with power attacks: - The stamina cost of an object's power attack can be revealed by examining its damage values. - Power attacks can't be done if your stamina is too low, so you can't accidentally stamcrit yourself with power attacks anymore. - **Nerf:** Power attacks now cost stamina even without hitting anything. - Prevent power attacks from showing a blue visual effect on the character who attacked due to stamina damage. ## Media **Gameplay** https://github.com/user-attachments/assets/f5031ce3-8303-475a-9c37-d8004ed55dbc **Damage Examine** ## Changelog :cl: Skubman - add: The stamina cost of an object's power attack can now be revealed by examining its damage values. - tweak: Power attacks can't be done if your stamina is too low, so you can't accidentally stamcrit yourself with power attacks anymore. - tweak: Power attacks now cost stamina even without hitting anything. - tweak: Prevent power attacks from showing a blue visual effect on the character who attacked due to stamina damage. --- Content.Server/Weapons/Melee/MeleeWeaponSystem.cs | 10 ++++++++++ .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 15 +++++++++++---- Resources/Locale/en-US/damage/damage-examine.ftl | 2 ++ Resources/Locale/en-US/weapons/melee/melee.ftl | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index 74e76f0dd50..a3719f8f397 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -22,6 +22,7 @@ using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Random; +using Robust.Shared.Utility; using System.Linq; using System.Numerics; using Content.Shared.Chat; @@ -60,6 +61,15 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + + if (component.HeavyStaminaCost != 0) + { + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( + Loc.GetString("damage-melee-heavy-stamina-cost", + ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); + args.Message.PushNewline(); + args.Message.AddMessage(staminaCostMarkup); + } } protected override bool ArcRaySuccessful(EntityUid targetUid, Vector2 position, Angle angle, Angle arcWidth, float range, MapId mapId, diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 72047666f8c..0be97e29b05 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -545,6 +545,17 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (targetMap.MapId != userXform.MapID) return false; + if (TryComp(user, out var stamina)) + { + if (stamina.CritThreshold - stamina.StaminaDamage <= component.HeavyStaminaCost) + { + PopupSystem.PopupClient(Loc.GetString("melee-heavy-no-stamina"), meleeUid, user); + return false; + } + + _stamina.TakeStaminaDamage(user, component.HeavyStaminaCost, stamina, visual: false); + } + var userPos = TransformSystem.GetWorldPosition(userXform); var direction = targetMap.Position - userPos; var distance = Math.Min(component.Range * component.HeavyRangeModifier, direction.Length()); @@ -670,10 +681,6 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU DoDamageEffect(targets, user, Transform(targets[0])); } - if (TryComp(user, out var stamina)) - _stamina.TakeStaminaDamage(user, component.HeavyStaminaCost, stamina); - - return true; } diff --git a/Resources/Locale/en-US/damage/damage-examine.ftl b/Resources/Locale/en-US/damage/damage-examine.ftl index 9e24d4d2f72..3a71fc72620 100644 --- a/Resources/Locale/en-US/damage/damage-examine.ftl +++ b/Resources/Locale/en-US/damage/damage-examine.ftl @@ -11,3 +11,5 @@ damage-throw = throw damage-examine = It does the following damage: damage-examine-type = It does the following [color=cyan]{$type}[/color] damage: damage-value = - [color=red]{$amount}[/color] units of [color=yellow]{$type}[/color]. + +damage-melee-heavy-stamina-cost = A [color=cyan]{$type}[/color] costs [color=orange]{$cost}[/color] [color=yellow]Stamina[/color]. diff --git a/Resources/Locale/en-US/weapons/melee/melee.ftl b/Resources/Locale/en-US/weapons/melee/melee.ftl index d3318ea2449..0b2ea7150cc 100644 --- a/Resources/Locale/en-US/weapons/melee/melee.ftl +++ b/Resources/Locale/en-US/weapons/melee/melee.ftl @@ -5,3 +5,5 @@ melee-balloon-pop = {CAPITALIZE(THE($balloon))} popped! # BatteryComponent melee-battery-examine = It has enough charge for [color={$color}]{$count}[/color] hits. + +melee-heavy-no-stamina = You are too tired to perform a power attack! From c0f813b98540588eccccf78a5e96957ea228fad6 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 15:19:36 +0000 Subject: [PATCH 031/182] Automatic Changelog Update (#1238) --- Resources/Changelog/Changelog.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 196f40ad93f..34b235f5151 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -7986,3 +7986,22 @@ Entries: id: 6528 time: '2024-11-18T15:15:56.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1241 +- author: Skubman + changes: + - type: Add + message: >- + The stamina cost of an object's power attack can now be revealed by + examining its damage values. + - type: Tweak + message: >- + Power attacks can't be done if your stamina is too low, so you can't + accidentally stamcrit yourself with power attacks anymore. + - type: Tweak + message: Power attacks now cost stamina even without hitting anything. + - type: Tweak + message: >- + Prevent power attacks from showing a blue visual effect on the character + who attacked due to stamina damage. + id: 6529 + time: '2024-11-18T15:19:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1238 From 114194affac8c622573b20e23aa14a559823ddc0 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 18 Nov 2024 17:07:31 -0500 Subject: [PATCH 032/182] Glimmer Wisps Mindbreak Their Victims (#1248) # Description Small oversight that Glimmer Wisps are generally described as drinking their victim's soul and obliterating their entire personhood. Which is fundamentally just mindbreaking said person. So this PR makes it so that Glimmer Wisps killing a psion also inflicts the Mindbroken condition on them. # Changelog :cl: - add: Glimmer Wisps now completely obliterate their victim's Personhood, inflicting the Mindbroken condition on them. --- Content.Server/LifeDrainer/LifeDrainerSystem.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Server/LifeDrainer/LifeDrainerSystem.cs b/Content.Server/LifeDrainer/LifeDrainerSystem.cs index 439a5dcf45f..c5955d78039 100644 --- a/Content.Server/LifeDrainer/LifeDrainerSystem.cs +++ b/Content.Server/LifeDrainer/LifeDrainerSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Abilities.Psionics; using Content.Server.Carrying; using Content.Server.NPC.Systems; using Content.Shared.ActionBlocker; @@ -27,6 +28,7 @@ public sealed class LifeDrainerSystem : EntitySystem [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly PsionicAbilitiesSystem _psionicAbilitiesSystem = default!; public override void Initialize() { @@ -88,6 +90,7 @@ private void OnDrain(Entity ent, ref LifeDrainDoAfterEvent _audio.PlayPvs(comp.FinishSound, uid); _damageable.TryChangeDamage(target, comp.Damage, true, origin: uid); + _psionicAbilitiesSystem.MindBreak(target); } public bool CanDrain(Entity ent, EntityUid target) From 6d6cbdf4ae0d42bedddac87046dd078a100ce07a Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 22:08:00 +0000 Subject: [PATCH 033/182] Automatic Changelog Update (#1248) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 34b235f5151..41662ed5dd3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8005,3 +8005,12 @@ Entries: id: 6529 time: '2024-11-18T15:19:10.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1238 +- author: VMSolidus + changes: + - type: Add + message: >- + Glimmer Wisps now completely obliterate their victim's Personhood, + inflicting the Mindbroken condition on them. + id: 6530 + time: '2024-11-18T22:07:31.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1248 From 6c213256d6dcb35954593af0e950db3a2cb07910 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 18 Nov 2024 17:08:35 -0500 Subject: [PATCH 034/182] The Great Loadout Reorganizing (#1230) # Description This was entirely too long overdue. I am reorganizing the entirety of all ingame loadouts, so that it is possible to see what jobs are actually missing loadout items. Every job in the game will have its own loadout tab, each of them all sharing the same organization hierarchy with *plainly visible blank spaces* that people can use to see what jobs are in need of having things added to them. Command category only contains Captain, Head of Personel, with space for Centcomm roles and Blueshield if we ever add those. Instead all of the "Department Specific Commands" are sorted with their respective departments. Which makes it really obvious if for instance there's an entire 2nd list of Head of Security drip... # TODO - [X] All of the Categories - [x] Localize the categories - [x] Make item groups for everything ## Organize Command - [x] Captain - [x] Head Of Personnel ## Organize Engineering - [x] atmos tech - [x] CE - [x] senior engineer - [x] station engineer - [x] tech assistant ## Organize Epistemics - [x] acolyte - [x] cataloger - [x] chaplain - [x] golemancer - [x] mystagogue - [x] mystic - [x] noviciate - [x] psionic mantis ## Organize Logistics - [x] cargo tech - [x] courier - [x] LO - [x] salvage ## Organize Medical - [x] chemist - [x] CMO - [x] doctor - [x] medical intern - [x] paramed - [x] senior physician ## Organize Security - [x] cadet - [x] corpsman - [x] detective - [x] HOS - [x] secoff - [x] senior officer - [x] warden ## Organize Service - [x] bartender - [x] botanist - [x] chef - [x] clown - [x] janitor - [x] lawyer - [x] mime - [x] musician - [x] reporter ## GUH - [x] Add literally everything we are missing - [x] Do literally all of the Job specific Item Groups

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

# Changelog :cl: - fix: Reorganized Loadouts so that all Jobs now have their own job specific tabs. The code for them has been thoroughly reorganized too, such that figuring out which jobs are missing crap is way easier to do. - add: Captain's Personal Weapon loadout category. Currently only contains a choice between the antique laser pistol, or a pulse pistol. Whichever choice is made will be used as a target for a traitor objective. --------- Signed-off-by: VMSolidus --- .../Locale/en-US/loadouts/categories.ftl | 72 +- .../Locale/en-US/loadouts/itemgroups.ftl | 774 ++++++++++- .../en-US/loadouts/jobs/engineering.ftl | 5 - .../loadouts/jobs/engineering/engineering.ftl | 22 + .../Locale/en-US/loadouts/jobs/medical.ftl | 3 - .../en-US/loadouts/jobs/medical/medical.ftl | 19 + Resources/Migrations/eeMigration.yml | 3 + .../Prototypes/Catalog/Fills/Items/belt.yml | 34 + .../Catalog/Fills/Lockers/heads.yml | 48 +- .../{ => Generic}/backpackGroups.yml | 4 +- .../{ => Generic}/eyesGroup.yml | 0 .../{ => Generic}/gloveGroup.yml | 0 .../{ => Generic}/headGroup.yml | 0 .../{ => Generic}/itemGroups.yml | 0 .../{ => Generic}/languageGroups.yml | 0 .../{ => Generic}/maskGroup.yml | 0 .../{ => Generic}/miscItemGroups.yml | 0 .../{ => Generic}/neckGroup.yml | 0 .../{ => Generic}/outerwearGroup.yml | 0 .../{ => Generic}/shoeGroup.yml | 0 .../Jobs/Command/captain.yml | 144 ++ .../Jobs/Command/commandUncategorized.yml | 78 ++ .../Jobs/Command/headOfPersonnel.yml | 125 ++ .../Engineering/atmosphericTechnician.yml | 94 ++ .../Jobs/Engineering/chiefEngineer.yml | 98 ++ .../Engineering/engineeringUncategorized.yml | 95 ++ .../Jobs/Engineering/seniorEngineer.yml | 80 ++ .../Jobs/Engineering/stationEngineer.yml | 68 + .../Jobs/Engineering/technicalAssistant.yml | 64 + .../Jobs/Epistemics/acolyte.yml | 64 + .../Jobs/Epistemics/cataloger.yml | 82 ++ .../Jobs/Epistemics/chaplain.yml | 97 ++ .../Jobs/Epistemics/golemancer.yml | 69 + .../Jobs/Epistemics/mystagogue.yml | 95 ++ .../Jobs/Epistemics/mystic.yml | 71 + .../Jobs/Epistemics/noviciate.yml | 65 + .../Jobs/Epistemics/psionicMantis.yml | 67 + .../Jobs/Epistemics/uncategorized.yml | 100 ++ .../Jobs/Logistics/cargoTechnician.yml | 69 + .../Jobs/Logistics/courier.yml | 65 + .../Jobs/Logistics/logisticsOfficer.yml | 77 ++ .../Jobs/Logistics/salvageSpecialist.yml | 82 ++ .../Jobs/Logistics/uncategorized.yml | 71 + .../Jobs/Medical/chemist.yml | 113 ++ .../Jobs/Medical/chiefMedicalOfficer.yml | 93 ++ .../Jobs/Medical/medicalDoctor.yml | 77 ++ .../Jobs/Medical/medicalIntern.yml | 69 + .../Jobs/Medical/paramedic.yml | 69 + .../Jobs/Medical/psychologist.yml | 83 ++ .../Jobs/Medical/seniorPhysician.yml | 75 ++ .../Medical/uncategorized.yml} | 126 +- .../Jobs/Security/cadet.yml | 65 + .../Jobs/Security/corpsman.yml | 81 ++ .../Jobs/Security/detective.yml | 69 + .../Jobs/Security/headOfSecurity.yml | 120 ++ .../Jobs/Security/securityOfficer.yml | 65 + .../Jobs/Security/seniorOfficer.yml | 68 + .../Security/uncategorized.yml} | 215 ++- .../Jobs/Security/warden.yml | 77 ++ .../Jobs/Service/bartender.yml | 96 ++ .../Jobs/Service/botanist.yml | 72 + .../CharacterItemGroups/Jobs/Service/chef.yml | 80 ++ .../Jobs/Service/clown.yml | 85 ++ .../Jobs/Service/janitor.yml | 71 + .../Jobs/Service/lawyer.yml | 81 ++ .../CharacterItemGroups/Jobs/Service/mime.yml | 77 ++ .../Service/musician.yml} | 63 +- .../Jobs/Service/reporter.yml | 71 + .../Jobs/Service/uncategorized.yml | 66 + .../Jobs/jobItemGroupTemplate.yml | 66 + .../CharacterItemGroups/cargoGroups.yml | 19 - .../CharacterItemGroups/engineeringGroups.yml | 39 - .../CharacterItemGroups/scienceGroups.yml | 144 -- .../CharacterItemGroups/serviceGroups.yml | 185 --- .../Prototypes/DeltaV/Objectives/traitor.yml | 3 + .../Entities/Clothing/Back/backpacks.yml | 10 + .../Objects/Specific/Medical/healing.yml | 40 + .../Weapons/Guns/Battery/battery_guns.yml | 11 +- .../Loadouts/Categories/categories.yml | 203 ++- .../Prototypes/Loadouts/Generic/backpacks.yml | 86 ++ .../Loadouts/Generic/duffelbags.yml | 80 ++ .../Loadouts/{ => Generic}/eyes.yml | 0 .../Loadouts/{ => Generic}/hands.yml | 0 .../Loadouts/{ => Generic}/head.yml | 0 .../Loadouts/{ => Generic}/items.yml | 0 .../Loadouts/{ => Generic}/mask.yml | 0 .../Loadouts/{ => Generic}/neck.yml | 0 .../Loadouts/{ => Generic}/outerClothing.yml | 0 .../Prototypes/Loadouts/Generic/satchels.yml | 93 ++ .../Loadouts/{ => Generic}/shoes.yml | 0 .../Loadouts/{ => Generic}/species.yml | 0 .../Loadouts/{ => Generic}/uniform.yml | 0 .../Loadouts/Jobs/Command/captain.yml | 492 +++++++ .../Loadouts/Jobs/Command/headOfPersonnel.yml | 409 ++++++ .../Loadouts/Jobs/Command/uncategorized.yml | 81 ++ .../Engineering/atmosphericTechnician.yml | 226 ++++ .../Jobs/Engineering/chiefEngineer.yml | 256 ++++ .../Jobs/Engineering/seniorEngineer.yml | 159 +++ .../Jobs/Engineering/stationEngineer.yml | 52 + .../Jobs/Engineering/technicalAssistant.yml | 26 + .../Jobs/Engineering/uncategorized.yml | 257 ++++ .../Loadouts/Jobs/Epistemics/acolyte.yml | 26 + .../Loadouts/Jobs/Epistemics/cataloger.yml | 163 +++ .../Loadouts/Jobs/Epistemics/chaplain.yml | 244 ++++ .../Loadouts/Jobs/Epistemics/golemancer.yml | 53 + .../Loadouts/Jobs/Epistemics/mystagogue.yml | 230 ++++ .../Loadouts/Jobs/Epistemics/mystic.yml | 66 + .../Loadouts/Jobs/Epistemics/noviciate.yml | 26 + .../Jobs/Epistemics/psionicMantis.yml | 40 + .../Jobs/Epistemics/uncategorized.yml | 271 ++++ .../Loadouts/Jobs/Heads/captain.yml | 148 --- .../Loadouts/Jobs/Heads/chiefEngineer.yml | 46 - .../Jobs/Heads/chiefMedicalOfficer.yml | 68 - .../Loadouts/Jobs/Heads/command.yml | 24 - .../Loadouts/Jobs/Heads/headOfPersonnel.yml | 116 -- .../Loadouts/Jobs/Heads/quarterMaster.yml | 71 - .../Loadouts/Jobs/Heads/researchDirector.yml | 101 -- .../Jobs/Logistics/cargoTechnician.yml | 52 + .../Loadouts/Jobs/Logistics/courier.yml | 26 + .../Jobs/Logistics/logisticsOfficer.yml | 107 ++ .../Jobs/Logistics/salvageSpecialist.yml | 108 ++ .../Loadouts/Jobs/Logistics/uncategorized.yml | 67 + .../Loadouts/Jobs/Medical/chemist.yml | 342 +++++ .../Jobs/Medical/chiefMedicalOfficer.yml | 214 +++ .../Loadouts/Jobs/Medical/medicalDoctor.yml | 105 ++ .../Loadouts/Jobs/Medical/medicalIntern.yml | 53 + .../Loadouts/Jobs/Medical/paramedic.yml | 53 + .../Loadouts/Jobs/Medical/psychologist.yml | 146 +++ .../Loadouts/Jobs/Medical/seniorPhysician.yml | 93 ++ .../Loadouts/Jobs/Medical/uncategorized.yml | 505 +++++++ .../Loadouts/Jobs/Security/cadet.yml | 26 + .../Loadouts/Jobs/Security/corpsman.yml | 133 ++ .../Loadouts/Jobs/Security/detective.yml | 53 + .../{Heads => Security}/headOfSecurity.yml | 257 ++-- .../Jobs/Security/securityOfficer.yml | 26 + .../Loadouts/Jobs/Security/seniorOfficer.yml | 53 + .../uncategorized.yml} | 1168 ++++++----------- .../Loadouts/Jobs/Security/warden.yml | 107 ++ .../Loadouts/Jobs/Service/bartender.yml | 232 ++++ .../Loadouts/Jobs/Service/botanist.yml | 81 ++ .../Prototypes/Loadouts/Jobs/Service/chef.yml | 149 +++ .../Loadouts/Jobs/Service/clown.yml | 164 +++ .../Loadouts/Jobs/Service/janitor.yml | 67 + .../Loadouts/Jobs/Service/lawyer.yml | 137 ++ .../Prototypes/Loadouts/Jobs/Service/mime.yml | 106 ++ .../Loadouts/Jobs/Service/musician.yml | 109 +- .../Loadouts/Jobs/Service/reporter.yml | 67 + .../Loadouts/Jobs/Service/uncategorized.yml | 72 + Resources/Prototypes/Loadouts/Jobs/cargo.yml | 72 - .../Prototypes/Loadouts/Jobs/engineering.yml | 194 --- .../Prototypes/Loadouts/Jobs/medical.yml | 632 --------- .../Prototypes/Loadouts/Jobs/science.yml | 713 ---------- .../Prototypes/Loadouts/Jobs/service.yml | 829 ------------ Resources/Prototypes/Loadouts/backpacks.yml | 268 ---- Resources/Prototypes/Loadouts/duffelbags.yml | 234 ---- Resources/Prototypes/Loadouts/satchels.yml | 247 ---- .../Objects/Specific/Medical/pills.yml | 40 + .../Objectives/stealTargetGroups.yml | 4 +- Resources/Prototypes/Objectives/traitor.yml | 28 +- .../Prototypes/Roles/Jobs/Command/captain.yml | 4 - .../Roles/Jobs/Command/head_of_personnel.yml | 3 - .../Engineering/atmospheric_technician.yml | 4 +- .../Roles/Jobs/Engineering/chief_engineer.yml | 2 - .../Jobs/Engineering/senior_engineer.yml | 1 - .../Prototypes/Roles/Jobs/Medical/chemist.yml | 2 - .../Jobs/Medical/chief_medical_officer.yml | 1 - .../Roles/Jobs/Medical/medical_doctor.yml | 1 - .../Roles/Jobs/Medical/medical_intern.yml | 1 - .../Roles/Jobs/Medical/paramedic.yml | 10 +- .../Roles/Jobs/Medical/senior_physician.yml | 1 - .../Roles/Jobs/Science/senior_researcher.yml | 1 - 171 files changed, 12579 insertions(+), 5352 deletions(-) delete mode 100644 Resources/Locale/en-US/loadouts/jobs/engineering.ftl create mode 100644 Resources/Locale/en-US/loadouts/jobs/engineering/engineering.ftl delete mode 100644 Resources/Locale/en-US/loadouts/jobs/medical.ftl create mode 100644 Resources/Locale/en-US/loadouts/jobs/medical/medical.ftl rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/backpackGroups.yml (70%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/eyesGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/gloveGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/headGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/itemGroups.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/languageGroups.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/maskGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/miscItemGroups.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/neckGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/outerwearGroup.yml (100%) rename Resources/Prototypes/CharacterItemGroups/{ => Generic}/shoeGroup.yml (100%) create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Command/commandUncategorized.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Command/headOfPersonnel.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/chiefEngineer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/seniorEngineer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/stationEngineer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/technicalAssistant.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/acolyte.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/cataloger.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/chaplain.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystagogue.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystic.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/noviciate.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/psionicMantis.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/uncategorized.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/cargoTechnician.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/courier.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/salvageSpecialist.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/uncategorized.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalDoctor.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalIntern.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/paramedic.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/psychologist.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Medical/seniorPhysician.yml rename Resources/Prototypes/CharacterItemGroups/{medicalGroups.yml => Jobs/Medical/uncategorized.yml} (61%) create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/cadet.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/corpsman.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/detective.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/securityOfficer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/seniorOfficer.yml rename Resources/Prototypes/CharacterItemGroups/{securityGroups.yml => Jobs/Security/uncategorized.yml} (64%) create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/chef.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/clown.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/lawyer.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/mime.yml rename Resources/Prototypes/CharacterItemGroups/{musicianInstrumentsGroups.yml => Jobs/Service/musician.yml} (74%) create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/reporter.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/Service/uncategorized.yml create mode 100644 Resources/Prototypes/CharacterItemGroups/Jobs/jobItemGroupTemplate.yml delete mode 100644 Resources/Prototypes/CharacterItemGroups/cargoGroups.yml delete mode 100644 Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml delete mode 100644 Resources/Prototypes/CharacterItemGroups/scienceGroups.yml delete mode 100644 Resources/Prototypes/CharacterItemGroups/serviceGroups.yml create mode 100644 Resources/Prototypes/Loadouts/Generic/backpacks.yml create mode 100644 Resources/Prototypes/Loadouts/Generic/duffelbags.yml rename Resources/Prototypes/Loadouts/{ => Generic}/eyes.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/hands.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/head.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/items.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/mask.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/neck.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/outerClothing.yml (100%) create mode 100644 Resources/Prototypes/Loadouts/Generic/satchels.yml rename Resources/Prototypes/Loadouts/{ => Generic}/shoes.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/species.yml (100%) rename Resources/Prototypes/Loadouts/{ => Generic}/uniform.yml (100%) create mode 100644 Resources/Prototypes/Loadouts/Jobs/Command/captain.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Command/headOfPersonnel.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Command/uncategorized.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/chiefEngineer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/seniorEngineer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/stationEngineer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/technicalAssistant.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/acolyte.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/cataloger.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/chaplain.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/mystagogue.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/mystic.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/noviciate.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/psionicMantis.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Epistemics/uncategorized.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/command.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Logistics/cargoTechnician.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Logistics/courier.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Logistics/salvageSpecialist.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Logistics/uncategorized.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/medicalDoctor.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/medicalIntern.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/paramedic.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/psychologist.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/seniorPhysician.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/cadet.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/corpsman.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/detective.yml rename Resources/Prototypes/Loadouts/Jobs/{Heads => Security}/headOfSecurity.yml (57%) create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/securityOfficer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/seniorOfficer.yml rename Resources/Prototypes/Loadouts/Jobs/{security.yml => Security/uncategorized.yml} (63%) create mode 100644 Resources/Prototypes/Loadouts/Jobs/Security/warden.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/chef.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/clown.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/lawyer.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/mime.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/reporter.yml create mode 100644 Resources/Prototypes/Loadouts/Jobs/Service/uncategorized.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/cargo.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/engineering.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/medical.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/science.yml delete mode 100644 Resources/Prototypes/Loadouts/Jobs/service.yml delete mode 100644 Resources/Prototypes/Loadouts/backpacks.yml delete mode 100644 Resources/Prototypes/Loadouts/duffelbags.yml delete mode 100644 Resources/Prototypes/Loadouts/satchels.yml diff --git a/Resources/Locale/en-US/loadouts/categories.ftl b/Resources/Locale/en-US/loadouts/categories.ftl index 778d0869b73..782932ae634 100644 --- a/Resources/Locale/en-US/loadouts/categories.ftl +++ b/Resources/Locale/en-US/loadouts/categories.ftl @@ -7,29 +7,81 @@ loadout-category-Eyes = Eyes loadout-category-Hands = Hands loadout-category-Head = Head loadout-category-Items = Items + +# Jobs loadout-category-Jobs = Jobs loadout-category-JobsAUncategorized = Uncategorized -loadout-category-JobsCargo = Logistics + +# Command loadout-category-JobsCommand = Command -loadout-category-JobsCommandAUncategorized = Uncategorized +loadout-category-JobsCommandAUncategorized = All Command loadout-category-JobsCommandCaptain = Captain -loadout-category-JobsCommandCE = Chief Engineer -loadout-category-JobsCommandCMO = Chief Medical Officer -loadout-category-JobsCommandHOP = Head of Personnel -loadout-category-JobsCommandHOS = Head of Security -loadout-category-JobsCommandQM = Logistics Officer -loadout-category-JobsCommandRD = Mystagogue +loadout-category-JobsCommandHeadOfPersonnel = Head of Personnel + +# Engineering loadout-category-JobsEngineering = Engineering +loadout-category-JobsEngineeringAAUncategorized = All Engineers +loadout-category-JobsEngineeringAtmosphericTechnician = Atmospheric Technician +loadout-category-JobsEngineeringChiefEngineer = Chief Engineer +loadout-category-JobsEngineeringSeniorEngineer = Senior Engineer +loadout-category-JobsEngineeringStationEngineer = Station Engineer +loadout-category-JobsEngineeringTechnicalAssistant = Technical Assistant + +# Epistemics +loadout-category-JobsEpistemics = Epistemics +loadout-category-JobsEpistemicsAAUncategorized = All Epistemiologists +loadout-category-JobsEpistemicsAcolyte = Acolyte +loadout-category-JobsEpistemicsCataloger = Cataloger +loadout-category-JobsEpistemicsChaplain = Chaplain +loadout-category-JobsEpistemicsGolemancer = Golemancer +loadout-category-JobsEpistemicsMystagogue = Mystagogue +loadout-category-JobsEpistemicsMystic = Mystic +loadout-category-JobsEpistemicsNoviciate = Noviciate +loadout-category-JobsEpistemicsPsionicMantis = Psionic Mantis + +# Logistics +loadout-category-JobsLogistics = Logistics +loadout-category-JobsLogisticsAUncategorized = All Logistics +loadout-category-JobsLogisticsCargoTechnician = Cargo Technician +loadout-category-JobsLogisticsCourier = Courier +loadout-category-JobsLogisticsLogisticsOfficer = Logistics Officer +loadout-category-JobsLogisticsSalvageSpecialist = Salvage Specialist + +# Medical loadout-category-JobsMedical = Medical -loadout-category-JobsScience = Epistemics +loadout-category-JobsMedicalAUncategorized = All Medical +loadout-category-JobsMedicalChemist = Chemist +loadout-category-JobsMedicalChiefMedicalOfficer = Chief Medical Officer +loadout-category-JobsMedicalMedicalDoctor = Medical Doctor +loadout-category-JobsMedicalMedicalIntern = Medical Intern +loadout-category-JobsMedicalParamedic = Paramedic +loadout-category-JobsMedicalPsychologist = Psychologist +loadout-category-JobsMedicalSeniorPhysician = Senior Physician + +# Security loadout-category-JobsSecurity = Security +loadout-category-JobsSecurityAUncategorized = All Security +loadout-category-JobsSecurityCadet = Cadet +loadout-category-JobsSecurityCorpsman = Corpsman +loadout-category-JobsSecurityDetective = Detective +loadout-category-JobsSecurityHeadOfSecurity = Head of Security +loadout-category-JobsSecuritySecurityOfficer = Security Officer +loadout-category-JobsSecuritySeniorOfficer = Senior Officer +loadout-category-JobsSecurityWarden = Warden + +# Service loadout-category-JobsService = Service -loadout-category-JobsServiceUncategorized = Uncategorized +loadout-category-JobsServiceAUncategorized = All Service loadout-category-JobsServiceBartender = Bartender loadout-category-JobsServiceBotanist = Botanist loadout-category-JobsServiceChef = Chef +loadout-category-JobsServiceClown = Clown loadout-category-JobsServiceJanitor = Janitor +loadout-category-JobsServiceLawyer = Lawyer +loadout-category-JobsServiceMime = Mime loadout-category-JobsServiceMusician = Musician +loadout-category-JobsServiceReporter = Reporter + loadout-category-Mask = Mask loadout-category-Neck = Neck loadout-category-Outer = Outer diff --git a/Resources/Locale/en-US/loadouts/itemgroups.ftl b/Resources/Locale/en-US/loadouts/itemgroups.ftl index dba4cf72a92..5a1f18994ad 100644 --- a/Resources/Locale/en-US/loadouts/itemgroups.ftl +++ b/Resources/Locale/en-US/loadouts/itemgroups.ftl @@ -18,87 +18,761 @@ character-item-group-LoadoutSmokes = Smokeables character-item-group-LoadoutBoxKits = Survival Kits character-item-group-LoadoutWritables = Writing Tools -# Cargo -character-item-group-LoadoutNeckCargo = Logistics Neckwear -character-item-group-LoadoutOuterCargo = Logistics Outerwear -character-item-group-LoadoutShoesCargo = Logistics Shoes +# Job Specific Template +character-item-group-LoadoutJOBBackpacks = JOB Backpacks +character-item-group-LoadoutJOBBelt = JOB Belt +character-item-group-LoadoutJOBEars = JOB Ears +character-item-group-LoadoutJOBEquipment = JOB Equipment +character-item-group-LoadoutJOBEyes = JOB Eyewear +character-item-group-LoadoutJOBloves = JOB Gloves +character-item-group-LoadoutJOBHead = JOB Headgear +character-item-group-LoadoutJOBId = JOB Id +character-item-group-LoadoutJOBNeck = JOB Neckwear +character-item-group-LoadoutJOBMask = JOB Masks +character-item-group-LoadoutJOBOuter = JOB Outerwear +character-item-group-LoadoutJOBShoes = JOB Shoes +character-item-group-LoadoutJOBUniforms = JOB Uniforms + +# Command +character-item-group-LoadoutCommandBackpacks = Command Backpacks +character-item-group-LoadoutCommandBelt = Command Belt +character-item-group-LoadoutCommandEars = Command Ears +character-item-group-LoadoutCommandEquipment = Command Equipment +character-item-group-LoadoutCommandEyes = Command Eyewear +character-item-group-LoadoutCommandloves = Command Gloves +character-item-group-LoadoutCommandHead = Command Headgear +character-item-group-LoadoutCommandId = Command Id +character-item-group-LoadoutCommandNeck = Command Neckwear +character-item-group-LoadoutCommandMask = Command Masks +character-item-group-LoadoutCommandOuter = Command Outerwear +character-item-group-LoadoutCommandShoes = Command Shoes +character-item-group-LoadoutCommandUniforms = Command Uniforms + +# Command - Captain +character-item-group-LoadoutCaptainBackpacks = Captain Backpacks +character-item-group-LoadoutCaptainBelt = Captain's Belt +character-item-group-LoadoutCaptainEars = Captain Ears +character-item-group-LoadoutCaptainEquipment = Captain Equipment +character-item-group-LoadoutCaptainTrinkets = Captain's Trinkets +character-item-group-LoadoutCaptainWeapon = Captain's Personal Weapon +character-item-group-LoadoutCaptainEyes = Captain's Eyewear +character-item-group-LoadoutCaptainGloves = Captain's Gloves +character-item-group-LoadoutCaptainHead = Captain's Headgear +character-item-group-LoadoutCaptainId = Captain's Id +character-item-group-LoadoutCaptainNeck = Captain's Neckwear +character-item-group-LoadoutCaptainMask = Captain's Masks +character-item-group-LoadoutCaptainOuter = Captain's Outerwear +character-item-group-LoadoutCaptainShoes = Captain's Shoes +character-item-group-LoadoutCaptainUniforms = Captain's Uniforms + +# Command - Head Of Personnel +character-item-group-LoadoutHeadOfPersonnelBackpacks = Head of Personnel Backpacks +character-item-group-LoadoutHeadOfPersonnelBelt = Head of Personnel Belt +character-item-group-LoadoutHeadOfPersonnelEars = Head of Personnel Ears +character-item-group-LoadoutHeadOfPersonnelEquipment = Head of Personnel Equipment +character-item-group-LoadoutHeadOfPersonnelTrinkets = Head of Personnel Trinkets +character-item-group-LoadoutHeadOfPersonnelEyes = Head of Personnel Eyewear +character-item-group-LoadoutHeadOfPersonnelGloves = Head of Personnel Gloves +character-item-group-LoadoutHeadOfPersonnelHead = Head of Personnel Headgear +character-item-group-LoadoutHeadOfPersonnelId = Head of Personnel Id +character-item-group-LoadoutHeadOfPersonnelNeck = Head of Personnel Neckwear +character-item-group-LoadoutHeadOfPersonnelOuter = Head of Personnel Outerwear +character-item-group-LoadoutHeadOfPersonnelShoes = Head of Personnel Shoes +character-item-group-LoadoutHeadOfPersonnelUniforms = Head of Personnel Uniforms # Engineering -character-item-group-LoadoutEyesEngineering = Engineering Eyewear -character-item-group-LoadoutHeadEngineering = Engineering Headgear -character-item-group-LoadoutOuterEngineering = Engineering Outerwear -character-item-group-LoadoutUniformsEngineering = Engineering Uniforms +character-item-group-LoadoutEngineeringBackpacks = Engineering Backpacks +character-item-group-LoadoutEngineeringBelt = Engineering Belt +character-item-group-LoadoutEngineeringEars = Engineering Ears +character-item-group-LoadoutEngineeringEquipment = Engineering Equipment +character-item-group-LoadoutEngineeringEyes = Engineering Eyewear +character-item-group-LoadoutEngineeringGloves = Engineering Gloves +character-item-group-LoadoutEngineeringHead = Engineering Headgear +character-item-group-LoadoutEngineeringId = Engineering Id +character-item-group-LoadoutEngineeringNeck = Engineering Neckwear +character-item-group-LoadoutEngineeringMask = Engineering Masks +character-item-group-LoadoutEngineeringOuter = Engineering Outerwear +character-item-group-LoadoutEngineeringShoes = Engineering Shoes +character-item-group-LoadoutEngineeringUniforms = Engineering Uniforms + +# Engineering - Atmospheric Technician +character-item-group-LoadoutAtmosphericTechnicianBackpacks = Atmospheric Technician Backpacks +character-item-group-LoadoutAtmosphericTechnicianBelt = Atmospheric Technician Belt +character-item-group-LoadoutAtmosphericTechnicianEars = Atmospheric Technician Ears +character-item-group-LoadoutAtmosphericTechnicianEquipment = Atmospheric Technician Equipment +character-item-group-LoadoutAtmosphericTechnicianEyes = Atmospheric Technician Eyewear +character-item-group-LoadoutAtmosphericTechniciangloves = Atmospheric Technician Gloves +character-item-group-LoadoutAtmosphericTechnicianHead = Atmospheric Technician Headgear +character-item-group-LoadoutAtmosphericTechnicianId = Atmospheric Technician Id +character-item-group-LoadoutAtmosphericTechnicianNeck = Atmospheric Technician Neckwear +character-item-group-LoadoutAtmosphericTechnicianMask = Atmospheric Technician Masks +character-item-group-LoadoutAtmosphericTechnicianOuter = Atmospheric Technician Outerwear +character-item-group-LoadoutAtmosphericTechnicianShoes = Atmospheric Technician Shoes +character-item-group-LoadoutAtmosphericTechnicianUniforms = Atmospheric Technician Uniforms + +# Engineering - Chief Engineer +character-item-group-LoadoutChiefEngineerBackpacks = Chief Engineer Backpacks +character-item-group-LoadoutChiefEngineerBelt = Chief Engineer Belt +character-item-group-LoadoutChiefEngineerEars = Chief Engineer Ears +character-item-group-LoadoutChiefEngineerEquipment = Chief Engineer Equipment +character-item-group-LoadoutChiefEngineerEyes = Chief Engineer Eyewear +character-item-group-LoadoutChiefEngineerGloves = Chief Engineer Gloves +character-item-group-LoadoutChiefEngineerHead = Chief Engineer Headgear +character-item-group-LoadoutChiefEngineerId = Chief Engineer Id +character-item-group-LoadoutChiefEngineerNeck = Chief Engineer Neckwear +character-item-group-LoadoutChiefEngineerMask = Chief Engineer Masks +character-item-group-LoadoutChiefEngineerOuter = Chief Engineer Outerwear +character-item-group-LoadoutChiefEngineerShoes = Chief Engineer Shoes +character-item-group-LoadoutChiefEngineerUniforms = Chief Engineer Uniforms + +# Engineering - Senior Engineer +character-item-group-LoadoutSeniorEngineerBackpacks = Senior Engineer Backpacks +character-item-group-LoadoutSeniorEngineerBelt = Senior Engineer Belt +character-item-group-LoadoutSeniorEngineerEars = Senior Engineer Ears +character-item-group-LoadoutSeniorEngineerEquipment = Senior Engineer Equipment +character-item-group-LoadoutSeniorEngineerEyes = Senior Engineer Eyewear +character-item-group-LoadoutSeniorEngineerGloves = Senior Engineer Gloves +character-item-group-LoadoutSeniorEngineerHead = Senior Engineer Headgear +character-item-group-LoadoutSeniorEngineerId = Senior Engineer Id +character-item-group-LoadoutSeniorEngineerNeck = Senior Engineer Neckwear +character-item-group-LoadoutSeniorEngineerMask = Senior Engineer Masks +character-item-group-LoadoutSeniorEngineerOuter = Senior Engineer Outerwear +character-item-group-LoadoutSeniorEngineerShoes = Senior Engineer Shoes +character-item-group-LoadoutSeniorEngineerUniforms = Senior Engineer Uniforms + +# Engineering - Station Engineer +character-item-group-LoadoutStationEngineerBackpacks = Station Engineer Backpacks +character-item-group-LoadoutStationEngineerBelt = Station Engineer Belt +character-item-group-LoadoutStationEngineerEars = Station Engineer Ears +character-item-group-LoadoutStationEngineerEquipment = Station Engineer Equipment +character-item-group-LoadoutStationEngineerEyes = Station Engineer Eyewear +character-item-group-LoadoutStationEngineerGloves = Station Engineer Gloves +character-item-group-LoadoutStationEngineerHead = Station Engineer Headgear +character-item-group-LoadoutStationEngineerId = Station Engineer Id +character-item-group-LoadoutStationEngineerNeck = Station Engineer Neckwear +character-item-group-LoadoutStationEngineerMask = Station Engineer Masks +character-item-group-LoadoutStationEngineerOuter = Station Engineer Outerwear +character-item-group-LoadoutStationEngineerShoes = Station Engineer Shoes +character-item-group-LoadoutStationEngineerUniforms = Station Engineer Uniforms + +# Engineering - Technical Assistant +character-item-group-LoadoutTechnicalAssistantBackpacks = Technical Assistant Backpacks +character-item-group-LoadoutTechnicalAssistantBelt = Technical Assistant Belt +character-item-group-LoadoutTechnicalAssistantEars = Technical Assistant Ears +character-item-group-LoadoutTechnicalAssistantEquipment = Technical Assistant Equipment +character-item-group-LoadoutTechnicalAssistantEyes = Technical Assistant Eyewear +character-item-group-LoadoutTechnicalAssistantGloves = Technical Assistant Gloves +character-item-group-LoadoutTechnicalAssistantHead = Technical Assistant Headgear +character-item-group-LoadoutTechnicalAssistantId = Technical Assistant Id +character-item-group-LoadoutTechnicalAssistantNeck = Technical Assistant Neckwear +character-item-group-LoadoutTechnicalAssistantMask = Technical Assistant Masks +character-item-group-LoadoutTechnicalAssistantOuter = Technical Assistant Outerwear +character-item-group-LoadoutTechnicalAssistantShoes = Technical Assistant Shoes +character-item-group-LoadoutTechnicalAssistantUniforms = Technical Assistant Uniforms # Epistemics -character-item-group-LoadoutEyesScience = Epistemics Eyewear -character-item-group-LoadoutGlovesScience = Epistemics Gloves -character-item-group-LoadoutHeadScience = Epistemics Headgear -character-item-group-LoadoutMaskScience = Epistemics Masks -character-item-group-LoadoutNeckScience = Epistemics Neckwear -character-item-group-LoadoutOuterScience = Epistemics Outerwear -character-item-group-LoadoutShoesScience = Epistemics Shoes -character-item-group-LoadoutUniformsScience = Epistemics Uniforms - -# Epistemics - Cataloguer -character-item-group-LoadoutCataloguerUniforms = Cataloguer Uniforms +character-item-group-LoadoutEpistemicsBackpacks = Epistemics Backpacks +character-item-group-LoadoutEpistemicsBelt = Epistemics Belt +character-item-group-LoadoutEpistemicsEars = Epistemics Ears +character-item-group-LoadoutEpistemicsEquipment = Epistemics Equipment +character-item-group-LoadoutEpistemicsEyes = Epistemics Eyewear +character-item-group-LoadoutEpistemicsGloves = Epistemics Gloves +character-item-group-LoadoutEpistemicsHead = Epistemics Headgear +character-item-group-LoadoutEpistemicsId = Epistemics Id +character-item-group-LoadoutEpistemicsNeck = Epistemics Neckwear +character-item-group-LoadoutEpistemicsMask = Epistemics Masks +character-item-group-LoadoutEpistemicsOuter = Epistemics Outerwear +character-item-group-LoadoutEpistemicsShoes = Epistemics Shoes +character-item-group-LoadoutEpistemicsUniforms = Epistemics Uniforms + +# Epistemics - Acolyte +character-item-group-LoadoutAcolyteBackpacks = Acolyte Backpacks +character-item-group-LoadoutAcolyteBelt = Acolyte Belt +character-item-group-LoadoutAcolyteEars = Acolyte Ears +character-item-group-LoadoutAcolyteEquipment = Acolyte Equipment +character-item-group-LoadoutAcolyteEyes = Acolyte Eyewear +character-item-group-LoadoutAcolyteGloves = Acolyte Gloves +character-item-group-LoadoutAcolyteHead = Acolyte Headgear +character-item-group-LoadoutAcolyteId = Acolyte Id +character-item-group-LoadoutAcolyteNeck = Acolyte Neckwear +character-item-group-LoadoutAcolyteMask = Acolyte Masks +character-item-group-LoadoutAcolyteOuter = Acolyte Outerwear +character-item-group-LoadoutAcolyteShoes = Acolyte Shoes +character-item-group-LoadoutAcolyteUniforms = Acolyte Uniforms + +# Epistemics - Cataloger +character-item-group-LoadoutCatalogerBackpacks = Cataloger Backpacks +character-item-group-LoadoutCatalogerBelt = Cataloger Belt +character-item-group-LoadoutCatalogerEars = Cataloger Ears +character-item-group-LoadoutCatalogerEquipment = Cataloger Equipment +character-item-group-LoadoutCatalogerEyes = Cataloger Eyewear +character-item-group-LoadoutCatalogerGloves = Cataloger Gloves +character-item-group-LoadoutCatalogerHead = Cataloger Headgear +character-item-group-LoadoutCatalogerId = Cataloger Id +character-item-group-LoadoutCatalogerNeck = Cataloger Neckwear +character-item-group-LoadoutCatalogerMask = Cataloger Masks +character-item-group-LoadoutCatalogerOuter = Cataloger Outerwear +character-item-group-LoadoutCatalogerShoes = Cataloger Shoes +character-item-group-LoadoutCatalogerUniforms = Cataloger Uniforms # Epistemics - Chaplain -character-item-group-LoadoutChaplainUniforms = Chaplain Uniforms +character-item-group-LoadoutChaplainBackpacks = Chaplain Backpacks +character-item-group-LoadoutChaplainBelt = Chaplain Belt +character-item-group-LoadoutChaplainEars = Chaplain Ears character-item-group-LoadoutChaplainEquipment = Chaplain Equipment +character-item-group-LoadoutChaplainEyes = Chaplain Eyewear +character-item-group-LoadoutChaplainGloves = Chaplain Gloves +character-item-group-LoadoutChaplainHead = Chaplain Headgear +character-item-group-LoadoutChaplainId = Chaplain Id +character-item-group-LoadoutChaplainNeck = Chaplain Neckwear +character-item-group-LoadoutChaplainMask = Chaplain Masks +character-item-group-LoadoutChaplainOuter = Chaplain Outerwear +character-item-group-LoadoutChaplainShoes = Chaplain Shoes +character-item-group-LoadoutChaplainUniforms = Chaplain Uniforms + +# Epistemics - Golemancer +character-item-group-LoadoutGolemancerBackpacks = Golemancer Backpacks +character-item-group-LoadoutGolemancerBelt = Golemancer Belt +character-item-group-LoadoutGolemancerEars = Golemancer Ears +character-item-group-LoadoutGolemancerEquipment = Golemancer Equipment +character-item-group-LoadoutGolemancerEyes = Golemancer Eyewear +character-item-group-LoadoutGolemancerGloves = Golemancer Gloves +character-item-group-LoadoutGolemancerHead = Golemancer Headgear +character-item-group-LoadoutGolemancerId = Golemancer Id +character-item-group-LoadoutGolemancerNeck = Golemancer Neckwear +character-item-group-LoadoutGolemancerMask = Golemancer Masks +character-item-group-LoadoutGolemancerOuter = Golemancer Outerwear +character-item-group-LoadoutGolemancerShoes = Golemancer Shoes +character-item-group-LoadoutGolemancerUniforms = Golemancer Uniforms + +# Epistemics - Mystagogue +character-item-group-LoadoutMystagogueBackpacks = Mystagogue Backpacks +character-item-group-LoadoutMystagogueBelt = Mystagogue Belt +character-item-group-LoadoutMystagogueEars = Mystagogue Ears +character-item-group-LoadoutMystagogueEquipment = Mystagogue Equipment +character-item-group-LoadoutMystagogueEyes = Mystagogue Eyewear +character-item-group-LoadoutMystagogueGloves = Mystagogue Gloves +character-item-group-LoadoutMystagogueHead = Mystagogue Headgear +character-item-group-LoadoutMystagogueId = Mystagogue Id +character-item-group-LoadoutMystagogueNeck = Mystagogue Neckwear +character-item-group-LoadoutMystagogueMask = Mystagogue Masks +character-item-group-LoadoutMystagogueOuter = Mystagogue Outerwear +character-item-group-LoadoutMystagogueShoes = Mystagogue Shoes +character-item-group-LoadoutMystagogueUniforms = Mystagogue Uniforms + +# Epistemics - Mystic +character-item-group-LoadoutMysticBackpacks = Mystic Backpacks +character-item-group-LoadoutMysticBelt = Mystic Belt +character-item-group-LoadoutMysticEars = Mystic Ears +character-item-group-LoadoutMysticEquipment = Mystic Equipment +character-item-group-LoadoutMysticEyes = Mystic Eyewear +character-item-group-LoadoutMysticGloves = Mystic Gloves +character-item-group-LoadoutMysticHead = Mystic Headgear +character-item-group-LoadoutMysticId = Mystic Id +character-item-group-LoadoutMysticNeck = Mystic Neckwear +character-item-group-LoadoutMysticMask = Mystic Masks +character-item-group-LoadoutMysticOuter = Mystic Outerwear +character-item-group-LoadoutMysticShoes = Mystic Shoes +character-item-group-LoadoutMysticUniforms = Mystic Uniforms + +# Epistemics - Noviciate +character-item-group-LoadoutNoviciateBackpacks = Noviciate Backpacks +character-item-group-LoadoutNoviciateBelt = Noviciate Belt +character-item-group-LoadoutNoviciateEars = Noviciate Ears +character-item-group-LoadoutNoviciateEquipment = Noviciate Equipment +character-item-group-LoadoutNoviciateEyes = Noviciate Eyewear +character-item-group-LoadoutNoviciateGloves = Noviciate Gloves +character-item-group-LoadoutNoviciateHead = Noviciate Headgear +character-item-group-LoadoutNoviciateId = Noviciate Id +character-item-group-LoadoutNoviciateNeck = Noviciate Neckwear +character-item-group-LoadoutNoviciateMask = Noviciate Masks +character-item-group-LoadoutNoviciateOuter = Noviciate Outerwear +character-item-group-LoadoutNoviciateShoes = Noviciate Shoes +character-item-group-LoadoutNoviciateUniforms = Noviciate Uniforms + +# Epistemics - Psionic Mantis +character-item-group-LoadoutPsionicMantisBackpacks = Psionic Mantis Backpacks +character-item-group-LoadoutPsionicMantisBelt = Psionic Mantis Belt +character-item-group-LoadoutPsionicMantisEars = Psionic Mantis Ears +character-item-group-LoadoutPsionicMantisEquipment = Psionic Mantis Equipment +character-item-group-LoadoutPsionicMantisEyes = Psionic Mantis Eyewear +character-item-group-LoadoutPsionicMantisGloves = Psionic Mantis Gloves +character-item-group-LoadoutPsionicMantisHead = Psionic Mantis Headgear +character-item-group-LoadoutPsionicMantisId = Psionic Mantis Id +character-item-group-LoadoutPsionicMantisNeck = Psionic Mantis Neckwear +character-item-group-LoadoutPsionicMantisMask = Psionic Mantis Masks +character-item-group-LoadoutPsionicMantisOuter = Psionic Mantis Outerwear +character-item-group-LoadoutPsionicMantisShoes = Psionic Mantis Shoes +character-item-group-LoadoutPsionicMantisUniforms = Psionic Mantis Uniforms + +# Logistics +character-item-group-LoadoutLogisticsBackpacks = Logistics Backpacks +character-item-group-LoadoutLogisticsBelt = Logistics Belt +character-item-group-LoadoutLogisticsEars = Logistics Ears +character-item-group-LoadoutLogisticsEquipment = Logistics Equipment +character-item-group-LoadoutLogisticsEyes = Logistics Eyewear +character-item-group-LoadoutLogisticsGloves = Logistics Gloves +character-item-group-LoadoutLogisticsHead = Logistics Headgear +character-item-group-LoadoutLogisticsId = Logistics Id +character-item-group-LoadoutLogisticsNeck = Logistics Neckwear +character-item-group-LoadoutLogisticsMask = Logistics Masks +character-item-group-LoadoutLogisticsOuter = Logistics Outerwear +character-item-group-LoadoutLogisticsShoes = Logistics Shoes +character-item-group-LoadoutLogisticsUniforms = Logistics Uniforms + +# Logistics - Cargo Technician +character-item-group-LoadoutCargoTechnicianBackpacks = Cargo Technician Backpacks +character-item-group-LoadoutCargoTechnicianBelt = Cargo Technician Belt +character-item-group-LoadoutCargoTechnicianEars = Cargo Technician Ears +character-item-group-LoadoutCargoTechnicianEquipment = Cargo Technician Equipment +character-item-group-LoadoutCargoTechnicianEyes = Cargo Technician Eyewear +character-item-group-LoadoutCargoTechnicianGloves = Cargo Technician Gloves +character-item-group-LoadoutCargoTechnicianHead = Cargo Technician Headgear +character-item-group-LoadoutCargoTechnicianId = Cargo Technician Id +character-item-group-LoadoutCargoTechnicianNeck = Cargo Technician Neckwear +character-item-group-LoadoutCargoTechnicianMask = Cargo Technician Masks +character-item-group-LoadoutCargoTechnicianOuter = Cargo Technician Outerwear +character-item-group-LoadoutCargoTechnicianShoes = Cargo Technician Shoes +character-item-group-LoadoutCargoTechnicianUniforms = Cargo Technician Uniforms + +# Logistics - Courier +character-item-group-LoadoutCourierBackpacks = Courier Backpacks +character-item-group-LoadoutCourierBelt = Courier Belt +character-item-group-LoadoutCourierEars = Courier Ears +character-item-group-LoadoutCourierEquipment = Courier Equipment +character-item-group-LoadoutCourierEyes = Courier Eyewear +character-item-group-LoadoutCourierGloves = Courier Gloves +character-item-group-LoadoutCourierHead = Courier Headgear +character-item-group-LoadoutCourierId = Courier Id +character-item-group-LoadoutCourierNeck = Courier Neckwear +character-item-group-LoadoutCourierMask = Courier Masks +character-item-group-LoadoutCourierOuter = Courier Outerwear +character-item-group-LoadoutCourierShoes = Courier Shoes +character-item-group-LoadoutCourierUniforms = Courier Uniforms + +# Logistics - Logistics Officer +character-item-group-LoadoutLogisticsOfficerBackpacks = Logistics Officer Backpacks +character-item-group-LoadoutLogisticsOfficerBelt = Logistics Officer Belt +character-item-group-LoadoutLogisticsOfficerEars = Logistics Officer Ears +character-item-group-LoadoutLogisticsOfficerEquipment = Logistics Officer Equipment +character-item-group-LoadoutLogisticsOfficerEyes = Logistics Officer Eyewear +character-item-group-LoadoutLogisticsOfficerGloves = Logistics Officer Gloves +character-item-group-LoadoutLogisticsOfficerHead = Logistics Officer Headgear +character-item-group-LoadoutLogisticsOfficerId = Logistics Officer Id +character-item-group-LoadoutLogisticsOfficerNeck = Logistics Officer Neckwear +character-item-group-LoadoutLogisticsOfficerMask = Logistics Officer Masks +character-item-group-LoadoutLogisticsOfficerOuter = Logistics Officer Outerwear +character-item-group-LoadoutLogisticsOfficerShoes = Logistics Officer Shoes +character-item-group-LoadoutLogisticsOfficerUniforms = Logistics Officer Uniforms + +# Logistics - Salvage Specialist +character-item-group-LoadoutSalvageSpecialistBackpacks = Salvage Specialist Backpacks +character-item-group-LoadoutSalvageSpecialistBelt = Salvage Specialist Belt +character-item-group-LoadoutSalvageSpecialistEars = Salvage Specialist Ears +character-item-group-LoadoutSalvageSpecialistEquipment = Salvage Specialist Equipment +character-item-group-LoadoutSalvageSpecialistEyes = Salvage Specialist Eyewear +character-item-group-LoadoutSalvageSpecialistGloves = Salvage Specialist Gloves +character-item-group-LoadoutSalvageSpecialistHead = Salvage Specialist Headgear +character-item-group-LoadoutSalvageSpecialistId = Salvage Specialist Id +character-item-group-LoadoutSalvageSpecialistNeck = Salvage Specialist Neckwear +character-item-group-LoadoutSalvageSpecialistMask = Salvage Specialist Masks +character-item-group-LoadoutSalvageSpecialistOuter = Salvage Specialist Outerwear +character-item-group-LoadoutSalvageSpecialistShoes = Salvage Specialist Shoes +character-item-group-LoadoutSalvageSpecialistUniforms = Salvage Specialist Uniforms # Medical -character-item-group-LoadoutEyesMedical = Medical Eyewear -character-item-group-LoadoutGlovesMedical = Medical Gloves -character-item-group-LoadoutHeadMedical = Medical Headgear -character-item-group-LoadoutNeckMedical = Medical Neckwear -character-item-group-LoadoutOuterMedical = Medical Outerwear -character-item-group-LoadoutShoesMedical = Medical Shoes -character-item-group-LoadoutUniformsMedical = Medical Uniforms +character-item-group-LoadoutMedicalBackpacks = Medical Backpacks +character-item-group-LoadoutMedicalBelt = Medical Belt +character-item-group-LoadoutMedicalEars = Medical Ears +character-item-group-LoadoutMedicalEquipment = Medical Equipment +character-item-group-LoadoutMedicalEyes = Medical Eyewear +character-item-group-LoadoutMedicalGloves = Medical Gloves +character-item-group-LoadoutMedicalHead = Medical Headgear +character-item-group-LoadoutMedicalId = Medical Id +character-item-group-LoadoutMedicalNeck = Medical Neckwear +character-item-group-LoadoutMedicalMask = Medical Masks +character-item-group-LoadoutMedicalOuter = Medical Outerwear +character-item-group-LoadoutMedicalShoes = Medical Shoes +character-item-group-LoadoutMedicalUniforms = Medical Uniforms + +# Medical - Chemist +character-item-group-LoadoutChemistBackpacks = Chemist Backpacks +character-item-group-LoadoutChemistBelt = Chemist Belt +character-item-group-LoadoutChemistEars = Chemist Ears +character-item-group-LoadoutChemistEquipment = Chemist Equipment +character-item-group-LoadoutChemistEyes = Chemist Eyewear +character-item-group-LoadoutChemistGloves = Chemist Gloves +character-item-group-LoadoutChemistHead = Chemist Headgear +character-item-group-LoadoutChemistId = Chemist Id +character-item-group-LoadoutChemistNeck = Chemist Neckwear +character-item-group-LoadoutChemistMask = Chemist Masks +character-item-group-LoadoutChemistOuter = Chemist Outerwear +character-item-group-LoadoutChemistShoes = Chemist Shoes +character-item-group-LoadoutChemistUniforms = Chemist Uniforms + +# Medical - Chief Medical Officer +character-item-group-LoadoutChiefMedicalOfficerBackpacks = Chief Medical Officer Backpacks +character-item-group-LoadoutChiefMedicalOfficerBelt = Chief Medical Officer Belt +character-item-group-LoadoutChiefMedicalOfficerEars = Chief Medical Officer Ears +character-item-group-LoadoutChiefMedicalOfficerEquipment = Chief Medical Officer Equipment +character-item-group-LoadoutChiefMedicalOfficerEyes = Chief Medical Officer Eyewear +character-item-group-LoadoutChiefMedicalOfficerGloves = Chief Medical Officer Gloves +character-item-group-LoadoutChiefMedicalOfficerHead = Chief Medical Officer Headgear +character-item-group-LoadoutChiefMedicalOfficerId = Chief Medical Officer Id +character-item-group-LoadoutChiefMedicalOfficerNeck = Chief Medical Officer Neckwear +character-item-group-LoadoutChiefMedicalOfficerMask = Chief Medical Officer Masks +character-item-group-LoadoutChiefMedicalOfficerOuter = Chief Medical Officer Outerwear +character-item-group-LoadoutChiefMedicalOfficerShoes = Chief Medical Officer Shoes +character-item-group-LoadoutChiefMedicalOfficerUniforms = Chief Medical Officer Uniforms + +# Medical - Medical Doctor +character-item-group-LoadoutMedicalDoctorBackpacks = Medical Doctor Backpacks +character-item-group-LoadoutMedicalDoctorBelt = Medical Doctor Belt +character-item-group-LoadoutMedicalDoctorEars = Medical Doctor Ears +character-item-group-LoadoutMedicalDoctorEquipment = Medical Doctor Equipment +character-item-group-LoadoutMedicalDoctorEyes = Medical Doctor Eyewear +character-item-group-LoadoutMedicalDoctorGloves = Medical Doctor Gloves +character-item-group-LoadoutMedicalDoctorHead = Medical Doctor Headgear +character-item-group-LoadoutMedicalDoctorId = Medical Doctor Id +character-item-group-LoadoutMedicalDoctorNeck = Medical Doctor Neckwear +character-item-group-LoadoutMedicalDoctorMask = Medical Doctor Masks +character-item-group-LoadoutMedicalDoctorOuter = Medical Doctor Outerwear +character-item-group-LoadoutMedicalDoctorShoes = Medical Doctor Shoes +character-item-group-LoadoutMedicalDoctorUniforms = Medical Doctor Uniforms + +# Medical - Medical Intern +character-item-group-LoadoutMedicalInternBackpacks = Medical Intern Backpacks +character-item-group-LoadoutMedicalInternBelt = Medical Intern Belt +character-item-group-LoadoutMedicalInternEars = Medical Intern Ears +character-item-group-LoadoutMedicalInternEquipment = Medical Intern Equipment +character-item-group-LoadoutMedicalInternEyes = Medical Intern Eyewear +character-item-group-LoadoutMedicalInternGloves = Medical Intern Gloves +character-item-group-LoadoutMedicalInternHead = Medical Intern Headgear +character-item-group-LoadoutMedicalInternId = Medical Intern Id +character-item-group-LoadoutMedicalInternNeck = Medical Intern Neckwear +character-item-group-LoadoutMedicalInternMask = Medical Intern Masks +character-item-group-LoadoutMedicalInternOuter = Medical Intern Outerwear +character-item-group-LoadoutMedicalInternShoes = Medical Intern Shoes +character-item-group-LoadoutMedicalInternUniforms = Medical Intern Uniforms + +# Medical - Paramedic +character-item-group-LoadoutParamedicBackpacks = Paramedic Backpacks +character-item-group-LoadoutParamedicBelt = Paramedic Belt +character-item-group-LoadoutParamedicEars = Paramedic Ears +character-item-group-LoadoutParamedicEquipment = Paramedic Equipment +character-item-group-LoadoutParamedicEyes = Paramedic Eyewear +character-item-group-LoadoutParamedicGloves = Paramedic Gloves +character-item-group-LoadoutParamedicHead = Paramedic Headgear +character-item-group-LoadoutParamedicId = Paramedic Id +character-item-group-LoadoutParamedicNeck = Paramedic Neckwear +character-item-group-LoadoutParamedicMask = Paramedic Masks +character-item-group-LoadoutParamedicOuter = Paramedic Outerwear +character-item-group-LoadoutParamedicShoes = Paramedic Shoes +character-item-group-LoadoutParamedicUniforms = Paramedic Uniforms + +# Medical - Psychologist +character-item-group-LoadoutPsychologistBackpacks = Psychologist Backpacks +character-item-group-LoadoutPsychologistBelt = Psychologist Belt +character-item-group-LoadoutPsychologistEars = Psychologist Ears +character-item-group-LoadoutPsychologistEquipment = Psychologist Equipment +character-item-group-LoadoutPsychologistEyes = Psychologist Eyewear +character-item-group-LoadoutPsychologistGloves = Psychologist Gloves +character-item-group-LoadoutPsychologistHead = Psychologist Headgear +character-item-group-LoadoutPsychologistId = Psychologist Id +character-item-group-LoadoutPsychologistNeck = Psychologist Neckwear +character-item-group-LoadoutPsychologistMask = Psychologist Masks +character-item-group-LoadoutPsychologistOuter = Psychologist Outerwear +character-item-group-LoadoutPsychologistShoes = Psychologist Shoes +character-item-group-LoadoutPsychologistUniforms = Psychologist Uniforms + +# Medical - Senior Physician +character-item-group-LoadoutSeniorPhysicianBackpacks = Senior Physician Backpacks +character-item-group-LoadoutSeniorPhysicianBelt = Senior Physician Belt +character-item-group-LoadoutSeniorPhysicianEars = Senior Physician Ears +character-item-group-LoadoutSeniorPhysicianEquipment = Senior Physician Equipment +character-item-group-LoadoutSeniorPhysicianEyes = Senior Physician Eyewear +character-item-group-LoadoutSeniorPhysicianGloves = Senior Physician Gloves +character-item-group-LoadoutSeniorPhysicianHead = Senior Physician Headgear +character-item-group-LoadoutSeniorPhysicianId = Senior Physician Id +character-item-group-LoadoutSeniorPhysicianNeck = Senior Physician Neckwear +character-item-group-LoadoutSeniorPhysicianMask = Senior Physician Masks +character-item-group-LoadoutSeniorPhysicianOuter = Senior Physician Outerwear +character-item-group-LoadoutSeniorPhysicianShoes = Senior Physician Shoes +character-item-group-LoadoutSeniorPhysicianUniforms = Senior Physician Uniforms # Security -character-item-group-LoadoutBackSecurity = Security Backpacks -character-item-group-LoadoutBeltSecurity = Security Belts -character-item-group-LoadoutEquipmentSecurity = Security Equipment -character-item-group-LoadoutEyesSecurity = Security Eyewear -character-item-group-LoadoutGlovesSecurity = Security Gloves -character-item-group-LoadoutHeadSecurity = Security Headgear -character-item-group-LoadoutMaskSecurity = Security Masks -character-item-group-LoadoutNeckSecurity = Security Neckwear -character-item-group-LoadoutOuterSecurity = Security Outerwear -character-item-group-LoadoutShoesSecurity = Security Shoes -character-item-group-LoadoutUniformsSecurity = Security Uniforms -character-item-group-LoadoutWeaponSecurity = Security Duty Weapon -character-item-group-LoadoutHoSWeapon = Head of Security's Antique Weapon Collection +character-item-group-LoadoutSecurityBackpacks = Security Backpacks +character-item-group-LoadoutSecurityBelt = Security Belt +character-item-group-LoadoutSecurityEars = Security Ears +character-item-group-LoadoutSecurityEquipment = Security Equipment +character-item-group-LoadoutSecurityWeapons = Security Duty Weapon +character-item-group-LoadoutSecurityEyes = Security Eyewear +character-item-group-LoadoutSecurityGloves = Security Gloves +character-item-group-LoadoutSecurityHead = Security Headgear +character-item-group-LoadoutSecurityId = Security Id +character-item-group-LoadoutSecurityNeck = Security Neckwear +character-item-group-LoadoutSecurityMask = Security Masks +character-item-group-LoadoutSecurityOuter = Security Outerwear +character-item-group-LoadoutSecurityShoes = Security Shoes +character-item-group-LoadoutSecurityUniforms = Security Uniforms + +# Security - Cadet +character-item-group-LoadoutCadetBackpacks = Cadet Backpacks +character-item-group-LoadoutCadetBelt = Cadet Belt +character-item-group-LoadoutCadetEars = Cadet Ears +character-item-group-LoadoutCadetEquipment = Cadet Equipment +character-item-group-LoadoutCadetEyes = Cadet Eyewear +character-item-group-LoadoutCadetGloves = Cadet Gloves +character-item-group-LoadoutCadetHead = Cadet Headgear +character-item-group-LoadoutCadetId = Cadet Id +character-item-group-LoadoutCadetNeck = Cadet Neckwear +character-item-group-LoadoutCadetMask = Cadet Masks +character-item-group-LoadoutCadetOuter = Cadet Outerwear +character-item-group-LoadoutCadetShoes = Cadet Shoes +character-item-group-LoadoutCadetUniforms = Cadet Uniforms + +# Security - Corpsman +character-item-group-LoadoutCorpsmanBackpacks = Corpsman Backpacks +character-item-group-LoadoutCorpsmanBelt = Corpsman Belt +character-item-group-LoadoutCorpsmanEars = Corpsman Ears +character-item-group-LoadoutCorpsmanEquipment = Corpsman Equipment +character-item-group-LoadoutCorpsmanEyes = Corpsman Eyewear +character-item-group-LoadoutCorpsmanGloves = Corpsman Gloves +character-item-group-LoadoutCorpsmanHead = Corpsman Headgear +character-item-group-LoadoutCorpsmanId = Corpsman Id +character-item-group-LoadoutCorpsmanNeck = Corpsman Neckwear +character-item-group-LoadoutCorpsmanMask = Corpsman Masks +character-item-group-LoadoutCorpsmanOuter = Corpsman Outerwear +character-item-group-LoadoutCorpsmanShoes = Corpsman Shoes +character-item-group-LoadoutCorpsmanUniforms = Corpsman Uniforms + +# Security - Detective +character-item-group-LoadoutDetectiveBackpacks = Detective Backpacks +character-item-group-LoadoutDetectiveBelt = Detective Belt +character-item-group-LoadoutDetectiveEars = Detective Ears +character-item-group-LoadoutDetectiveEquipment = Detective Equipment +character-item-group-LoadoutDetectiveEyes = Detective Eyewear +character-item-group-LoadoutDetectiveGloves = Detective Gloves +character-item-group-LoadoutDetectiveHead = Detective Headgear +character-item-group-LoadoutDetectiveId = Detective Id +character-item-group-LoadoutDetectiveNeck = Detective Neckwear +character-item-group-LoadoutDetectiveMask = Detective Masks +character-item-group-LoadoutDetectiveOuter = Detective Outerwear +character-item-group-LoadoutDetectiveShoes = Detective Shoes +character-item-group-LoadoutDetectiveUniforms = Detective Uniforms + +# Security - Head Of Security +character-item-group-LoadoutHeadOfSecurityBackpacks = Head Of Security Backpacks +character-item-group-LoadoutHeadOfSecurityBelt = Head Of Security Belt +character-item-group-LoadoutHeadOfSecurityEars = Head Of Security Ears +character-item-group-LoadoutHeadOfSecurityEquipment = Head Of Security Equipment +character-item-group-LoadoutHeadOfSecurityWeapons = Head of Security's Antique Weapon Collection +character-item-group-LoadoutHeadOfSecurityEyes = Head Of Security Eyewear +character-item-group-LoadoutHeadOfSecurityGloves = Head Of Security Gloves +character-item-group-LoadoutHeadOfSecurityHead = Head Of Security Headgear +character-item-group-LoadoutHeadOfSecurityId = Head Of Security Id +character-item-group-LoadoutHeadOfSecurityNeck = Head Of Security Neckwear +character-item-group-LoadoutHeadOfSecurityMask = Head Of Security Masks +character-item-group-LoadoutHeadOfSecurityOuter = Head Of Security Outerwear +character-item-group-LoadoutHeadOfSecurityShoes = Head Of Security Shoes +character-item-group-LoadoutHeadOfSecurityUniforms = Head Of Security Uniforms + +# Security - Security Officer +character-item-group-LoadoutSecurityOfficerBackpacks = Security Officer Backpacks +character-item-group-LoadoutSecurityOfficerBelt = Security Officer Belt +character-item-group-LoadoutSecurityOfficerEars = Security Officer Ears +character-item-group-LoadoutSecurityOfficerEquipment = Security Officer Equipment +character-item-group-LoadoutSecurityOfficerEyes = Security Officer Eyewear +character-item-group-LoadoutSecurityOfficerGloves = Security Officer Gloves +character-item-group-LoadoutSecurityOfficerHead = Security Officer Headgear +character-item-group-LoadoutSecurityOfficerId = Security Officer Id +character-item-group-LoadoutSecurityOfficerNeck = Security Officer Neckwear +character-item-group-LoadoutSecurityOfficerMask = Security Officer Masks +character-item-group-LoadoutSecurityOfficerOuter = Security Officer Outerwear +character-item-group-LoadoutSecurityOfficerShoes = Security Officer Shoes +character-item-group-LoadoutSecurityOfficerUniforms = Security Officer Uniforms + +# Security - Senior Officer +character-item-group-LoadoutSeniorOfficerBackpacks = Senior Officer Backpacks +character-item-group-LoadoutSeniorOfficerBelt = Senior Officer Belt +character-item-group-LoadoutSeniorOfficerEars = Senior Officer Ears +character-item-group-LoadoutSeniorOfficerEquipment = Senior Officer Equipment +character-item-group-LoadoutSeniorOfficerEyes = Senior Officer Eyewear +character-item-group-LoadoutSeniorOfficerGloves = Senior Officer Gloves +character-item-group-LoadoutSeniorOfficerHead = Senior Officer Headgear +character-item-group-LoadoutSeniorOfficerId = Senior Officer Id +character-item-group-LoadoutSeniorOfficerNeck = Senior Officer Neckwear +character-item-group-LoadoutSeniorOfficerMask = Senior Officer Masks +character-item-group-LoadoutSeniorOfficerOuter = Senior Officer Outerwear +character-item-group-LoadoutSeniorOfficerShoes = Senior Officer Shoes +character-item-group-LoadoutSeniorOfficerUniforms = Senior Officer Uniforms + +# Security - Warden +character-item-group-LoadoutWardenBackpacks = Warden Backpacks +character-item-group-LoadoutWardenBelt = Warden Belt +character-item-group-LoadoutWardenEars = Warden Ears +character-item-group-LoadoutWardenEquipment = Warden Equipment +character-item-group-LoadoutWardenEyes = Warden Eyewear +character-item-group-LoadoutWardenGloves = Warden Gloves +character-item-group-LoadoutWardenHead = Warden Headgear +character-item-group-LoadoutWardenId = Warden Id +character-item-group-LoadoutWardenNeck = Warden Neckwear +character-item-group-LoadoutWardenMask = Warden Masks +character-item-group-LoadoutWardenOuter = Warden Outerwear +character-item-group-LoadoutWardenShoes = Warden Shoes +character-item-group-LoadoutWardenUniforms = Warden Uniforms # Service -character-item-group-LoadoutEquipmentService = Service Equipment -character-item-group-LoadoutHeadService = Service Headgear -character-item-group-LoadoutMaskService = Service Masks -character-item-group-LoadoutNeckService = Service Neckwear -character-item-group-LoadoutOuterService = Service Outerwear -character-item-group-LoadoutShoesService = Service Shoes -character-item-group-LoadoutUniformsService = Service Uniforms +character-item-group-LoadoutServiceBackpacks = Service Backpacks +character-item-group-LoadoutServiceBelt = Service Belt +character-item-group-LoadoutServiceEars = Service Ears +character-item-group-LoadoutServiceEquipment = Service Equipment +character-item-group-LoadoutServiceEyes = Service Eyewear +character-item-group-LoadoutServiceGloves = Service Gloves +character-item-group-LoadoutServiceHead = Service Headgear +character-item-group-LoadoutServiceId = Service Id +character-item-group-LoadoutServiceNeck = Service Neckwear +character-item-group-LoadoutServiceMask = Service Masks +character-item-group-LoadoutServiceOuter = Service Outerwear +character-item-group-LoadoutServiceShoes = Service Shoes +character-item-group-LoadoutServiceUniforms = Service Uniforms # Service - Bartender +character-item-group-LoadoutBartenderBackpacks = Bartender Backpacks +character-item-group-LoadoutBartenderBelt = Bartender Belt +character-item-group-LoadoutBartenderEars = Bartender Ears +character-item-group-LoadoutBartenderEquipment = Bartender Equipment character-item-group-LoadoutBartenderAmmo = Bartender Ammo +character-item-group-LoadoutBartenderWeapon = Bartender Weapon +character-item-group-LoadoutBartenderEyes = Bartender Eyewear +character-item-group-LoadoutBartenderGloves = Bartender Gloves character-item-group-LoadoutBartenderHead = Bartender Headgear -character-item-group-LoadoutBartenderOuterwear = Bartender Outerwear +character-item-group-LoadoutBartenderId = Bartender Id +character-item-group-LoadoutBartenderNeck = Bartender Neckwear +character-item-group-LoadoutBartenderMask = Bartender Masks +character-item-group-LoadoutBartenderOuter = Bartender Outerwear +character-item-group-LoadoutBartenderShoes = Bartender Shoes character-item-group-LoadoutBartenderUniforms = Bartender Uniforms -character-item-group-LoadoutBartenderWeapon = Bartender Weapon # Service - Botanist +character-item-group-LoadoutBotanistBackpacks = Botanist Backpacks +character-item-group-LoadoutBotanistBelt = Botanist Belt +character-item-group-LoadoutBotanistEars = Botanist Ears +character-item-group-LoadoutBotanistEquipment = Botanist Equipment +character-item-group-LoadoutBotanistEyes = Botanist Eyewear +character-item-group-LoadoutBotanistGloves = Botanist Gloves +character-item-group-LoadoutBotanistHead = Botanist Headgear +character-item-group-LoadoutBotanistId = Botanist Id +character-item-group-LoadoutBotanistNeck = Botanist Neckwear +character-item-group-LoadoutBotanistMask = Botanist Masks +character-item-group-LoadoutBotanistOuter = Botanist Outerwear +character-item-group-LoadoutBotanistShoes = Botanist Shoes character-item-group-LoadoutBotanistUniforms = Botanist Uniforms # Service - Chef +character-item-group-LoadoutChefBackpacks = Chef Backpacks +character-item-group-LoadoutChefBelt = Chef Belt +character-item-group-LoadoutChefEars = Chef Ears +character-item-group-LoadoutChefEquipment = Chef Equipment +character-item-group-LoadoutChefEyes = Chef Eyewear +character-item-group-LoadoutChefGloves = Chef Gloves character-item-group-LoadoutChefHead = Chef Headgear +character-item-group-LoadoutChefId = Chef Id +character-item-group-LoadoutChefNeck = Chef Neckwear +character-item-group-LoadoutChefMask = Chef Masks character-item-group-LoadoutChefOuter = Chef Outerwear +character-item-group-LoadoutChefShoes = Chef Shoes character-item-group-LoadoutChefUniforms = Chef Uniforms +# Service - Clown +character-item-group-LoadoutClownBackpacks = Clown Backpacks +character-item-group-LoadoutClownBelt = Clown Belt +character-item-group-LoadoutClownEars = Clown Ears +character-item-group-LoadoutClownEquipment = Clown Equipment +character-item-group-LoadoutClownEyes = Clown Eyewear +character-item-group-LoadoutClownGloves = Clown Gloves +character-item-group-LoadoutClownHead = Clown Headgear +character-item-group-LoadoutClownId = Clown Id +character-item-group-LoadoutClownNeck = Clown Neckwear +character-item-group-LoadoutClownMask = Clown Masks +character-item-group-LoadoutClownOuter = Clown Outerwear +character-item-group-LoadoutClownShoes = Clown Shoes +character-item-group-LoadoutClownUniforms = Clown Uniforms + # Service - Janitor +character-item-group-LoadoutJanitorBackpacks = Janitor Backpacks +character-item-group-LoadoutJanitorBelt = Janitor Belt +character-item-group-LoadoutJanitorEars = Janitor Ears +character-item-group-LoadoutJanitorEquipment = Janitor Equipment +character-item-group-LoadoutJanitorEyes = Janitor Eyewear +character-item-group-LoadoutJanitorGloves = Janitor Gloves +character-item-group-LoadoutJanitorHead = Janitor Headgear +character-item-group-LoadoutJanitorId = Janitor Id +character-item-group-LoadoutJanitorNeck = Janitor Neckwear +character-item-group-LoadoutJanitorMask = Janitor Masks +character-item-group-LoadoutJanitorOuter = Janitor Outerwear +character-item-group-LoadoutJanitorShoes = Janitor Shoes character-item-group-LoadoutJanitorUniforms = Janitor Uniforms +# Service - Lawyer +character-item-group-LoadoutLawyerBackpacks = Lawyer Backpacks +character-item-group-LoadoutLawyerBelt = Lawyer Belt +character-item-group-LoadoutLawyerEars = Lawyer Ears +character-item-group-LoadoutLawyerEquipment = Lawyer Equipment +character-item-group-LoadoutLawyerEyes = Lawyer Eyewear +character-item-group-LoadoutLawyerGloves = Lawyer Gloves +character-item-group-LoadoutLawyerHead = Lawyer Headgear +character-item-group-LoadoutLawyerId = Lawyer Id +character-item-group-LoadoutLawyerNeck = Lawyer Neckwear +character-item-group-LoadoutLawyerMask = Lawyer Masks +character-item-group-LoadoutLawyerOuter = Lawyer Outerwear +character-item-group-LoadoutLawyerShoes = Lawyer Shoes +character-item-group-LoadoutLawyerUniforms = Lawyer Uniforms + +# Service - Mime +character-item-group-LoadoutMimeBackpacks = Mime Backpacks +character-item-group-LoadoutMimeBelt = Mime Belt +character-item-group-LoadoutMimeEars = Mime Ears +character-item-group-LoadoutMimeEquipment = Mime Equipment +character-item-group-LoadoutMimeEyes = Mime Eyewear +character-item-group-LoadoutMimeGloves = Mime Gloves +character-item-group-LoadoutMimeHead = Mime Headgear +character-item-group-LoadoutMimeId = Mime Id +character-item-group-LoadoutMimeNeck = Mime Neckwear +character-item-group-LoadoutMimeMask = Mime Masks +character-item-group-LoadoutMimeOuter = Mime Outerwear +character-item-group-LoadoutMimeShoes = Mime Shoes +character-item-group-LoadoutMimeUniforms = Mime Uniforms + # Service - Musician -character-item-group-LoadoutMusicianInstruments = Musician Instruments +character-item-group-LoadoutMusicianBackpacks = Musician Backpacks +character-item-group-LoadoutMusicianBelt = Musician Belt +character-item-group-LoadoutMusicianEars = Musician Ears +character-item-group-LoadoutMusicianEquipment = Musician Equipment +character-item-group-LoadoutMusicianEyes = Musician Eyewear +character-item-group-LoadoutMusicianGloves = Musician Gloves +character-item-group-LoadoutMusicianHead = Musician Headgear +character-item-group-LoadoutMusicianId = Musician Id +character-item-group-LoadoutMusicianNeck = Musician Neckwear +character-item-group-LoadoutMusicianMask = Musician Masks +character-item-group-LoadoutMusicianOuter = Musician Outerwear +character-item-group-LoadoutMusicianShoes = Musician Shoes +character-item-group-LoadoutMusicianUniforms = Musician Uniforms + +# Service - Reporter +character-item-group-LoadoutReporterBackpacks = Reporter Backpacks +character-item-group-LoadoutReporterBelt = Reporter Belt +character-item-group-LoadoutReporterEars = Reporter Ears +character-item-group-LoadoutReporterEquipment = Reporter Equipment +character-item-group-LoadoutReporterEyes = Reporter Eyewear +character-item-group-LoadoutReporterGloves = Reporter Gloves +character-item-group-LoadoutReporterHead = Reporter Headgear +character-item-group-LoadoutReporterId = Reporter Id +character-item-group-LoadoutReporterNeck = Reporter Neckwear +character-item-group-LoadoutReporterMask = Reporter Masks +character-item-group-LoadoutReporterOuter = Reporter Outerwear +character-item-group-LoadoutReporterShoes = Reporter Shoes +character-item-group-LoadoutReporterUniforms = Reporter Uniforms # Traits - Languages character-item-group-TraitsLanguagesBasic = Basic Languages diff --git a/Resources/Locale/en-US/loadouts/jobs/engineering.ftl b/Resources/Locale/en-US/loadouts/jobs/engineering.ftl deleted file mode 100644 index bf00def52e4..00000000000 --- a/Resources/Locale/en-US/loadouts/jobs/engineering.ftl +++ /dev/null @@ -1,5 +0,0 @@ -loadout-name-LoadoutEngineeringChickenSuit = eggmospheric technician suit -loadout-description-LoadoutEngineeringChickenSuit = For the Eggmos tech who always knows where home is... -loadout-description-LoadoutEngineeringUniformJumpskirtSenior = A skirt fit for the best of the best. -loadout-description-LoadoutEngineeringUniformJumpsuitSenior = A suit fit for the best of the best. -loadout-description-LoadoutEngineeringItemInflatable = A box containing inflatable walls and doors, for quickly patching up breaches. diff --git a/Resources/Locale/en-US/loadouts/jobs/engineering/engineering.ftl b/Resources/Locale/en-US/loadouts/jobs/engineering/engineering.ftl new file mode 100644 index 00000000000..d9e0175fb7c --- /dev/null +++ b/Resources/Locale/en-US/loadouts/jobs/engineering/engineering.ftl @@ -0,0 +1,22 @@ +loadout-name-LoadoutEngineeringChickenSuit = eggmospheric technician suit +loadout-description-LoadoutEngineeringChickenSuit = For the Eggmos tech who always knows where home is... +loadout-description-LoadoutEngineeringUniformJumpskirtSenior = A skirt fit for the best of the best. +loadout-description-LoadoutEngineeringUniformJumpsuitSenior = A suit fit for the best of the best. +loadout-description-LoadoutEngineeringItemInflatable = A box containing inflatable walls and doors, for quickly patching up breaches. + +loadout-name-LoadoutAtmosphericTechnicianBeltUtility = utility belt (empty) +loadout-name-LoadoutAtmosphericTechnicianBeltUtilityAtmos = utility belt (filled, Atmospheric Tools) +loadout-description-LoadoutAtmosphericTechnicianBeltUtilityAtmos = + This standard engineering belt includes a holofan emitter, as well as a gas analyzer instead of a multitool. + +loadout-name-LoadoutChiefEngineerBelt = advanced utility belt (empty) +loadout-name-LoadoutChiefEngineerBeltFilled = advanced utility belt (filled) + +loadout-name-LoadoutSeniorEngineerBeltUtility = utility belt (empty) +loadout-name-LoadoutSeniorEngineerBeltUtilityEngineering = utility belt (filled) +loadout-name-LoadoutSeniorEngineerBeltUtilityAtmos = utility belt (filled, Atmospheric Tools) +loadout-description-LoadoutSeniorEngineerBeltUtilityAtmos = + This standard engineering belt includes a holofan emitter, as well as a gas analyzer instead of a multitool. + +loadout-name-LoadoutEngineeringBeltUtilityAtmos = utility belt (filled, Atmospheric Tools) + diff --git a/Resources/Locale/en-US/loadouts/jobs/medical.ftl b/Resources/Locale/en-US/loadouts/jobs/medical.ftl deleted file mode 100644 index c016232ceea..00000000000 --- a/Resources/Locale/en-US/loadouts/jobs/medical.ftl +++ /dev/null @@ -1,3 +0,0 @@ -loadout-description-LoadoutMedicalUniformJumpskirtSenior = A skirt fit for the best of the best. -loadout-description-LoadoutMedicalUniformJumpsuitSenior = A suit fit for the best of the best. -loadout-description-LoadoutMedicalHeadBeretSeniorPhysician = A beret fit for the best of the best. diff --git a/Resources/Locale/en-US/loadouts/jobs/medical/medical.ftl b/Resources/Locale/en-US/loadouts/jobs/medical/medical.ftl new file mode 100644 index 00000000000..247f95edda9 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/jobs/medical/medical.ftl @@ -0,0 +1,19 @@ +loadout-description-LoadoutMedicalUniformJumpskirtSenior = A skirt fit for the best of the best. +loadout-description-LoadoutMedicalUniformJumpsuitSenior = A suit fit for the best of the best. +loadout-description-LoadoutMedicalHeadBeretSeniorPhysician = A beret fit for the best of the best. + +loadout-name-LoadoutMedicalDoctorBeltMedical = medical belt (empty) +loadout-name-LoadoutMedicalDoctorBeltMedicalFilled = medical belt (filled) +loadout-name-LoadoutMedicalDoctorBeltMedicalAdvancedFilled = medical belt (filled, advanced) +loadout-description-LoadoutMedicalDoctorBeltMedicalAdvancedFilled = + The standard alotment of topical medicines in this pouch have been replaced with their advanced varieties, such as medicated sutures and regenerative mesh. + +loadout-name-LoadoutChiefMedicalOfficerBeltMedical = medical belt (empty) +loadout-name-LoadoutChiefMedicalOfficerBeltMedicalAdvancedFilled = medical belt (filled, advanced) +loadout-description-LoadoutChiefMedicalOfficerBeltMedicalAdvancedFilled = + The standard alotment of topical medicines in this pouch have been replaced with their advanced varieties, such as medicated sutures and regenerative mesh. + +loadout-name-LoadoutSeniorPhysicianBeltMedical = medical belt (empty) +loadout-name-LoadoutSeniorPhysicianBeltMedicalAdvancedFilled = medical belt (filled, advanced) +loadout-description-LoadoutSeniorPhysicianBeltMedicalAdvancedFilled = + The standard alotment of topical medicines in this pouch have been replaced with their advanced varieties, such as medicated sutures and regenerative mesh. diff --git a/Resources/Migrations/eeMigration.yml b/Resources/Migrations/eeMigration.yml index 195c1f87651..459af36aa9e 100644 --- a/Resources/Migrations/eeMigration.yml +++ b/Resources/Migrations/eeMigration.yml @@ -117,3 +117,6 @@ MailPAI: MailNFPAI # 2024-08-27 Oracle: OracleSpawner SophicScribe: SophicScribeSpawner + +# 2024-11-16 +GlassBoxLaser: null #Captain's Laser was moved to Loadouts. diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml index 27dd4c7e9a7..5c814a6be84 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml @@ -26,6 +26,22 @@ - id: Welder - id: Multitool +- type: entity + id: ClothingBeltUtilityAtmos + parent: ClothingBeltUtility + suffix: Engineering + components: + - type: StorageFill + contents: + - id: Crowbar + - id: Wrench + - id: Screwdriver + - id: Wirecutter + - id: Welder + - id: Multitool + - id: GasAnalyzer + - id: HolofanProjector + - type: entity id: ClothingBeltChiefEngineerFilled parent: ClothingBeltChiefEngineer @@ -83,6 +99,24 @@ - id: Gauze - id: EmergencyMedipen #You never know what people are going to latejoin into +- type: entity + id: ClothingBeltMedicalAdvancedFilled + parent: ClothingBeltMedical + suffix: Filled + components: + - type: StorageFill + contents: + - id: MedicatedSuture + amount: 2 + - id: RegenerativeMesh + amount: 1 + - id: Bloodpack + amount: 1 + - id: Gauze + - id: EmergencyMedipen + - id: BruteAutoInjector + - id: BurnAutoInjector + - type: entity id: ClothingBeltMedicalEMTFilled parent: ClothingBeltMedicalEMT diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 9394702303a..e7f44398731 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -32,55 +32,38 @@ components: - type: StorageFill contents: - - id: ClothingOuterArmorCaptainCarapace - id: NukeDisk - id: PinpointerNuclear -# - id: CaptainIDCard # DeltaV - Replaced by the spare ID system + - id: CaptainIDCard - id: ClothingOuterHardsuitCap - - id: WeaponDisabler - id: CommsComputerCircuitboard - id: ClothingHeadsetAltCommand - - id: SpaceCash1000 - id: PlushieNuke prob: 0.1 - - id: CigarGoldCase - prob: 0.25 - - id: ClothingBeltSheathFilled - id: DoorRemoteCommand - id: RubberStampCaptain -# - id: WeaponAntiqueLaser # DeltaV - Remove in favor of the glass box - id: JetpackCaptainFilled - - id: MedalCase - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 - type: entity id: LockerCaptainFilled - suffix: Filled, AntiqueLaser + suffix: Filled, AntiqueLaser # Deprecated, Antique laser is now part of Captain's Loadouts. parent: LockerCaptain components: - type: StorageFill contents: - - id: ClothingOuterArmorCaptainCarapace - id: NukeDisk - id: PinpointerNuclear -# - id: CaptainIDCard # DeltaV - Replaced by the spare ID system - - id: WeaponDisabler + - id: CaptainIDCard - id: CommsComputerCircuitboard - id: ClothingHeadsetAltCommand - - id: SpaceCash1000 - id: PlushieNuke prob: 0.1 - - id: CigarGoldCase - prob: 0.25 - - id: ClothingBeltSheathFilled - id: DoorRemoteCommand - id: RubberStampCaptain - - id: WeaponAntiqueLaser - id: JetpackCaptainFilled - - id: MedalCase - - id: ClothingHeadHatBeretCap # Nyanotrasen - Captain's Beret - - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! + - id: LunchboxCommandFilledRandom prob: 0.3 - type: entity @@ -90,25 +73,17 @@ components: - type: StorageFill contents: - - id: ClothingOuterArmorCaptainCarapace - id: NukeDisk - id: PinpointerNuclear -# - id: CaptainIDCard # Delta V - Replaced by spare ID system. The funny biscuit that I cant even eat. - - id: WeaponDisabler + - id: CaptainIDCard - id: CommsComputerCircuitboard - id: ClothingHeadsetAltCommand - - id: SpaceCash1000 - id: PlushieNuke prob: 0.1 - - id: CigarGoldCase - prob: 0.25 - - id: ClothingBeltSheathFilled - id: DoorRemoteCommand - id: RubberStampCaptain - id: JetpackCaptainFilled - - id: MedalCase - - id: ClothingHeadHatBeretCap # Nyanotrasen - Captain's Beret - - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! + - id: LunchboxCommandFilledRandom prob: 0.3 - type: entity @@ -124,23 +99,13 @@ - id: BoxID - id: BoxHeadset - id: IDComputerCircuitboard - - id: WeaponDisabler - - id: ClothingOuterCoatHoPArmored # DeltaV - - id: ClothingOuterArmorDuraVest # DeltaV - replaced HoP's armoured coat with a standard stabproof, pending HoPcoat resprite - - id: CigarGoldCase - prob: 0.25 - # Fuck the HoP they don't deserve fucking cigars. - # Yes they do fuck you. - id: DoorRemoteService - - id: ClothingNeckGoldmedal - id: RubberStampHop - id: RubberStampDenied - id: RubberStampApproved - id: BoxEncryptionKeyPassenger - id: BoxEncryptionKeyService - id: AccessConfigurator - - id: BookIanDossier # DeltaV - HoP steal objective, see Resources/Prototypes/DeltaV/Entities/Objects/Misc/ian_dossier.yml - - id: ClothingHandsGlovesInspection # DeltaV - Add inspection gloves for HoP. - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 @@ -154,7 +119,6 @@ - id: ClothingOuterHardsuitEngineeringWhite - id: ClothingMaskBreath - id: ClothingEyesGlassesMeson - - id: ClothingBeltChiefEngineerFilled - id: ClothingShoesBootsMagAdv - id: ClothingHandsGlovesColorYellow - id: CigarCase diff --git a/Resources/Prototypes/CharacterItemGroups/backpackGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/backpackGroups.yml similarity index 70% rename from Resources/Prototypes/CharacterItemGroups/backpackGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/backpackGroups.yml index c12db85146d..b2c5443a350 100644 --- a/Resources/Prototypes/CharacterItemGroups/backpackGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/backpackGroups.yml @@ -8,4 +8,6 @@ - type: loadout id: LoadoutBackpackSatchel - type: loadout - id: LoadoutBackpackClown + id: LoadoutItemBackpackSatchelLeather + - type: loadout + id: LoadoutBackpackMerc diff --git a/Resources/Prototypes/CharacterItemGroups/eyesGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/eyesGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/eyesGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/eyesGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/gloveGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/gloveGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/headGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/headGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/itemGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/itemGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml diff --git a/Resources/Prototypes/CharacterItemGroups/languageGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/languageGroups.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/languageGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/languageGroups.yml diff --git a/Resources/Prototypes/CharacterItemGroups/maskGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/maskGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/miscItemGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/miscItemGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml diff --git a/Resources/Prototypes/CharacterItemGroups/neckGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/neckGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/outerwearGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/outerwearGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/outerwearGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/shoeGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml similarity index 100% rename from Resources/Prototypes/CharacterItemGroups/shoeGroup.yml rename to Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml new file mode 100644 index 00000000000..57df945ec91 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/captain.yml @@ -0,0 +1,144 @@ +- type: characterItemGroup + id: LoadoutCaptainBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutBackpackCaptain + - type: loadout + id: LoadoutBackpackSatchelCaptain + - type: loadout + id: LoadoutBackpackDuffelCaptain + - type: loadout + id: LoadoutBackpackCaptainFilled + - type: loadout + id: LoadoutBackpackSatchelCaptainFilled + - type: loadout + id: LoadoutBackpackDuffelCaptainFilled + +- type: characterItemGroup + id: LoadoutCaptainBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainSwordSheath + +#- type: characterItemGroup +# id: LoadoutCaptainEars +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCaptainEquipment +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutCaptainTrinkets + maxItems: 3 + items: + - type: loadout + id: LoadoutCaptainDrinkFlask + - type: loadout + id: LoadoutCaptainMedalCase + - type: loadout + id: LoadoutCaptainSpaceCash1000 + - type: loadout + id: LoadoutCaptainCigarCase + +- type: characterItemGroup + id: LoadoutCaptainWeapon + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainAntiqueLaserPistol + - type: loadout + id: LoadoutCaptainPulsePistol + +- type: characterItemGroup + id: LoadoutCaptainEyes + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainEyesSunglasses + +- type: characterItemGroup + id: LoadoutCaptainGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainGlovesCapGloves + - type: loadout + id: LoadoutCaptainGlovesInspection + +- type: characterItemGroup + id: LoadoutCaptainHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCapHat + - type: loadout + id: LoadoutCommandCapHatCapcap + - type: loadout + id: LoadoutCommandCapHatBeret + +- type: characterItemGroup + id: LoadoutCaptainId + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainNTPDA + +- type: characterItemGroup + id: LoadoutCaptainNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCapNeckMantle + - type: loadout + id: LoadoutCommandCapNeckCloak + - type: loadout + id: LoadoutCommandCapNeckCloakFormal + - type: loadout + id: LoadoutCaptainNeckGoldMedal + +- type: characterItemGroup + id: LoadoutCaptainMask + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCapMaskGas + +- type: characterItemGroup + id: LoadoutCaptainOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCapOuterWinter + - type: loadout + id: LoadoutCaptainOuterCarapace + +- type: characterItemGroup + id: LoadoutCaptainShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCaptainShoesLaceup + - type: loadout + id: LoadoutCaptainShoesLeather + - type: loadout + id: LoadoutCaptainShoesWinter + - type: loadout + id: LoadoutCaptainShoesCombat + +- type: characterItemGroup + id: LoadoutCaptainUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCapJumpsuit + - type: loadout + id: LoadoutCommandCapJumpskirt + - type: loadout + id: LoadoutCommandCapJumpsuitFormal + - type: loadout + id: LoadoutCommandCapJumpskirtFormal diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Command/commandUncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/commandUncategorized.yml new file mode 100644 index 00000000000..c20e6dd322d --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/commandUncategorized.yml @@ -0,0 +1,78 @@ +# All Command +#- type: characterItemGroup +# id: LoadoutCommandBackpacks +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandBelt +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandEars +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandEquipment +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutCommandSelfDefense + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandTelescopicBaton + - type: loadout + id: LoadoutCommandDisabler + - type: loadout + id: LoadoutCommandStunBaton + - type: loadout + id: LoadoutCommandFlash + +#- type: characterItemGroup +# id: LoadoutCommandEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandGloves +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandHead +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandId +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandNeck +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandMask +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandOuter +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandShoes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutCommandUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Command/headOfPersonnel.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/headOfPersonnel.yml new file mode 100644 index 00000000000..c15099ae6a2 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Command/headOfPersonnel.yml @@ -0,0 +1,125 @@ +- type: characterItemGroup + id: LoadoutHeadOfPersonnelBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelBackpacksBackpackFilled + - type: loadout + id: LoadoutHeadOfPersonnelBackpacksSatchelFilled + - type: loadout + id: LoadoutHeadOfPersonnelBackpacksDuffelFilled + - type: loadout + id: LoadoutCommandHOPBackIan + - type: loadout + id: LoadoutCommandHOPBackIanFilled + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelBeltClipboard + +#- type: characterItemGroup +# id: LoadoutHeadOfPersonnelEars +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutHeadOfPersonnelEquipment +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelTrinkets + maxItems: 3 + items: + - type: loadout + id: LoadoutHeadOfPersonnelCigarCase + - type: loadout + id: LoadoutHeadOfPersonnelBookIanDossier + +#- type: characterItemGroup +# id: LoadoutHeadOfPersonnelEyes +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelGlovesHoP + - type: loadout + id: LoadoutHeadOfPersonnelGlovesInspection + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOPHatCap + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelId + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelNTPDA + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOPNeckMantle + - type: loadout + id: LoadoutCommandHOPNeckCloak + - type: loadout + id: LoadoutCommandHOPBedsheetIan + - type: loadout + id: LoadoutHeadOfPersonnelNeckGoldMedal + +#- type: characterItemGroup +# id: LoadoutHeadOfPersonnelMask +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutcommandHOPOuterCoatFormal + - type: loadout + id: LoadoutHeadOfPersonnelOuterWinter + - type: loadout + id: LoadoutHeadOfPersonnelOuterArmoredCoat + - type: loadout + id: LoadoutHeadOfPersonnelOuterDuraVest + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelShoesLaceup + - type: loadout + id: LoadoutHeadOfPersonnelShoesLeather + - type: loadout + id: LoadoutCommandHOPShoesBootsWinter + +- type: characterItemGroup + id: LoadoutHeadOfPersonnelUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfPersonnelUniformJumpsuit + - type: loadout + id: LoadoutHeadOfPersonnelUniformJumpskirt + - type: loadout + id: LoadoutCommandHOPJumpsuitTurtleneckBoatswain + - type: loadout + id: LoadoutCommandHOPJumpsuitMess + - type: loadout + id: LoadoutCommandHOPJumpskirtMess diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml new file mode 100644 index 00000000000..27890a2827d --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/atmosphericTechnician.yml @@ -0,0 +1,94 @@ +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadingEngineeringAtmosBackpackBackpack + - type: loadout + id: LoadingEngineeringAtmosBackpackSatchel + - type: loadout + id: LoadingEngineeringAtmosBackpackDuffel + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianBeltUtility + - type: loadout + id: LoadoutAtmosphericTechnicianBeltUtilityAtmos + +#- type: characterItemGroup +# id: LoadoutAtmosphericTechnicianEars +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianEquipment + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianEquipmentBoxInflatable + - type: loadout + id: LoadoutAtmosphericTechnicianEquipmentMedkitOxygen + - type: loadout + id: LoadoutAtmosphericTechnicianEquipmentRCD + +#- type: characterItemGroup +# id: LoadoutAtmosphericTechnicianEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutAtmosphericTechnicianGloves +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianHead + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianChickenhead + +#- type: characterItemGroup +# id: LoadoutAtmosphericTechnicianId +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutAtmosphericTechnicianNeck +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianMask + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianMaskGasAtmos + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianChickenSuit + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutAtmosphericTechnicianShoesWhite + - type: loadout + id: LoadoutAtmosphericTechnicianShoesWork + +- type: characterItemGroup + id: LoadoutAtmosphericTechnicianUniforms + maxItems: 1 + items: + - type: loadout + id: LoadingEngineeringAtmosUniformSuit + - type: loadout + id: LoadingEngineeringAtmosUniformSkirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/chiefEngineer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/chiefEngineer.yml new file mode 100644 index 00000000000..1e8b997987d --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/chiefEngineer.yml @@ -0,0 +1,98 @@ +- type: characterItemGroup + id: LoadoutChiefEngineerBackpack + maxItems: 1 + items: + - type: loadout + id: LoadoutEngineeringChiefEngineerBackpackBackpack + - type: loadout + id: LoadoutEngineeringChiefEngineerBackpackSatchel + - type: loadout + id: LoadoutEngineeringChiefEngineerBackpackDuffel + +- type: characterItemGroup + id: LoadoutChiefEngineerBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefEngineerBelt + - type: loadout + id: LoadoutChiefEngineerBeltFilled + +#- type: characterItemGroup +# id: LoadoutChiefEngineerEars +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutChiefEngineerEquipment + maxItems: 2 + items: + - type: loadout + id: LoadoutChiefEngineerEquipmentBoxInflatable + - type: loadout + id: LoadoutChiefEngineerEquipmentMedkitOxygen + - type: loadout + id: LoadoutChiefEngineerEquipmentRCD + - type: loadout + id: LoadoutChiefEngineerEquipmentRCDAmmoSpare + +#- type: characterItemGroup +# id: LoadoutChiefEngineerEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutChiefEngineerGloves +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutChiefEngineerHead +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutChiefEngineerId + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefEngineerNTPDA + +- type: characterItemGroup + id: LoadoutChiefEngineerNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutEngineeringChiefEngineerNeckMantle + - type: loadout + id: LoadoutEngineeringChiefEngineerNeckCloak + - type: loadout + id: LoadoutEngineeringChiefEngineerNeckEngineerMedal + +#- type: characterItemGroup +# id: LoadoutChiefEngineerMask +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutChiefEngineerOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCEOuterWinter + +- type: characterItemGroup + id: LoadoutChiefEngineerShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefEngineerShoesBootsWinter + +- type: characterItemGroup + id: LoadoutChiefEngineerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefEngineerUniformSuit + - type: loadout + id: LoadoutEngineeringChiefEngineerUniformSkirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml new file mode 100644 index 00000000000..efc045928e0 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/engineeringUncategorized.yml @@ -0,0 +1,95 @@ +# All Engineering +- type: characterItemGroup + id: LoadoutEngineeringBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutBackpackEngineering + - type: loadout + id: LoadoutBackpackSatchelEngineering + - type: loadout + id: LoadoutBackpackDuffelEngineering + +#- type: characterItemGroup +# id: LoadoutEngineeringBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEngineeringEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEngineeringEquipment +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEyesEngineering + items: + - type: loadout + id: LoadoutEngineeringEyesMeson + +- type: characterItemGroup + id: LoadoutEngineeringGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutEngineeringGlovesInsulated + - type: loadout + id: LoadoutEngineeringGlovesCombat + - type: loadout + id: LoadoutEngineeringGlovesMerc + +- type: characterItemGroup + id: LoadoutEngineeringHead + items: + - type: loadout + id: LoadoutEngineeringHeadBeret + - type: loadout + id: LoadoutEngineeringHeadHardhatBlue + - type: loadout + id: LoadoutEngineeringHeadHardhatOrange + - type: loadout + id: LoadoutEngineeringHeadHardhatRed + - type: loadout + id: LoadoutEngineeringHeadHardhatWhite + - type: loadout + id: LoadoutEngineeringHeadHardhatYellow + +#- type: characterItemGroup +# id: LoadoutEngineeringId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEngineeringNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEngineeringMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEngineeringOuter + items: + - type: loadout + id: LoadoutEngineeringOuterHazard + +#- type: characterItemGroup +# id: LoadoutEngineeringShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEngineeringUniforms + items: + - type: loadout + id: LoadoutEngineeringUniformSuit + - type: loadout + id: LoadoutEngineeringUniformSkirt + - type: loadout + id: LoadoutEngineeringUniformHazard diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/seniorEngineer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/seniorEngineer.yml new file mode 100644 index 00000000000..965ba118135 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/seniorEngineer.yml @@ -0,0 +1,80 @@ +#- type: characterItemGroup +# id: LoadoutSeniorEngineerBackpacks +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutSeniorEngineerBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutSeniorEngineerBeltUtility + - type: loadout + id: LoadoutSeniorEngineerBeltUtilityEngineering + - type: loadout + id: LoadoutSeniorEngineerBeltUtilityAtmos + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerEars +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutSeniorEngineerEquipment + maxItems: 2 + items: + - type: loadout + id: LoadoutSeniorEngineerEquipmentBoxInflatable + - type: loadout + id: LoadoutSeniorEngineerEquipmentMedkitOxygen + - type: loadout + id: LoadoutSeniorEngineerEquipmentRCD + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerGloves +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerHead +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerId +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerNeck +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerMask +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerOuter +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutSeniorEngineerShoes +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutSeniorEngineerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutEngineeringUniformJumpskirtSenior + - type: loadout + id: LoadoutEngineeringUniformJumpsuitSenior diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/stationEngineer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/stationEngineer.yml new file mode 100644 index 00000000000..7a7468e9b94 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/stationEngineer.yml @@ -0,0 +1,68 @@ +#- type: characterItemGroup +# id: LoadoutStationEngineerBackpacks +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerBelt +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerEars +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutStationEngineerEquipment + maxItems: 2 + items: + - type: loadout + id: LoadoutStationEngineerEquipmentBoxInflatable + - type: loadout + id: LoadoutStationEngineerEquipmentRCD + +#- type: characterItemGroup +# id: LoadoutStationEngineerEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerGloves +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerHead +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerId +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerNeck +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerMask +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerOuter +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerShoes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutStationEngineerUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/technicalAssistant.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/technicalAssistant.yml new file mode 100644 index 00000000000..746a4025b7b --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Engineering/technicalAssistant.yml @@ -0,0 +1,64 @@ +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantBackpacks +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantBelt +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantEars +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantEquipment +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantEyes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantGloves +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantHead +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantId +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantNeck +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantMask +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantOuter +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantShoes +# maxItems: 1 +# items: + +#- type: characterItemGroup +# id: LoadoutTechnicalAssistantUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/acolyte.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/acolyte.yml new file mode 100644 index 00000000000..9a4a9fc2237 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/acolyte.yml @@ -0,0 +1,64 @@ +#- type: characterItemGroup +# id: LoadoutAcolyteBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutAcolyteUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/cataloger.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/cataloger.yml new file mode 100644 index 00000000000..765764b7cbb --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/cataloger.yml @@ -0,0 +1,82 @@ +# Cataloger +#- type: characterItemGroup +# id: LoadoutCatalogerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCatalogerShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutCatalogerUniforms + items: + - type: loadout + id: LoadoutScienceJumpsuitLibrarianNt + - type: loadout + id: LoadoutScienceJumpsuitLibrarianIdris + - type: loadout + id: LoadoutScienceJumpsuitLibrarianOrion + - type: loadout + id: LoadoutScienceJumpsuitLibrarianHeph + - type: loadout + id: LoadoutScienceJumpsuitLibrarianPMCG + - type: loadout + id: LoadoutScienceJumpsuitLibrarianZav + - type: loadout + id: LoadoutScienceJumpsuitLibrarianZeng + - type: loadout + id: LoadoutScienceJumpsuitLibrarian + - type: loadout + id: LoadoutScienceJumpskirtLibrarian diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/chaplain.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/chaplain.yml new file mode 100644 index 00000000000..a8861538f8d --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/chaplain.yml @@ -0,0 +1,97 @@ +# Chaplain +#- type: characterItemGroup +# id: LoadoutChaplainBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChaplainBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChaplainEars +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChaplainEquipment + maxItems: 2 + items: + - type: loadout + id: LoadoutChaplainBible + - type: loadout + id: LoadoutChaplainStamp + +#- type: characterItemGroup +# id: LoadoutChaplainEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChaplainGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChaplainHead + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceHeadHatHoodNunHood + - type: loadout + id: LoadoutScienceHeadHatPlaguedoctor + - type: loadout + id: LoadoutScienceHeadHatWitch + - type: loadout + id: LoadoutScienceHeadHatWitch1 + +#- type: characterItemGroup +# id: LoadoutChaplainId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChaplainNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceNeckStoleChaplain + +- type: characterItemGroup + id: LoadoutChaplainMask + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceMaskPlague + +- type: characterItemGroup + id: LoadoutChaplainOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceOuterPlagueSuit + - type: loadout + id: LoadoutScienceOuterNunRobe + - type: loadout + id: LoadoutScienceOuterHoodieBlack + - type: loadout + id: LoadoutScienceOuterHoodieChaplain + +#- type: characterItemGroup +# id: LoadoutChaplainShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChaplainUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutChaplainJumpsuit + - type: loadout + id: LoadoutChaplainJumpskirt + - type: loadout + id: LoadoutScienceUniformJumpsuitMonasticRobeDark + - type: loadout + id: LoadoutScienceUniformJumpsuitMonasticRobeLight diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml new file mode 100644 index 00000000000..1597c1c0b51 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/golemancer.yml @@ -0,0 +1,69 @@ +# Golemancer +#- type: characterItemGroup +# id: LoadoutGolemancerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutGolemancerShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutGolemancerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceUniformJumpskirtRoboticist + - type: loadout + id: LoadoutScienceUniformJumpsuitRoboticist diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystagogue.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystagogue.yml new file mode 100644 index 00000000000..4314e3dd9ba --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystagogue.yml @@ -0,0 +1,95 @@ +# Mystagogue +- type: characterItemGroup + id: LoadoutMystagogueBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutMystagogueBackpacksBackpack + - type: loadout + id: LoadoutMystagogueBackpacksSatchel + - type: loadout + id: LoadoutMystagogueBackpacksDuffel + +#- type: characterItemGroup +# id: LoadoutMystagogueBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMystagogueEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMystagogueEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMystagogueEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMystagogueGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMystagogueHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandRDHeadHatBeretMysta + - type: loadout + id: LoadoutCommandRDHeadHoodMysta + +- type: characterItemGroup + id: LoadoutMystagogueId + maxItems: 1 + items: + - type: loadout + id: LoadoutMystagogueNTPDA + +- type: characterItemGroup + id: LoadoutMystagogueNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandRDNeckMantle + - type: loadout + id: LoadoutCommandRDNeckCloak + - type: loadout + id: LoadoutCommandRDNeckCloakMystagogue + - type: loadout + id: LoadoutMystagogueNeckSciencemedal + +#- type: characterItemGroup +# id: LoadoutMystagogueMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMystagogueOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandRDOuterWinter + - type: loadout + id: LoadoutCommandRDOuterMysta + +- type: characterItemGroup + id: LoadoutMystagogueShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandRDShoesBootsWinter + +- type: characterItemGroup + id: LoadoutMystagogueUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutMystagogueUniformJumpsuit + - type: loadout + id: LoadoutMystagogueUniformJumpskirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystic.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystic.yml new file mode 100644 index 00000000000..1e2c5c85a52 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/mystic.yml @@ -0,0 +1,71 @@ +# Mystic +#- type: characterItemGroup +# id: LoadoutMysticBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMysticMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMysticOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceOuterLabcoatSeniorResearcher + +#- type: characterItemGroup +# id: LoadoutMysticShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMysticUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceUniformJumpskirtSenior + - type: loadout + id: LoadoutScienceUniformJumpsuitSenior diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/noviciate.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/noviciate.yml new file mode 100644 index 00000000000..d7b6f1224b8 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/noviciate.yml @@ -0,0 +1,65 @@ +# Noviciate +#- type: characterItemGroup +# id: LoadoutNoviciateBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutNoviciateUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/psionicMantis.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/psionicMantis.yml new file mode 100644 index 00000000000..dc9f47ba08a --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/psionicMantis.yml @@ -0,0 +1,67 @@ +# Psionic Mantis +#- type: characterItemGroup +# id: LoadoutPsionicMantisBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutPsionicMantisOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceOuterWinterCoatMantis + +#- type: characterItemGroup +# id: LoadoutPsionicMantisShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsionicMantisUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/uncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/uncategorized.yml new file mode 100644 index 00000000000..cc49ed1dc97 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Epistemics/uncategorized.yml @@ -0,0 +1,100 @@ +# All Epistemics +#- type: characterItemGroup +# id: LoadoutEpistemicsBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEpistemicsBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEpistemicsEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutEpistemicsEquipment +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEpistemicsEyes + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceEyesHudDiagnostic + - type: loadout + id: LoadoutScienceEyesEyepatchHudDiag + +- type: characterItemGroup + id: LoadoutEpistemicsGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceHandsGlovesColorPurple + - type: loadout + id: LoadoutScienceHandsGlovesLatex + - type: loadout + id: LoadoutScienceHandsGlovesRobohands + +- type: characterItemGroup + id: LoadoutEpistemicsHead + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceHeadHatBeret + - type: loadout + id: LoadoutScienceHeadHatFez + - type: loadout + id: LoadoutHeadHoodTechPriest + +#- type: characterItemGroup +# id: LoadoutEpistemicsId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEpistemicsNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceNeckTieSci + - type: loadout + id: LoadoutScienceNeckScarfStripedPurple + - type: loadout + id: LoadoutScienceNeckScarfStripedBlack + +#- type: characterItemGroup +# id: LoadoutEpistemicsMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutEpistemicsOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutScienceOuterCoat + - type: loadout + id: LoadoutScienceOuterLabcoat + - type: loadout + id: LoadoutScienceOuterCoatRobo + - type: loadout + id: LoadoutScienceOuterWinterSci + - type: loadout + id: LoadoutScienceOuterExplorerLabcoat + - type: loadout + id: LoadoutOuterRobeTechPriest + +- type: characterItemGroup + id: LoadoutEpistemicsShoes + items: + - type: loadout + id: LoadoutScienceShoesBootsWinterSci + +#- type: characterItemGroup +# id: LoadoutEpistemicsUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/cargoTechnician.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/cargoTechnician.yml new file mode 100644 index 00000000000..872e6a38ef2 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/cargoTechnician.yml @@ -0,0 +1,69 @@ +# Cargo Technician +#- type: characterItemGroup +# id: LoadoutCargoTechnicianBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCargoTechnicianMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutCargoTechnicianOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCargoOuterWinterCargo + +- type: characterItemGroup + id: LoadoutCargoTechnicianShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCargoShoesBootsWinterCargo + +#- type: characterItemGroup +# id: LoadoutCargoTechnicianUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/courier.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/courier.yml new file mode 100644 index 00000000000..cb52d012a55 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/courier.yml @@ -0,0 +1,65 @@ +# Courier +#- type: characterItemGroup +# id: LoadoutCourierBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCourierUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml new file mode 100644 index 00000000000..230fd830363 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/logisticsOfficer.yml @@ -0,0 +1,77 @@ +# Logistics Officer +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutLogisticsOfficerHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandQMHeadSoft + +- type: characterItemGroup + id: LoadoutLogisticsOfficerId + maxItems: 1 + items: + - type: loadout + id: LoadoutLogisticsOfficerNTPDA + +- type: characterItemGroup + id: LoadoutLogisticsOfficerNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandQMNeckCloak + +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOfficerOuter +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutLogisticsOfficerShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandQMShoesBootsWinter + +- type: characterItemGroup + id: LoadoutLogisticsOfficerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandQMUniformTurtleneck + - type: loadout + id: LoadoutCommandQMUniformTurtleneckSkirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/salvageSpecialist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/salvageSpecialist.yml new file mode 100644 index 00000000000..7d50ddb004a --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/salvageSpecialist.yml @@ -0,0 +1,82 @@ +# Salvage Specialist +- type: characterItemGroup + id: LoadoutSalvageSpecialistBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutBackpackSalvage + - type: loadout + id: LoadoutSalvageBackpackSatchel + - type: loadout + id: LoadoutSalvageBackpackDuffel + +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistEquipment +# maxItems: 1 +# items: + +- type: characterItemGroup + id: LoadoutSalvageSpecialistWeapons + maxItems: 1 + items: + - type: loadout + id: LoadoutCargoWeaponsCrusherDagger + +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSalvageSpecialistNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCargoNeckGoliathCloak + +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSalvageSpecialistOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCargoOuterWinterMiner + +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSalvageSpecialistUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/uncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/uncategorized.yml new file mode 100644 index 00000000000..eea65b4c411 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Logistics/uncategorized.yml @@ -0,0 +1,71 @@ +# All Logistics +- type: characterItemGroup + id: LoadoutLogisticsBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutBackpackCargo + - type: loadout + id: LoadoutBackpackSatchelCargo + - type: loadout + id: LoadoutBackpackDuffelCargo + +#- type: characterItemGroup +# id: LoadoutLogisticsBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLogisticsUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml new file mode 100644 index 00000000000..016507e0656 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chemist.yml @@ -0,0 +1,113 @@ +# Chemist +- type: characterItemGroup + id: LoadoutChemistBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutChemistryBackpackBackpack + - type: loadout + id: LoadoutBackpackSatchelChemistry + - type: loadout + id: LoadoutBackpackDuffelChemistry + +- type: characterItemGroup + id: LoadoutChemistBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutChemistBeltChemBag + +#- type: characterItemGroup +# id: LoadoutChemistEars +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChemistEquipment + maxItems: 3 + items: + - type: loadout + id: LoadoutMedicalItemHandLabeler + - type: loadout + id: LoadoutChemistPillCanisterKelotane + - type: loadout + id: LoadoutChemistPillCanisterTricordrazine + - type: loadout + id: LoadoutChemistPillCanisterHyronalin + - type: loadout + id: LoadoutChemistPillCanisterBicaridine + - type: loadout + id: LoadoutChemistPillCanisterDermaline + - type: loadout + id: LoadoutChemistPillCanisterDylovene + - type: loadout + id: LoadoutChemistPillCanisterDexalin + - type: loadout + id: LoadoutChemistPillCanisterSpaceDrugs + +- type: characterItemGroup + id: LoadoutChemistEyes + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalEyesGlassesChemicalBudget + - type: loadout + id: LoadoutMedicalEyesGlassesChemical + - type: loadout + id: LoadoutMedicalEyesGlassesChemist + +- type: characterItemGroup + id: LoadoutChemistGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalHandsGlovesChemist + +#- type: characterItemGroup +# id: LoadoutChemistHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChemistId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChemistNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalNeckTieChem + +#- type: characterItemGroup +# id: LoadoutChemistMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChemistOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalOuterLabcoatChem + - type: loadout + id: LoadoutMedicalOuterApronChemist + +- type: characterItemGroup + id: LoadoutChemistShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalShoesEnclosedChem + +- type: characterItemGroup + id: LoadoutChemistUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalUniformJumpsuitChemShirt + - type: loadout + id: LoadoutMedicalUniformJumpsuitChemistry + - type: loadout + id: LoadoutMedicalUniformJumpskirtChemistry diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml new file mode 100644 index 00000000000..6e9bd02b4f6 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/chiefMedicalOfficer.yml @@ -0,0 +1,93 @@ +# Chief Medical Officer +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerBackpacks +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefMedicalOfficerBeltMedical + - type: loadout + id: LoadoutChiefMedicalOfficerBeltMedicalAdvancedFilled + +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCMOHatBeret + +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerId + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefMedicalOfficerNTPDA + +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCMONeckMantle + - type: loadout + id: LoadoutCommandCMONeckCloak + - type: loadout + id: LoadoutChiefMedicalOfficerNeckMedalMedical + +#- type: characterItemGroup +# id: LoadoutChiefMedicalOfficerMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCMOOuterWinter + - type: loadout + id: LoadoutCommandCMOOuterLab + +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandCMOShoesBootsWinter + - type: loadout + id: LoadoutChiefMedicalOfficerShoesLaceup + - type: loadout + id: LoadoutChiefMedicalOfficerShoesLeather + +- type: characterItemGroup + id: LoadoutChiefMedicalOfficerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutChiefMedicalOfficerJumpsuit + - type: loadout + id: LoadoutChiefMedicalOfficerJumpskirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalDoctor.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalDoctor.yml new file mode 100644 index 00000000000..dd93b54e167 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalDoctor.yml @@ -0,0 +1,77 @@ +# Medical Doctor +#- type: characterItemGroup +# id: LoadoutMedicalDoctorBackpacks +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMedicalDoctorBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalDoctorBeltMedical + - type: loadout + id: LoadoutMedicalDoctorBeltMedicalFilled + - type: loadout + id: LoadoutMedicalDoctorBeltMedicalAdvancedFilled + +#- type: characterItemGroup +# id: LoadoutMedicalDoctorEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMedicalDoctorHead + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalHeadNurse + +#- type: characterItemGroup +# id: LoadoutMedicalDoctorId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalDoctorShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMedicalDoctorUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalDoctorJumpsuit + - type: loadout + id: LoadoutMedicalDoctorJumpskirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalIntern.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalIntern.yml new file mode 100644 index 00000000000..3db0ef908fa --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/medicalIntern.yml @@ -0,0 +1,69 @@ +# Medical Intern +#- type: characterItemGroup +# id: LoadoutMedicalInternBackpacks +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMedicalInternBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalInternBeltMedical + - type: loadout + id: LoadoutMedicalInternBeltMedicalFilled + +#- type: characterItemGroup +# id: LoadoutMedicalInternEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalInternUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/paramedic.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/paramedic.yml new file mode 100644 index 00000000000..7abd4c242fb --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/paramedic.yml @@ -0,0 +1,69 @@ +# Paramedic +#- type: characterItemGroup +# id: LoadoutParamedicBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutParamedicShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutParamedicUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalUniformParamedicJumpsuit + - type: loadout + id: LoadoutMedicalUniformParamedicJumpskirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/psychologist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/psychologist.yml new file mode 100644 index 00000000000..80925aef590 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/psychologist.yml @@ -0,0 +1,83 @@ +# Psychologist +- type: characterItemGroup + id: LoadoutPsychologistBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutPsychologistBackpackBackpack + - type: loadout + id: LoadoutPsychologistBackpackSatchel + - type: loadout + id: LoadoutPsychologistBackpackDuffel + +#- type: characterItemGroup +# id: LoadoutPsychologistBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistEars +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutPsychologistEquipment + maxItems: 3 + items: + - type: loadout + id: LoadoutPsychologistPillCanisterSpaceDrugs + - type: loadout + id: LoadoutPsychologistPillCanisterPax + - type: loadout + id: LoadoutPsychologistPillCanisterCryptobiolin + - type: loadout + id: LoadoutPsychologistPillCanisterChloralHydrate + +#- type: characterItemGroup +# id: LoadoutPsychologistEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutPsychologistShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutPsychologistUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutPsychologistJumpsuit + - type: loadout + id: LoadoutPsychologistJumpskirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/seniorPhysician.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/seniorPhysician.yml new file mode 100644 index 00000000000..c20d2ee50de --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/seniorPhysician.yml @@ -0,0 +1,75 @@ +# Senior Physician +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianBackpacks +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSeniorPhysicianBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutSeniorPhysicianBeltMedical + - type: loadout + id: LoadoutSeniorPhysicianBeltMedicalAdvancedFilled + +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSeniorPhysicianHead + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalHeadBeretSeniorPhysician + +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorPhysicianShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSeniorPhysicianUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutMedicalUniformJumpskirtSenior + - type: loadout + id: LoadoutMedicalUniformJumpsuitSenior diff --git a/Resources/Prototypes/CharacterItemGroups/medicalGroups.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml similarity index 61% rename from Resources/Prototypes/CharacterItemGroups/medicalGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml index 396f07290fb..02d9dbda3bc 100644 --- a/Resources/Prototypes/CharacterItemGroups/medicalGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Medical/uncategorized.yml @@ -1,68 +1,68 @@ +# All Medical - type: characterItemGroup - id: LoadoutUniformsMedical + id: LoadoutMedicalBackpacks + maxItems: 1 items: - type: loadout - id: LoadoutMedicalUniformScrubsBlue + id: LoadoutBackpackMedical - type: loadout - id: LoadoutMedicalUniformScrubsGreen + id: LoadoutBackpackVirology - type: loadout - id: LoadoutMedicalUniformScrubsPurple + id: LoadoutBackpackGenetics - type: loadout - id: LoadoutMedicalUniformScrubsCyan + id: LoadoutBackpackSatchelMedical - type: loadout - id: LoadoutMedicalUniformScrubsBlack + id: LoadoutBackpackSatchelVirology - type: loadout - id: LoadoutMedicalUniformScrubsPink + id: LoadoutBackpackSatchelGenetics - type: loadout - id: LoadoutMedicalUniformScrubsCybersun + id: LoadoutBackpackDuffelMedical - type: loadout - id: LoadoutMedicalUniformParamedicJumpsuit + id: LoadoutBackpackDuffelVirology - type: loadout - id: LoadoutMedicalUniformParamedicJumpskirt + id: LoadoutBackpackDuffelGenetics - type: loadout - id: LoadoutMedicalUniformJumpskirtSenior - - type: loadout - id: LoadoutMedicalUniformJumpsuitSenior - - type: loadout - id: LoadoutMedicalUniformJumpsuitChemShirt + id: LoadoutBackpackMedicalDuffelSurgeryFilled + +#- type: characterItemGroup +# id: LoadoutMedicalBelt +# maxItems: 1 +# items: +#- type: characterItemGroup +# id: LoadoutMedicalEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMedicalEquipment +# maxItems: 1 +# items: +# - type: characterItemGroup - id: LoadoutOuterMedical + id: LoadoutMedicalEyes + maxItems: 1 items: - type: loadout - id: LoadoutMedicalOuterLabcoat - - type: loadout - id: LoadoutMedicalOuterCybersunWindbreaker + id: LoadoutMedicalEyesHudMedical - type: loadout - id: LoadoutMedicalOuterLabcoatChem + id: LoadoutMedicalEyesEyepatchHudMedical - type: loadout - id: LoadoutMedicalOuterApronChemist + id: LoadoutMedicalEyesHudMedicalPrescription - type: characterItemGroup - id: LoadoutGlovesMedical + id: LoadoutMedicalGloves + maxItems: 1 items: - type: loadout id: LoadoutMedicalGlovesNitrile - type: loadout - id: LoadoutMedicalHandsGlovesChemist - -- type: characterItemGroup - id: LoadoutNeckMedical - items: - - type: loadout - id: LoadoutMedicalNeckStethoscope - - type: loadout - id: LoadoutMedicalBedsheetMedical - - type: loadout - id: LoadoutMedicalNeckTieChem + id: LoadoutMedicalGlovesLatex - type: characterItemGroup - id: LoadoutHeadMedical + id: LoadoutMedicalHead + maxItems: 1 items: - - type: loadout - id: LoadoutMedicalHeadNurse - - type: loadout - id: LoadoutMedicalHeadBeretSeniorPhysician - type: loadout id: LoadoutMedicalHeadSurgcapBlue - type: loadout @@ -80,22 +80,54 @@ - type: loadout id: LoadoutMedicalHeadSurgcapCybersun +#- type: characterItemGroup +# id: LoadoutMedicalId +# maxItems: 1 +# items: +# - type: characterItemGroup - id: LoadoutEyesMedical + id: LoadoutMedicalNeck + maxItems: 1 items: - type: loadout - id: LoadoutMedicalEyesHudMedical - - type: loadout - id: LoadoutMedicalEyesEyepatchHudMedical + id: LoadoutMedicalNeckStethoscope - type: loadout - id: LoadoutMedicalEyesHudMedicalPrescription + id: LoadoutMedicalBedsheetMedical + +#- type: characterItemGroup +# id: LoadoutMedicalMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMedicalOuter + maxItems: 1 + items: - type: loadout - id: LoadoutMedicalEyesGlassesChemical + id: LoadoutMedicalOuterLabcoat - type: loadout - id: LoadoutMedicalEyesGlassesChemist + id: LoadoutMedicalOuterCybersunWindbreaker +#- type: characterItemGroup +# id: LoadoutMedicalShoes +# maxItems: 1 +# items: +# - type: characterItemGroup - id: LoadoutShoesMedical + id: LoadoutMedicalUniforms + maxItems: 1 items: - type: loadout - id: LoadoutMedicalShoesEnclosedChem + id: LoadoutMedicalUniformScrubsBlue + - type: loadout + id: LoadoutMedicalUniformScrubsGreen + - type: loadout + id: LoadoutMedicalUniformScrubsPurple + - type: loadout + id: LoadoutMedicalUniformScrubsCyan + - type: loadout + id: LoadoutMedicalUniformScrubsBlack + - type: loadout + id: LoadoutMedicalUniformScrubsPink + - type: loadout + id: LoadoutMedicalUniformScrubsCybersun diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/cadet.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/cadet.yml new file mode 100644 index 00000000000..3945c80e622 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/cadet.yml @@ -0,0 +1,65 @@ +# Cadet +#- type: characterItemGroup +# id: LoadoutCadetBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCadetUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/corpsman.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/corpsman.yml new file mode 100644 index 00000000000..d2a1f1381d7 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/corpsman.yml @@ -0,0 +1,81 @@ +# Corpsman +- type: characterItemGroup + id: LoadoutCorpsmanBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutCorpsmanBackpackBackpack + - type: loadout + id: LoadoutCorpsmanBackpackSatchel + - type: loadout + id: LoadoutCorpsmanBackpackDuffel + +- type: characterItemGroup + id: LoadoutCorpsmanBelt + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingBeltCorpsmanWebbing + +#- type: characterItemGroup +# id: LoadoutCorpsmanEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCorpsmanEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCorpsmanEyes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutCorpsmanGloves + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingHandsGlovesNitrile + +- type: characterItemGroup + id: LoadoutCorpsmanHead + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingHeadHatBeretBrigmedic + - type: loadout + id: LoadoutClothingHeadHatBeretCorpsman + +#- type: characterItemGroup +# id: LoadoutCorpsmanId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutCorpsmanNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutBedsheetBrigmedic + +#- type: characterItemGroup +# id: LoadoutCorpsmanMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCorpsmanOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCorpsmanShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutCorpsmanUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/detective.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/detective.yml new file mode 100644 index 00000000000..068e00dd1ad --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/detective.yml @@ -0,0 +1,69 @@ +# Detective +#- type: characterItemGroup +# id: LoadoutDetectiveBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutDetectiveOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingOuterCoatDetective + - type: loadout + id: LoadoutOuterVestDetective + +#- type: characterItemGroup +# id: LoadoutDetectiveShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutDetectiveUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml new file mode 100644 index 00000000000..9ccc5232e4a --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml @@ -0,0 +1,120 @@ +# Head Of Security +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityEquipment +# maxItems: 1 +# items: + +- type: characterItemGroup + maxItems: 1 + id: LoadoutHeadOfSecurityWeapon + items: + - type: loadout + id: LoadoutCommandHoSPulsePistol + - type: loadout + id: LoadoutCommandHoSWt550 + - type: loadout + id: LoadoutCommandHoSKatanaSheath + - type: loadout + id: LoadoutCommandHoSC20r + - type: loadout + id: LoadoutCommandHoSBulldog + - type: loadout + id: LoadoutCommandHoSEnergySword + - type: loadout + id: LoadoutCommandHoSEnergyGun + +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutHeadOfSecurityHead + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOSHatBeret + - type: loadout + id: LoadoutCommandHOSHatHoshat + +- type: characterItemGroup + id: LoadoutHeadOfSecurityId + maxItems: 1 + items: + - type: loadout + id: LoadoutHeadOfSecurityNTPDA + +- type: characterItemGroup + id: LoadoutHeadOfSecurityNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOSNeckMantle + - type: loadout + id: LoadoutCommandHOSNeckCloak + +#- type: characterItemGroup +# id: LoadoutHeadOfSecurityMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutHeadOfSecurityOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOSOuterWinter + - type: loadout + id: LoadoutCommandHOSOuterTrench + +- type: characterItemGroup + id: LoadoutHeadOfSecurityShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutCommandHOSShoesBootsWinter + +- type: characterItemGroup + id: LoadoutHeadOfSecurityUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutUniformJumpskirtHoSBlue + - type: loadout + id: LoadoutUniformJumpskirtHoSGrey + - type: loadout + id: LoadoutCommandHOSJumpsuitAlt + - type: loadout + id: LoadoutCommandHOSJumpsuitBlue + - type: loadout + id: LoadoutCommandHOSJumpsuitGrey + - type: loadout + id: LoadoutCommandHOSJumpsuitParade + - type: loadout + id: LoadoutCommandHOSJumpsuitFormal + - type: loadout + id: LoadoutCommandHOSJumpskirtAlt + - type: loadout + id: LoadoutCommandHOSJumpskirtParade + - type: loadout + id: LoadoutCommandHOSJumpskirtFormal diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/securityOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/securityOfficer.yml new file mode 100644 index 00000000000..0c43a1f18d6 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/securityOfficer.yml @@ -0,0 +1,65 @@ +# Security Officer +#- type: characterItemGroup +# id: LoadoutSecurityOfficerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityOfficerUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/seniorOfficer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/seniorOfficer.yml new file mode 100644 index 00000000000..96761a12e51 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/seniorOfficer.yml @@ -0,0 +1,68 @@ +# Senior Officer +#- type: characterItemGroup +# id: LoadoutSeniorOfficerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSeniorOfficerShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSeniorOfficerUniforms + items: + - type: loadout + id: LoadoutSecurityUniformJumpskirtSenior + - type: loadout + id: LoadoutSecurityUniformJumpsuitSenior diff --git a/Resources/Prototypes/CharacterItemGroups/securityGroups.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml similarity index 64% rename from Resources/Prototypes/CharacterItemGroups/securityGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml index 8b9f6f1e0e8..9cac5c34226 100644 --- a/Resources/Prototypes/CharacterItemGroups/securityGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/uncategorized.yml @@ -1,138 +1,34 @@ +# All Security - type: characterItemGroup - id: LoadoutUniformsSecurity - items: - - type: loadout - id: LoadoutSecurityUniformJumpsuitBlue - - type: loadout - id: LoadoutSecurityUniformJumpskirtBlue - - type: loadout - id: LoadoutSecurityUniformJumpsuitGrey - - type: loadout - id: LoadoutSecurityUniformJumpskirtGrey - - type: loadout - id: LoadoutSecurityUniformJumpsuitSenior - - type: loadout - id: LoadoutSecurityUniformJumpskirtSenior - - type: loadout - id: LoadoutSecurityUniformJumpsuitWardenBlue - - type: loadout - id: LoadoutSecurityUniformJumpskirtWardenBlue - - type: loadout - id: LoadoutSecurityUniformJumpsuitWardenGrey - - type: loadout - id: LoadoutSecurityUniformJumpskirtWardenGrey - - type: loadout - id: LoadoutSecurityUniformJumpsuitHoSBlue - - type: loadout - id: LoadoutSecurityUniformJumpskirtHoSBlue - - type: loadout - id: LoadoutSecurityUniformJumpsuitHoSGrey - - type: loadout - id: LoadoutSecurityUniformJumpskirtHoSGrey - - type: loadout - id: LoadoutUniformJumpsuitSecFormal - - type: loadout - id: LoadoutUniformJumpsuitSecSummer - -- type: characterItemGroup - id: LoadoutOuterSecurity - items: - - type: loadout - id: LoadoutClothingOuterArmorPlateCarrier - - type: loadout - id: LoadoutClothingOuterArmorDuraVest - - type: loadout - id: LoadoutClothingOuterCoatDetective - - type: loadout - id: LoadoutOuterVestDetective - - type: loadout - id: LoadoutClothingOuterCoatWarden - - type: loadout - id: LoadoutClothingOuterCoatHoSTrench - - type: loadout - id: LoadoutClothingOuterWinterHoS - - type: loadout - id: LoadoutClothingOuterArmorBasic - - type: loadout - id: LoadoutClothingOuterArmorSlim - -- type: characterItemGroup - id: LoadoutGlovesSecurity - items: - - type: loadout - id: LoadoutClothingHandsGlovesNitrile - -- type: characterItemGroup - id: LoadoutNeckSecurity - items: - - type: loadout - id: LoadoutClothingNeckCloakHos - - type: loadout - id: LoadoutClothingNeckMantleHOS - - type: loadout - id: LoadoutBedsheetBrigmedic - -- type: characterItemGroup - id: LoadoutHeadSecurity + id: LoadoutSecurityBackpacks + maxItems: 1 items: - type: loadout - id: LoadoutSecurityHeadHatBeret - - type: loadout - id: LoadoutClothingHeadHelmetBasic - - type: loadout - id: LoadoutClothingHeadHatBeretBrigmedic - - type: loadout - id: LoadoutClothingHeadHatBeretCorpsman - - type: loadout - id: LoadoutClothingHeadHatBeretWarden - - type: loadout - id: LoadoutClothingHeadHatBeretHoS + id: LoadoutClothingBackSecurity - type: loadout - id: LoadoutClothingHeadHelmetInsulated - -- type: characterItemGroup - id: LoadoutMaskSecurity - items: + id: LoadoutClothingBackSecuritySatchel - type: loadout - id: LoadoutSecurityMaskGasSwat + id: LoadoutClothingBackSecurityDuffel - type: characterItemGroup - id: LoadoutBeltSecurity + id: LoadoutSecurityBelt + maxItems: 1 items: - type: loadout id: LoadoutSecurityBeltWebbing - - type: loadout - id: LoadoutClothingBeltCorpsmanWebbing - type: loadout id: LoadoutClothingBeltSecurity - type: loadout id: LoadoutClothingBeltHolster -- type: characterItemGroup - id: LoadoutEyesSecurity - items: - - type: loadout - id: LoadoutSecurityEyesHudSecurity - - type: loadout - id: ClothingEyesGlassesSunglasses - - type: loadout - id: LoadoutSecurityEyesEyepatchHudSecurity - - type: loadout - id: LoadoutSecurityEyesHudSecurityPrescription - - type: loadout - id: LoadoutClothingEyesGlassesSecurity - -- type: characterItemGroup - id: LoadoutShoesSecurity - items: - - type: loadout - id: LoadoutSecurityShoesJackboots - - type: loadout - id: LoadoutClothingShoesBootsCombat - +#- type: characterItemGroup +# id: LoadoutSecurityEars +# maxItems: 1 +# items: +# - type: characterItemGroup maxItems: 5 - id: LoadoutEquipmentSecurity + id: LoadoutSecurityEquipment items: - type: loadout id: LoadoutSecurityCombatKnife @@ -165,7 +61,7 @@ - type: characterItemGroup maxItems: 1 - id: LoadoutWeaponSecurity + id: LoadoutSecurityWeapons items: - type: loadout id: LoadoutSecurityDisabler @@ -221,31 +117,88 @@ id: LoadoutSecurityRevolverPythonNonlethal - type: characterItemGroup + id: LoadoutSecurityEyes maxItems: 1 - id: LoadoutBackSecurity items: - type: loadout - id: LoadoutClothingBackSecurity + id: LoadoutSecurityEyesHudSecurity - type: loadout - id: LoadoutClothingBackSecuritySatchel + id: ClothingEyesGlassesSunglasses - type: loadout - id: LoadoutClothingBackSecurityDuffel + id: LoadoutSecurityEyesEyepatchHudSecurity + - type: loadout + id: LoadoutSecurityEyesHudSecurityPrescription + - type: loadout + id: LoadoutClothingEyesGlassesSecurity +#- type: characterItemGroup +# id: LoadoutSecurityGloves +# maxItems: 1 +# items: +# - type: characterItemGroup + id: LoadoutSecurityHead maxItems: 1 - id: LoadoutHoSWeapon items: - type: loadout - id: LoadoutCommandHoSPulsePistol + id: LoadoutSecurityHeadHatBeret - type: loadout - id: LoadoutCommandHoSWt550 + id: LoadoutClothingHeadHelmetBasic - type: loadout - id: LoadoutCommandHoSKatanaSheath + id: LoadoutSecurityHeadHelmetInsulated + +#- type: characterItemGroup +# id: LoadoutSecurityId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutSecurityNeck +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutSecurityMask + maxItems: 1 + items: - type: loadout - id: LoadoutCommandHoSC20r + id: LoadoutSecurityMaskGasSwat + +- type: characterItemGroup + id: LoadoutSecurityOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingOuterArmorPlateCarrier + - type: loadout + id: LoadoutClothingOuterArmorDuraVest + - type: loadout + id: LoadoutClothingOuterArmorBasic + - type: loadout + id: LoadoutClothingOuterArmorSlim + +- type: characterItemGroup + id: LoadoutSecurityShoes + maxItems: 1 + items: - type: loadout - id: LoadoutCommandHoSBulldog + id: LoadoutSecurityShoesJackboots - type: loadout - id: LoadoutCommandHoSEnergySword + id: LoadoutClothingShoesBootsCombat + +- type: characterItemGroup + id: LoadoutSecurityUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutSecurityUniformJumpsuitBlue - type: loadout - id: LoadoutCommandHoSEnergyGun + id: LoadoutSecurityUniformJumpsuitGrey + - type: loadout + id: LoadoutSecurityUniformJumpskirtGrey + - type: loadout + id: LoadoutSecurityUniformJumpskirtBlue + - type: loadout + id: LoadoutUniformJumpsuitSecFormal + - type: loadout + id: LoadoutUniformJumpsuitSecSummer diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml new file mode 100644 index 00000000000..1b978323bfc --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/warden.yml @@ -0,0 +1,77 @@ +# Warden +#- type: characterItemGroup +# id: LoadoutWardenBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutWardenHead + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingHeadHatBeretWarden + +#- type: characterItemGroup +# id: LoadoutWardenId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutWardenMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutWardenOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutClothingOuterCoatWarden + +#- type: characterItemGroup +# id: LoadoutWardenShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutWardenUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutUniformJumpsuitWardenBlue + - type: loadout + id: LoadoutUniformJumpsuitWardenGrey + - type: loadout + id: LoadoutUniformJumpskirtWardenBlue + - type: loadout + id: LoadoutUniformJumpskirtWardenGrey diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml new file mode 100644 index 00000000000..74fc945b3f7 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml @@ -0,0 +1,96 @@ +# Bartender +#- type: characterItemGroup +# id: LoadoutBartenderBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBartenderBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBartenderEars +# maxItems: 1 +# items: +# + +- type: characterItemGroup + id: LoadoutBartenderAmmo + items: + - type: loadout + id: LoadoutServiceBartenderBoxBeanbags + - type: loadout + id: LoadoutServiceBartenderBoxLightRifleRubber + +- type: characterItemGroup + id: LoadoutBartenderWeapon + items: + - type: loadout + id: LoadoutServiceBartenderShotgunDoubleBarreledRubber + - type: loadout + id: LoadoutServiceBartenderMosinRubber + +#- type: characterItemGroup +# id: LoadoutBartenderEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBartenderGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutBartenderHead + items: + - type: loadout + id: LoadoutServiceHeadBartenderNt + - type: loadout + id: LoadoutServiceHeadBartenderIdris + - type: loadout + id: LoadoutServiceHeadBartenderOrion + +#- type: characterItemGroup +# id: LoadoutBartenderId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBartenderNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBartenderMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutBartenderOuter + items: + - type: loadout + id: LoadoutServiceBartenderArmorDuraVest + - type: loadout + id: LoadoutServiceOuterBartenderNt + - type: loadout + id: LoadoutServiceOuterBartenderIdris + - type: loadout + id: LoadoutServiceOuterBartenderOrion + +#- type: characterItemGroup +# id: LoadoutBartenderShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutBartenderUniforms + items: + - type: loadout + id: LoadoutServiceBartenderUniformPurple + - type: loadout + id: LoadoutServiceJumpsuitBartenderNt + - type: loadout + id: LoadoutServiceJumpsuitBartenderIdris + - type: loadout + id: LoadoutServiceJumpsuitBartenderOrion diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml new file mode 100644 index 00000000000..334ad0c4fde --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/botanist.yml @@ -0,0 +1,72 @@ +#- type: characterItemGroup +# id: LoadoutBotanistBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutBotanistShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutBotanistUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceBotanistUniformOveralls + - type: loadout + id: LoadoutServiceJumpsuitHydroponicsNt + - type: loadout + id: LoadoutServiceJumpsuitHydroponicsIdris + - type: loadout + id: LoadoutServiceJumpsuitHydroponicsOrion diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/chef.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/chef.yml new file mode 100644 index 00000000000..e6161bcf207 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/chef.yml @@ -0,0 +1,80 @@ +# Chef +#- type: characterItemGroup +# id: LoadoutChefBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefGloves +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChefHead + items: + - type: loadout + id: LoadoutServiceHeadChefNt + - type: loadout + id: LoadoutServiceHeadChefIdris + - type: loadout + id: LoadoutServiceHeadChefOrion + +#- type: characterItemGroup +# id: LoadoutChefId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutChefMask +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChefOuter + items: + - type: loadout + id: LoadoutServiceOuterChefNt + - type: loadout + id: LoadoutServiceOuterChefIdris + - type: loadout + id: LoadoutServiceOuterChefOrion + +#- type: characterItemGroup +# id: LoadoutChefShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutChefUniforms + items: + - type: loadout + id: LoadoutServiceJumpsuitChefNt + - type: loadout + id: LoadoutServiceJumpsuitChefIdris + - type: loadout + id: LoadoutServiceJumpsuitChefOrion diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/clown.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/clown.yml new file mode 100644 index 00000000000..c25c313be70 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/clown.yml @@ -0,0 +1,85 @@ +# Clown +- type: characterItemGroup + id: LoadoutClownBackpacks + maxItems: 1 + items: + - type: loadout + id: LoadoutBackpackClown + - type: loadout + id: LoadoutBackpackSatchelClown + - type: loadout + id: LoadoutBackpackDuffelClown + +#- type: characterItemGroup +# id: LoadoutClownBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutClownId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutClownNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceClownBedsheetClown + +- type: characterItemGroup + id: LoadoutClownMask + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceClownMaskSexy + +- type: characterItemGroup + id: LoadoutClownOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceClownOuterWinter + - type: loadout + id: LoadoutServiceClownOuterClownPriest + +- type: characterItemGroup + id: LoadoutClownShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceClownBootsWinter + +- type: characterItemGroup + id: LoadoutClownUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceClownOutfitJester + - type: loadout + id: LoadoutServiceClownOutfitJesterAlt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml new file mode 100644 index 00000000000..cc5b0e16a33 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/janitor.yml @@ -0,0 +1,71 @@ +# Janitor +#- type: characterItemGroup +# id: LoadoutJanitorBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJanitorShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutJanitorUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceJumpsuitJanitorNt + - type: loadout + id: LoadoutServiceJumpsuitJanitorIdris + - type: loadout + id: LoadoutServiceJumpsuitJanitorOrion diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/lawyer.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/lawyer.yml new file mode 100644 index 00000000000..0a00475cfef --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/lawyer.yml @@ -0,0 +1,81 @@ +# Lawyer +#- type: characterItemGroup +# id: LoadoutLawyerBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutLawyerShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutLawyerUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceLawyerUniformBlueSuit + - type: loadout + id: LoadoutServiceLawyerUniformBlueSkirt + - type: loadout + id: LoadoutServiceLawyerUniformRedSuit + - type: loadout + id: LoadoutServiceLawyerUniformRedSkirt + - type: loadout + id: LoadoutServiceLawyerUniformPurpleSuit + - type: loadout + id: LoadoutServiceLawyerUniformPurpleSkirt + - type: loadout + id: LoadoutServiceLawyerUniformGoodSuit + - type: loadout + id: LoadoutServiceLawyerUniformGoodSkirt diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/mime.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/mime.yml new file mode 100644 index 00000000000..58e3d03e03f --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/mime.yml @@ -0,0 +1,77 @@ +# Mime +#- type: characterItemGroup +# id: LoadoutMimeBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMimeId +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutMimeNeck + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceMimeBedsheetMime + +- type: characterItemGroup + id: LoadoutMimeMask + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceMimeMaskSad + - type: loadout + id: LoadoutServiceMimeMaskScared + - type: loadout + id: LoadoutServiceMimeMaskSexy + +- type: characterItemGroup + id: LoadoutMimeOuter + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceMimeOuterWinter + +- type: characterItemGroup + id: LoadoutMimeShoes + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceMimeShoesBootsWinter + +#- type: characterItemGroup +# id: LoadoutMimeUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml similarity index 74% rename from Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml rename to Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml index eac816b8db4..90943d47950 100644 --- a/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/musician.yml @@ -1,5 +1,21 @@ +# Musician +#- type: characterItemGroup +# id: LoadoutMusicianBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianEars +# maxItems: 1 +# items: +# - type: characterItemGroup - id: LoadoutMusicianInstruments + id: LoadoutMusicianEquipment maxItems: 3 items: # Brass @@ -92,3 +108,48 @@ id: LoadoutItemOcarinaInstrumentMusician - type: loadout id: LoadoutItemBagpipeInstrumentMusician + +#- type: characterItemGroup +# id: LoadoutMusicianEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutMusicianUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/reporter.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/reporter.yml new file mode 100644 index 00000000000..1436cf83a54 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/reporter.yml @@ -0,0 +1,71 @@ +# Reporter +#- type: characterItemGroup +# id: LoadoutReporterBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutReporterShoes +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutReporterUniforms + maxItems: 1 + items: + - type: loadout + id: LoadoutServiceReporterUniformDetectivesuit + - type: loadout + id: LoadoutServiceReporterUniformDetectiveskirt + - type: loadout + id: LoadoutServiceReporterUniformJournalist diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/uncategorized.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/uncategorized.yml new file mode 100644 index 00000000000..b530c421aee --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/uncategorized.yml @@ -0,0 +1,66 @@ +# All Service +#- type: characterItemGroup +# id: LoadoutServiceBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceEars +# maxItems: 1 +# items: +# +- type: characterItemGroup + id: LoadoutServiceEquipment + items: + - type: loadout + id: LoadoutServiceClownCowToolboxFilled + +#- type: characterItemGroup +# id: LoadoutServiceEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutServiceUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/jobItemGroupTemplate.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/jobItemGroupTemplate.yml new file mode 100644 index 00000000000..fe7809493d7 --- /dev/null +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/jobItemGroupTemplate.yml @@ -0,0 +1,66 @@ +# JOB NAME HERE +# When adding a new job, use this template to fill in the item groups +#- type: characterItemGroup +# id: LoadoutJOBBackpacks +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBBelt +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBEars +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBEquipment +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBEyes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBGloves +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBHead +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBId +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBNeck +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBMask +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBOuter +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBShoes +# maxItems: 1 +# items: +# +#- type: characterItemGroup +# id: LoadoutJOBUniforms +# maxItems: 1 +# items: diff --git a/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml b/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml deleted file mode 100644 index 6b12652b33f..00000000000 --- a/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml +++ /dev/null @@ -1,19 +0,0 @@ -- type: characterItemGroup - id: LoadoutOuterCargo - items: - - type: loadout - id: LoadoutCargoOuterWinterCargo - - type: loadout - id: LoadoutCargoOuterWinterMiner - -- type: characterItemGroup - id: LoadoutNeckCargo - items: - - type: loadout - id: LoadoutCargoNeckGoliathCloak - -- type: characterItemGroup - id: LoadoutShoesCargo - items: - - type: loadout - id: LoadoutCargoShoesBootsWinterCargo diff --git a/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml b/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml deleted file mode 100644 index 6db873cecf6..00000000000 --- a/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml +++ /dev/null @@ -1,39 +0,0 @@ -- type: characterItemGroup - id: LoadoutUniformsEngineering - items: - - type: loadout - id: LoadoutEngineeringUniformHazard - - type: loadout - id: LoadoutEngineeringUniformJumpskirtSenior - - type: loadout - id: LoadoutEngineeringUniformJumpsuitSenior - -- type: characterItemGroup - id: LoadoutOuterEngineering - items: - - type: loadout - id: LoadoutEngineeringOuterHazard - - type: loadout - id: LoadoutEngineeringChickenSuit - -- type: characterItemGroup - id: LoadoutHeadEngineering - items: - - type: loadout - id: LoadoutEngineeringHeadBeret - - type: loadout - id: LoadoutEngineeringHeadHardhatBlue - - type: loadout - id: LoadoutEngineeringHeadHardhatOrange - - type: loadout - id: LoadoutEngineeringHeadHardhatRed - - type: loadout - id: LoadoutEngineeringHeadHardhatWhite - - type: loadout - id: LoadoutEngineeringHeadHardhatYellow - -- type: characterItemGroup - id: LoadoutEyesEngineering - items: - - type: loadout - id: LoadoutEngineeringEyesMeson \ No newline at end of file diff --git a/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml b/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml deleted file mode 100644 index 26cb07dae9c..00000000000 --- a/Resources/Prototypes/CharacterItemGroups/scienceGroups.yml +++ /dev/null @@ -1,144 +0,0 @@ -- type: characterItemGroup - id: LoadoutUniformsScience - items: - - type: loadout - id: LoadoutScienceUniformJumpskirtSenior - - type: loadout - id: LoadoutScienceUniformJumpsuitSenior - - type: loadout - id: LoadoutScienceUniformJumpskirtRoboticist - - type: loadout - id: LoadoutScienceUniformJumpsuitRoboticist - - type: loadout - id: LoadoutScienceUniformJumpsuitMonasticRobeDark - - type: loadout - id: LoadoutScienceUniformJumpsuitMonasticRobeLight - -- type: characterItemGroup - id: LoadoutOuterScience - items: - - type: loadout - id: LoadoutScienceOuterCoat - - type: loadout - id: LoadoutScienceOuterLabcoat - - type: loadout - id: LoadoutSciencegOuterCoatRobo - - type: loadout - id: LoadoutScienceOuterWinterSci - - type: loadout - id: LoadoutScienceOuterLabcoatSeniorResearcher - - type: loadout - id: LoadoutScienceOuterExplorerLabcoat - - type: loadout - id: LoadoutOuterRobeTechPriest - - type: loadout - id: LoadoutOuterPlagueSuit - - type: loadout - id: LoadoutOuterNunRobe - - type: loadout - id: LoadoutOuterHoodieBlack - - type: loadout - id: LoadoutOuterHoodieChaplain - - type: loadout - id: LoadoutScienceOuterWinterCoatMantis - -- type: characterItemGroup - id: LoadoutGlovesScience - items: - - type: loadout - id: LoadoutScienceHandsGlovesColorPurple - - type: loadout - id: LoadoutScienceHandsGlovesLatex - - type: loadout - id: LoadoutScienceHandsGlovesRobohands - -- type: characterItemGroup - id: LoadoutNeckScience - items: - - type: loadout - id: LoadoutScienceNeckTieSci - - type: loadout - id: LoadoutScienceNeckScarfStripedPurple - - type: loadout - id: LoadoutScienceNeckStoleChaplain - - type: loadout - id: LoadoutScienceNeckScarfStripedBlack - -- type: characterItemGroup - id: LoadoutMaskScience - items: - - type: loadout - id: LoadoutScienceMaskPlague - -- type: characterItemGroup - id: LoadoutHeadScience - items: - - type: loadout - id: LoadoutScienceHeadHatBeret - - type: loadout - id: LoadoutHeadHoodTechPriest - - type: loadout - id: LoadoutScienceHeadHatFez - - type: loadout - id: LoadoutScienceHeadHatHoodNunHood - - type: loadout - id: LoadoutScienceHeadHatPlaguedoctor - - type: loadout - id: LoadoutScienceHeadHatWitch - - type: loadout - id: LoadoutScienceHeadHatWitch1 - -- type: characterItemGroup - id: LoadoutEyesScience - items: - - type: loadout - id: LoadoutScienceEyesHudDiagnostic - - type: loadout - id: LoadoutScienceEyesEyepatchHudDiag - -- type: characterItemGroup - id: LoadoutShoesScience - items: - - type: loadout - id: LoadoutScienceShoesBootsWinterSci - -# Cataloguer -- type: characterItemGroup - id: LoadoutCataloguerUniforms - items: - - type: loadout - id: LoadoutScienceJumpsuitLibrarianNt - - type: loadout - id: LoadoutScienceJumpsuitLibrarianIdris - - type: loadout - id: LoadoutScienceJumpsuitLibrarianOrion - - type: loadout - id: LoadoutScienceJumpsuitLibrarianHeph - - type: loadout - id: LoadoutScienceJumpsuitLibrarianPMCG - - type: loadout - id: LoadoutScienceJumpsuitLibrarianZav - - type: loadout - id: LoadoutScienceJumpsuitLibrarianZeng - - type: loadout - id: LoadoutScienceJumpsuitLibrarian - - type: loadout - id: LoadoutScienceJumpskirtLibrarian - -# Chaplain -- type: characterItemGroup - id: LoadoutChaplainUniforms - items: - - type: loadout - id: LoadoutChaplainJumpsuit - - type: loadout - id: LoadoutChaplainJumpskirt - -- type: characterItemGroup - id: LoadoutChaplainEquipment - maxItems: 2 - items: - - type: loadout - id: LoadoutChaplainBible - - type: loadout - id: LoadoutChaplainStamp diff --git a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml deleted file mode 100644 index 61c2b286b7e..00000000000 --- a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml +++ /dev/null @@ -1,185 +0,0 @@ -- type: characterItemGroup - id: LoadoutUniformsService - items: - - type: loadout - id: LoadoutServiceClownOutfitJester - - type: loadout - id: LoadoutServiceClownOutfitJesterAlt - - type: loadout - id: LoadoutServiceBartenderUniformPurple - - type: loadout - id: LoadoutServiceBotanistUniformOveralls - - type: loadout - id: LoadoutServiceLawyerUniformBlueSuit - - type: loadout - id: LoadoutServiceLawyerUniformBlueSkirt - - type: loadout - id: LoadoutServiceLawyerUniformRedSuit - - type: loadout - id: LoadoutServiceLawyerUniformRedSkirt - - type: loadout - id: LoadoutServiceLawyerUniformPurpleSuit - - type: loadout - id: LoadoutServiceLawyerUniformPurpleSkirt - - type: loadout - id: LoadoutServiceLawyerUniformGoodSuit - - type: loadout - id: LoadoutServiceLawyerUniformGoodSkirt - - type: loadout - id: LoadoutServiceReporterUniformJournalist - - type: loadout - id: LoadoutServiceReporterUniformDetectivesuit - - type: loadout - id: LoadoutServiceReporterUniformDetectiveskirt - -- type: characterItemGroup - id: LoadoutOuterService - items: - - type: loadout - id: LoadoutServiceClownOuterWinter - - type: loadout - id: LoadoutServiceClownOuterClownPriest - - type: loadout - id: LoadoutServiceMimeOuterWinter - -- type: characterItemGroup - id: LoadoutNeckService - items: - - type: loadout - id: LoadoutServiceClownBedsheetClown - - type: loadout - id: LoadoutServiceMimeBedsheetMime - -- type: characterItemGroup - id: LoadoutMaskService - items: - - type: loadout - id: LoadoutServiceClownMaskSexy - - type: loadout - id: LoadoutServiceMimeMaskSad - - type: loadout - id: LoadoutServiceMimeMaskScared - - type: loadout - id: LoadoutServiceMimeMaskSexy - -- type: characterItemGroup - id: LoadoutShoesService - items: - - type: loadout - id: LoadoutServiceClownBootsWinter - - type: loadout - id: LoadoutServiceMimeShoesBootsWinter - -- type: characterItemGroup - id: LoadoutEquipmentService - items: - - type: loadout - id: LoadoutServiceClownCowToolboxFilled - -- type: characterItemGroup - id: LoadoutHeadService - items: - - type: loadout - id: LoadoutServiceClownCowToolboxFilled - -# Bartender -- type: characterItemGroup - id: LoadoutBartenderOuterwear - items: - - type: loadout - id: LoadoutServiceBartenderArmorDuraVest - - type: loadout - id: LoadoutServiceOuterBartenderNt - - type: loadout - id: LoadoutServiceOuterBartenderIdris - - type: loadout - id: LoadoutServiceOuterBartenderOrion - -- type: characterItemGroup - id: LoadoutBartenderAmmo - items: - - type: loadout - id: LoadoutServiceBartenderBoxBeanbags - - type: loadout - id: LoadoutServiceBartenderBoxLightRifleRubber - -- type: characterItemGroup - id: LoadoutBartenderWeapon - items: - - type: loadout - id: LoadoutServiceBartenderShotgunDoubleBarreledRubber - - type: loadout - id: LoadoutServiceBartenderMosinRubber - -- type: characterItemGroup - id: LoadoutBartenderUniforms - items: - - type: loadout - id: LoadoutServiceJumpsuitBartenderNt - - type: loadout - id: LoadoutServiceJumpsuitBartenderIdris - - type: loadout - id: LoadoutServiceJumpsuitBartenderOrion - -- type: characterItemGroup - id: LoadoutBartenderHead - items: - - type: loadout - id: LoadoutServiceHeadBartenderNt - - type: loadout - id: LoadoutServiceHeadBartenderIdris - - type: loadout - id: LoadoutServiceHeadBartenderOrion - -# Botanist -- type: characterItemGroup - id: LoadoutBotanistUniforms - items: - - type: loadout - id: LoadoutServiceJumpsuitHydroponicsNt - - type: loadout - id: LoadoutServiceJumpsuitHydroponicsIdris - - type: loadout - id: LoadoutServiceJumpsuitHydroponicsOrion - -# Chef -- type: characterItemGroup - id: LoadoutChefUniforms - items: - - type: loadout - id: LoadoutServiceJumpsuitChefNt - - type: loadout - id: LoadoutServiceJumpsuitChefIdris - - type: loadout - id: LoadoutServiceJumpsuitChefOrion - -- type: characterItemGroup - id: LoadoutChefHead - items: - - type: loadout - id: LoadoutServiceHeadChefNt - - type: loadout - id: LoadoutServiceHeadChefIdris - - type: loadout - id: LoadoutServiceHeadChefOrion - -- type: characterItemGroup - id: LoadoutChefOuter - items: - - type: loadout - id: LoadoutServiceOuterChefNt - - type: loadout - id: LoadoutServiceOuterChefIdris - - type: loadout - id: LoadoutServiceOuterChefOrion - -# Janitor -- type: characterItemGroup - id: LoadoutJanitorUniforms - items: - - type: loadout - id: LoadoutServiceJumpsuitJanitorNt - - type: loadout - id: LoadoutServiceJumpsuitJanitorIdris - - type: loadout - id: LoadoutServiceJumpsuitJanitorOrion \ No newline at end of file diff --git a/Resources/Prototypes/DeltaV/Objectives/traitor.yml b/Resources/Prototypes/DeltaV/Objectives/traitor.yml index 2f53b211d9e..828142cdfa7 100644 --- a/Resources/Prototypes/DeltaV/Objectives/traitor.yml +++ b/Resources/Prototypes/DeltaV/Objectives/traitor.yml @@ -7,6 +7,7 @@ job: Quartermaster - type: StealCondition stealGroup: SpaceCashLuckyBill + verifyMapExistence: true # owner: job-name-qm - type: entity # Head of Personnel steal objective. @@ -18,6 +19,7 @@ job: HeadOfPersonnel - type: StealCondition stealGroup: BookIanDossier + verifyMapExistence: true # owner: job-name-hop - type: entity # Clerk steal objective. @@ -29,4 +31,5 @@ job: Clerk - type: StealCondition stealGroup: RubberStampNotary + verifyMapExistence: true owner: job-name-clerk diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 4af443113a7..282d65cfccc 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -56,6 +56,16 @@ storageOpenSound: collection: IanBark +- type: entity + parent: ClothingBackpackIan + id: ClothingBackpackIanFilled + name: Ian's backpack + description: Sometimes he wears it. + components: + - type: StorageFill + contents: + - id: Flash + - type: entity parent: ClothingBackpack id: ClothingBackpackSecurity diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index 252f2f48eae..4c43596f870 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -584,6 +584,46 @@ - ReagentId: SpaceDrugs Quantity: 15 +- type: entity + name: pill canister (LSD 15u) + parent: PillCanister + id: PillCanisterSpaceDrugs + suffix: Space Drugs, 5 + components: + - type: Label + currentLabel: LSD 15u + - type: StorageFill + contents: + - id: PillSpaceDrugs + amount: 5 + +- type: entity + name: pax + parent: Pill + id: PillPax + components: + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: Pax + Quantity: 10 + +- type: entity + name: pill canister (Pax 10u) + parent: PillCanister + id: PillCanisterPax + suffix: Pax, 5 + components: + - type: Label + currentLabel: Pax 10u + - type: StorageFill + contents: + - id: PillPax + amount: 5 + + - type: entity name: pill (tricordrazine 10u) parent: Pill diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 8f062a8620b..57db6326bcc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -277,6 +277,15 @@ - type: StealTarget stealGroup: HoSAntiqueWeapon +- type: entity + name: captain's pulse pistol + parent: WeaponPulsePistol + id: WeaponPulsePistolCaptain + description: A rare and exotic handgun gifted to the station's Captain. Its ivory grip has been engraved with the words, "Glory to the Company, Glory to Mother Sol. Phoron will make us all rich." + components: + - type: StealTarget + stealGroup: WeaponCaptain + - type: entity name: pulse carbine parent: [BaseWeaponBattery, BaseGunWieldable] @@ -595,7 +604,7 @@ - type: StaticPrice price: 750 - type: StealTarget - stealGroup: WeaponAntiqueLaser + stealGroup: WeaponCaptain - type: entity name: advanced laser pistol diff --git a/Resources/Prototypes/Loadouts/Categories/categories.yml b/Resources/Prototypes/Loadouts/Categories/categories.yml index bfda095b193..48de355a517 100644 --- a/Resources/Prototypes/Loadouts/Categories/categories.yml +++ b/Resources/Prototypes/Loadouts/Categories/categories.yml @@ -31,47 +31,222 @@ root: true subCategories: - JobsAUncategorized - - JobsCargo - JobsCommand - JobsEngineering + - JobsEpistemics + - JobsLogistics - JobsMedical - - JobsScience - JobsSecurity - JobsService - type: loadoutCategory id: JobsAUncategorized +# Command +# Only Captain and HoP, Department Specific roles are under their respective Departments. +# If we ever added Centcomm or Blueshield, that would go here. - type: loadoutCategory - id: JobsCargo + id: JobsCommand + subCategories: + - JobsCommandAUncategorized + - JobsCommandCaptain + - JobsCommandHeadOfPersonnel - type: loadoutCategory - id: JobsCommand + id: JobsCommandAUncategorized + +- type: loadoutCategory + id: JobsCommandCaptain + +- type: loadoutCategory + id: JobsCommandHeadOfPersonnel +# Engineering - type: loadoutCategory id: JobsEngineering + subCategories: + - JobsEngineeringAAUncategorized + - JobsEngineeringAtmosphericTechnician + - JobsEngineeringChiefEngineer + - JobsEngineeringSeniorEngineer + - JobsEngineeringStationEngineer + - JobsEngineeringTechnicalAssistant + +- type: loadoutCategory + id: JobsEngineeringAAUncategorized + +- type: loadoutCategory + id: JobsEngineeringAtmosphericTechnician + +- type: loadoutCategory + id: JobsEngineeringChiefEngineer + +- type: loadoutCategory + id: JobsEngineeringSeniorEngineer + +- type: loadoutCategory + id: JobsEngineeringStationEngineer + +- type: loadoutCategory + id: JobsEngineeringTechnicalAssistant + +# Epistemics +- type: loadoutCategory + id: JobsEpistemics + subCategories: + - JobsEpistemicsAAUncategorized + - JobsEpistemicsAcolyte + - JobsEpistemicsCataloger + - JobsEpistemicsChaplain + - JobsEpistemicsGolemancer + - JobsEpistemicsMystagogue + - JobsEpistemicsMystic + - JobsEpistemicsNoviciate + - JobsEpistemicsPsionicMantis + +- type: loadoutCategory + id: JobsEpistemicsAAUncategorized + +- type: loadoutCategory + id: JobsEpistemicsAcolyte + +- type: loadoutCategory + id: JobsEpistemicsCataloger + +- type: loadoutCategory + id: JobsEpistemicsChaplain + +- type: loadoutCategory + id: JobsEpistemicsGolemancer + +- type: loadoutCategory + id: JobsEpistemicsMystagogue + +- type: loadoutCategory + id: JobsEpistemicsMystic + +- type: loadoutCategory + id: JobsEpistemicsNoviciate + +- type: loadoutCategory + id: JobsEpistemicsPsionicMantis + +# Logistics +- type: loadoutCategory + id: JobsLogistics + subCategories: + - JobsLogisticsAUncategorized + - JobsLogisticsCargoTechnician + - JobsLogisticsCourier + - JobsLogisticsLogisticsOfficer + - JobsLogisticsSalvageSpecialist + +- type: loadoutCategory + id: JobsLogisticsAUncategorized + +- type: loadoutCategory + id: JobsLogisticsCargoTechnician +- type: loadoutCategory + id: JobsLogisticsCourier + +- type: loadoutCategory + id: JobsLogisticsLogisticsOfficer + +- type: loadoutCategory + id: JobsLogisticsSalvageSpecialist + +# Medical - type: loadoutCategory id: JobsMedical + subCategories: + - JobsMedicalAUncategorized + - JobsMedicalChemist + - JobsMedicalChiefMedicalOfficer + - JobsMedicalMedicalDoctor + - JobsMedicalMedicalIntern + - JobsMedicalParamedic + - JobsMedicalPsychologist + - JobsMedicalSeniorPhysician + +- type: loadoutCategory + id: JobsMedicalAUncategorized + +- type: loadoutCategory + id: JobsMedicalChemist + +- type: loadoutCategory + id: JobsMedicalChiefMedicalOfficer + +- type: loadoutCategory + id: JobsMedicalMedicalDoctor + +- type: loadoutCategory + id: JobsMedicalMedicalIntern + +- type: loadoutCategory + id: JobsMedicalParamedic + +- type: loadoutCategory + id: JobsMedicalPsychologist - type: loadoutCategory - id: JobsScience + id: JobsMedicalSeniorPhysician +# Security - type: loadoutCategory id: JobsSecurity + subCategories: + - JobsSecurityAUncategorized + - JobsSecurityCadet + - JobsSecurityCorpsman + - JobsSecurityDetective + - JobsSecurityHeadOfSecurity + - JobsSecuritySecurityOfficer + - JobsSecuritySeniorOfficer + - JobsSecurityWarden + +- type: loadoutCategory + id: JobsSecurityAUncategorized +- type: loadoutCategory + id: JobsSecurityCadet + +- type: loadoutCategory + id: JobsSecurityCorpsman + +- type: loadoutCategory + id: JobsSecurityDetective + +- type: loadoutCategory + id: JobsSecurityHeadOfSecurity + +- type: loadoutCategory + id: JobsSecuritySecurityOfficer + +- type: loadoutCategory + id: JobsSecuritySeniorOfficer + +- type: loadoutCategory + id: JobsSecurityWarden + +# Service - type: loadoutCategory id: JobsService subCategories: - - JobsServiceUncategorized + - JobsServiceAUncategorized - JobsServiceBartender - JobsServiceBotanist - JobsServiceChef + - JobsServiceClown - JobsServiceJanitor + - JobsServiceLawyer + - JobsServiceMime - JobsServiceMusician + - JobsServiceReporter - type: loadoutCategory - id: JobsServiceUncategorized + id: JobsServiceAUncategorized - type: loadoutCategory id: JobsServiceBartender @@ -82,12 +257,26 @@ - type: loadoutCategory id: JobsServiceChef +- type: loadoutCategory + id: JobsServiceClown + - type: loadoutCategory id: JobsServiceJanitor +- type: loadoutCategory + id: JobsServiceLawyer + +- type: loadoutCategory + id: JobsServiceMime + - type: loadoutCategory id: JobsServiceMusician +- type: loadoutCategory + id: JobsServiceReporter + +# Now Leaving: Jobs Category + - type: loadoutCategory id: Mask root: true diff --git a/Resources/Prototypes/Loadouts/Generic/backpacks.yml b/Resources/Prototypes/Loadouts/Generic/backpacks.yml new file mode 100644 index 00000000000..8dc72a08827 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Generic/backpacks.yml @@ -0,0 +1,86 @@ +- type: loadout + id: LoadoutBackpack + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpack + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + +- type: loadout + id: LoadoutBackpackMime + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackMime + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterJobRequirement + jobs: + - Mime + +- type: loadout + id: LoadoutBackpackHydroponics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackHydroponics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Civilian + +- type: loadout + id: LoadoutBackpackScience + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackScience + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +- type: loadout + id: LoadoutBackpackRobotics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackRobotics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +- type: loadout + id: LoadoutBackpackMerc + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackMerc + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterLogicOrRequirement + requirements: + - !type:CharacterDepartmentRequirement + departments: + - Security + - Civilian + - !type:CharacterJobRequirement + jobs: + - SalvageSpecialist diff --git a/Resources/Prototypes/Loadouts/Generic/duffelbags.yml b/Resources/Prototypes/Loadouts/Generic/duffelbags.yml new file mode 100644 index 00000000000..8e7102d6f1b --- /dev/null +++ b/Resources/Prototypes/Loadouts/Generic/duffelbags.yml @@ -0,0 +1,80 @@ +- type: loadout + id: LoadoutBackpackDuffel + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffel + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + +- type: loadout + id: LoadoutBackpackDuffelSecurity + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelSecurity + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Security + +- type: loadout + id: LoadoutBackpackDuffelMime + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelMime + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterJobRequirement + jobs: + - Mime + +- type: loadout + id: LoadoutBackpackDuffelHydroponics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelHydroponics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Civilian + +- type: loadout + id: LoadoutBackpackDuffelScience + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelScience + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +- type: loadout + id: LoadoutBackpackDuffelRobotics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelRobotics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics diff --git a/Resources/Prototypes/Loadouts/eyes.yml b/Resources/Prototypes/Loadouts/Generic/eyes.yml similarity index 100% rename from Resources/Prototypes/Loadouts/eyes.yml rename to Resources/Prototypes/Loadouts/Generic/eyes.yml diff --git a/Resources/Prototypes/Loadouts/hands.yml b/Resources/Prototypes/Loadouts/Generic/hands.yml similarity index 100% rename from Resources/Prototypes/Loadouts/hands.yml rename to Resources/Prototypes/Loadouts/Generic/hands.yml diff --git a/Resources/Prototypes/Loadouts/head.yml b/Resources/Prototypes/Loadouts/Generic/head.yml similarity index 100% rename from Resources/Prototypes/Loadouts/head.yml rename to Resources/Prototypes/Loadouts/Generic/head.yml diff --git a/Resources/Prototypes/Loadouts/items.yml b/Resources/Prototypes/Loadouts/Generic/items.yml similarity index 100% rename from Resources/Prototypes/Loadouts/items.yml rename to Resources/Prototypes/Loadouts/Generic/items.yml diff --git a/Resources/Prototypes/Loadouts/mask.yml b/Resources/Prototypes/Loadouts/Generic/mask.yml similarity index 100% rename from Resources/Prototypes/Loadouts/mask.yml rename to Resources/Prototypes/Loadouts/Generic/mask.yml diff --git a/Resources/Prototypes/Loadouts/neck.yml b/Resources/Prototypes/Loadouts/Generic/neck.yml similarity index 100% rename from Resources/Prototypes/Loadouts/neck.yml rename to Resources/Prototypes/Loadouts/Generic/neck.yml diff --git a/Resources/Prototypes/Loadouts/outerClothing.yml b/Resources/Prototypes/Loadouts/Generic/outerClothing.yml similarity index 100% rename from Resources/Prototypes/Loadouts/outerClothing.yml rename to Resources/Prototypes/Loadouts/Generic/outerClothing.yml diff --git a/Resources/Prototypes/Loadouts/Generic/satchels.yml b/Resources/Prototypes/Loadouts/Generic/satchels.yml new file mode 100644 index 00000000000..dbb9c1a2040 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Generic/satchels.yml @@ -0,0 +1,93 @@ +- type: loadout + id: LoadoutBackpackSatchel + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchel + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + +- type: loadout + id: LoadoutItemBackpackSatchelLeather + category: Backpacks + cost: 1 + exclusive: true + items: + - ClothingBackpackSatchelLeather + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner + +- type: loadout + id: LoadoutBackpackSatchelSecurity + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelSecurity + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Security + +- type: loadout + id: LoadoutBackpackSatchelMime + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelMime + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterJobRequirement + jobs: + - Mime + +- type: loadout + id: LoadoutBackpackSatchelHydroponics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelHydroponics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Civilian + +- type: loadout + id: LoadoutBackpackSatchelScience + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelScience + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +- type: loadout + id: LoadoutBackpackSatchelRobotics + category: Backpacks + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelRobotics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Epistemics diff --git a/Resources/Prototypes/Loadouts/shoes.yml b/Resources/Prototypes/Loadouts/Generic/shoes.yml similarity index 100% rename from Resources/Prototypes/Loadouts/shoes.yml rename to Resources/Prototypes/Loadouts/Generic/shoes.yml diff --git a/Resources/Prototypes/Loadouts/species.yml b/Resources/Prototypes/Loadouts/Generic/species.yml similarity index 100% rename from Resources/Prototypes/Loadouts/species.yml rename to Resources/Prototypes/Loadouts/Generic/species.yml diff --git a/Resources/Prototypes/Loadouts/uniform.yml b/Resources/Prototypes/Loadouts/Generic/uniform.yml similarity index 100% rename from Resources/Prototypes/Loadouts/uniform.yml rename to Resources/Prototypes/Loadouts/Generic/uniform.yml diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml new file mode 100644 index 00000000000..d4676e124d5 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml @@ -0,0 +1,492 @@ +# Captain +# Backpacks +- type: loadout + id: LoadoutBackpackCaptain + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackCaptain + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +- type: loadout + id: LoadoutBackpackSatchelCaptain + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelCaptain + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +- type: loadout + id: LoadoutBackpackDuffelCaptain + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelCaptain + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +- type: loadout + id: LoadoutBackpackCaptainFilled + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackCaptainFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +- type: loadout + id: LoadoutBackpackSatchelCaptainFilled + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelCaptainFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +- type: loadout + id: LoadoutBackpackDuffelCaptainFilled + category: JobsCommandCaptain + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelCaptainFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBackpacks + - !type:CharacterJobRequirement + jobs: + - Captain + +# Belt +- type: loadout + id: LoadoutCaptainSwordSheath + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainBelt + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingBeltSheathFilled + +# Ears + +# Equipment +- type: loadout + id: LoadoutCaptainDrinkFlask + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainTrinkets + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - DrinkFlask + +- type: loadout + id: LoadoutCaptainMedalCase + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainTrinkets + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - MedalCase + +- type: loadout + id: LoadoutCaptainSpaceCash1000 + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainTrinkets + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - SpaceCash1000 + +- type: loadout + id: LoadoutCaptainCigarCase + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainTrinkets + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - CigarGoldCase + +- type: loadout + id: LoadoutCaptainAntiqueLaserPistol + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainWeapon + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - WeaponAntiqueLaser + +- type: loadout + id: LoadoutCaptainPulsePistol + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainWeapon + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - WeaponPulsePistolCaptain + +# Eyes +- type: loadout + id: LoadoutCaptainEyesSunglasses + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainEyes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingEyesGlassesSunglasses + +# Gloves +- type: loadout + id: LoadoutCaptainGlovesCapGloves + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainGloves + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingHandsGlovesCaptain + +- type: loadout + id: LoadoutCaptainGlovesInspection + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainGloves + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingHandsGlovesInspection + +# Head +- type: loadout + id: LoadoutCommandCapHat + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainHead + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingHeadHatCaptain + +- type: loadout + id: LoadoutCommandCapHatCapcap + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainHead + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingHeadHatCapcap + +- type: loadout + id: LoadoutCommandCapHatBeret + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainHead + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingHeadHatBeretCap + +# Id +- type: loadout + id: LoadoutCaptainNTPDA + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobCaptain + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainId + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - CaptainNTPDA + +# Neck +- type: loadout + id: LoadoutCommandCapNeckMantle + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainNeck + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingNeckMantleCap + +- type: loadout + id: LoadoutCommandCapNeckCloak + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainNeck + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingNeckCloakCap + +- type: loadout + id: LoadoutCommandCapNeckCloakFormal + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainNeck + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingNeckCloakCapFormal + +- type: loadout + id: LoadoutCaptainNeckGoldMedal + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainNeck + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingNeckGoldmedal + +# Mask +- type: loadout + id: LoadoutCommandCapMaskGas + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainMask + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingMaskGasCaptain + +# Outer +- type: loadout + id: LoadoutCommandCapOuterWinter + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainOuter + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingOuterWinterCap + +- type: loadout + id: LoadoutCaptainOuterCarapace + category: JobsCommandCaptain + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainOuter + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingOuterArmorCaptainCarapace + +# Shoes +- type: loadout + id: LoadoutCaptainShoesLaceup + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesBootsLaceup + +- type: loadout + id: LoadoutCaptainShoesLeather + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesLeather + +- type: loadout + id: LoadoutCaptainShoesWinter + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesBootsWinterCap + +- type: loadout + id: LoadoutCaptainShoesCombat + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesBootsCombatFilled + +# Uniforms +- type: loadout + id: LoadoutCommandCapJumpsuit + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainUniforms + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingUniformJumpsuitCaptain + +- type: loadout + id: LoadoutCommandCapJumpskirt + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainUniforms + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingUniformJumpskirtCaptain + +- type: loadout + id: LoadoutCommandCapJumpsuitFormal + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainUniforms + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingUniformJumpsuitCapFormal + +- type: loadout + id: LoadoutCommandCapJumpskirtFormal + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCaptainUniforms + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingUniformJumpskirtCapFormalDress diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/headOfPersonnel.yml b/Resources/Prototypes/Loadouts/Jobs/Command/headOfPersonnel.yml new file mode 100644 index 00000000000..474d9ab07ee --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Command/headOfPersonnel.yml @@ -0,0 +1,409 @@ +# Head Of Personnel +# Backpacks +- type: loadout + id: LoadoutHeadOfPersonnelBackpacksBackpackFilled + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBackpacks + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingBackpackHOPFilled + +- type: loadout + id: LoadoutHeadOfPersonnelBackpacksSatchelFilled + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBackpacks + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingBackpackSatchelHOPFilled + +- type: loadout + id: LoadoutHeadOfPersonnelBackpacksDuffelFilled + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBackpacks + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingBackpackDuffelHOPFilled + +- type: loadout + id: LoadoutCommandHOPBackIan + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBackpacks + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingBackpackIan + +- type: loadout + id: LoadoutCommandHOPBackIanFilled + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBackpacks + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingBackpackIanFilled + +# Belt +- type: loadout + id: LoadoutHeadOfPersonnelBeltClipboard + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelBelt + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - BoxFolderClipboard + +# Ears + +# Equipment +- type: loadout + id: LoadoutHeadOfPersonnelCigarCase + category: JobsCommandHeadOfPersonnel + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelTrinkets + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - CigarGoldCase + +- type: loadout + id: LoadoutHeadOfPersonnelBookIanDossier + category: JobsCommandHeadOfPersonnel + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelTrinkets + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - BookIanDossier + +# Eyes + +# Gloves +- type: loadout + id: LoadoutHeadOfPersonnelGlovesHoP + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelGloves + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingHandsGlovesHop + +- type: loadout + id: LoadoutHeadOfPersonnelGlovesInspection + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelGloves + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingHandsGlovesInspection + +# Head +- type: loadout + id: LoadoutCommandHOPHatCap + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelHead + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingHeadHatHopcap + +# Id +- type: loadout + id: LoadoutHeadOfPersonnelNTPDA + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobHeadOfPersonnel + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelId + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - HoPNTPDA + +# Neck +- type: loadout + id: LoadoutCommandHOPNeckMantle + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelNeck + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingNeckMantleHOP + +- type: loadout + id: LoadoutCommandHOPNeckCloak + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelNeck + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingNeckCloakHop + +- type: loadout + id: LoadoutCommandHOPBedsheetIan + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelNeck + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - BedsheetIan + +- type: loadout + id: LoadoutHeadOfPersonnelNeckGoldMedal + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelNeck + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingNeckGoldmedal + +# Mask + +# Outer +- type: loadout + id: LoadoutcommandHOPOuterCoatFormal + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelOuter + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingOuterCoatHoPFormal + +- type: loadout + id: LoadoutHeadOfPersonnelOuterWinter + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelOuter + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingOuterWinterHoP + +- type: loadout + id: LoadoutHeadOfPersonnelOuterArmoredCoat + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelOuter + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingOuterCoatHoPArmored + +- type: loadout + id: LoadoutHeadOfPersonnelOuterDuraVest + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelOuter + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingOuterArmorDuraVest + +# Shoes +- type: loadout + id: LoadoutHeadOfPersonnelShoesLaceup + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesBootsLaceup + +- type: loadout + id: LoadoutHeadOfPersonnelShoesLeather + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelShoes + - !type:CharacterJobRequirement + jobs: + - Captain + items: + - ClothingShoesLeather + +- type: loadout + id: LoadoutCommandHOPShoesBootsWinter + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelShoes + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingShoesBootsWinterHeadOfPersonel + +# Uniforms +- type: loadout + id: LoadoutHeadOfPersonnelUniformJumpsuit + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingUniformJumpsuitHoP + +- type: loadout + id: LoadoutHeadOfPersonnelUniformJumpskirt + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingUniformJumpskirtHoP + +- type: loadout + id: LoadoutCommandHOPJumpsuitTurtleneckBoatswain + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingUniformJumpsuitBoatswain + +- type: loadout + id: LoadoutCommandHOPJumpsuitMess + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingUniformJumpsuitHoPMess + +- type: loadout + id: LoadoutCommandHOPJumpskirtMess + category: JobsCommandHeadOfPersonnel + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfPersonnelUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfPersonnel + items: + - ClothingUniformJumpskirtHoPMess diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Command/uncategorized.yml new file mode 100644 index 00000000000..86cf66873d6 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Command/uncategorized.yml @@ -0,0 +1,81 @@ +# Uncategorized +# Backpacks + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutCommandTelescopicBaton + category: JobsCommandAUncategorized + cost: 3 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCommandSelfDefense + - !type:CharacterDepartmentRequirement + departments: + - Command + items: + - TelescopicBaton + +- type: loadout + id: LoadoutCommandDisabler + category: JobsCommandAUncategorized + cost: 2 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCommandSelfDefense + - !type:CharacterDepartmentRequirement + departments: + - Command + items: + - WeaponDisabler + +- type: loadout + id: LoadoutCommandStunBaton + category: JobsCommandAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCommandSelfDefense + - !type:CharacterDepartmentRequirement + departments: + - Command + items: + - Stunbaton + +- type: loadout + id: LoadoutCommandFlash + category: JobsCommandAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCommandSelfDefense + - !type:CharacterDepartmentRequirement + departments: + - Command + items: + - Flash + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml new file mode 100644 index 00000000000..99482ca57b2 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/atmosphericTechnician.yml @@ -0,0 +1,226 @@ +# Atmospheric Technician +# Backpacks +- type: loadout + id: LoadoutAtmosphericTechnicianBackpackBackpack + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianBackpacks + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingBackpackAtmospherics + +- type: loadout + id: LoadoutAtmosphericTechnicianBackpackSatchel + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianBackpacks + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingBackpackSatchelAtmospherics + +- type: loadout + id: LoadoutAtmosphericTechnicianBackpackDuffel + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianBackpacks + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingBackpackDuffelAtmospherics + +# Belt +- type: loadout + id: LoadoutAtmosphericTechnicianBeltUtility + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianBelt + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingBeltUtility + +- type: loadout + id: LoadoutAtmosphericTechnicianBeltUtilityAtmos + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianBelt + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingBeltUtilityAtmos + +# Ears + +# Equipment +- type: loadout + id: LoadoutAtmosphericTechnicianEquipmentBoxInflatable + category: JobsEngineeringAtmosphericTechnician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianEquipment + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - BoxInflatable + +- type: loadout + id: LoadoutAtmosphericTechnicianEquipmentMedkitOxygen + category: JobsEngineeringAtmosphericTechnician + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianEquipment + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - MedkitOxygenFilled + +- type: loadout + id: LoadoutAtmosphericTechnicianEquipmentRCD + category: JobsEngineeringAtmosphericTechnician + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianEquipment + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - RCD + - RCDAmmo + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutAtmosphericTechnicianChickenhead + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianHead + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingHeadHatChickenhead +# Id + +# Neck + +# Mask +- type: loadout + id: LoadoutAtmosphericTechnicianMaskGasAtmos + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianMask + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingMaskGasAtmos + +# Outer +- type: loadout + id: LoadoutAtmosphericTechnicianChickenSuit + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianOuter + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingOuterSuitChicken + +# Shoes +- type: loadout + id: LoadoutAtmosphericTechnicianShoesWhite + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianShoes + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingShoesColorWhite + +- type: loadout + id: LoadoutAtmosphericTechnicianShoesWork + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianShoes + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingShoesBootsWork + +# Uniforms +- type: loadout + id: LoadingEngineeringAtmosUniformSuit + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianUniforms + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingUniformJumpsuitAtmos + +- type: loadout + id: LoadingEngineeringAtmosUniformSkirt + category: JobsEngineeringAtmosphericTechnician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutAtmosphericTechnicianUniforms + - !type:CharacterJobRequirement + jobs: + - AtmosphericTechnician + items: + - ClothingUniformJumpskirtAtmos + diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/chiefEngineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/chiefEngineer.yml new file mode 100644 index 00000000000..db500b7ef7e --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/chiefEngineer.yml @@ -0,0 +1,256 @@ +# Chief Engineer +# Backpacks +- type: loadout + id: LoadoutEngineeringChiefEngineerBackpackBackpack + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerBackpack + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingBackpackChiefEngineerFilled + +- type: loadout + id: LoadoutEngineeringChiefEngineerBackpackSatchel + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerBackpack + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingBackpackSatchelChiefEngineerFilled + +- type: loadout + id: LoadoutEngineeringChiefEngineerBackpackDuffel + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerBackpack + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingBackpackDuffelChiefEngineerFilled + +# Belt +- type: loadout + id: LoadoutChiefEngineerBelt + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerBelt + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingBeltChiefEngineer + +- type: loadout + id: LoadoutChiefEngineerBeltFilled + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerBelt + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingBeltChiefEngineerFilled + +# Ears + +# Equipment +- type: loadout + id: LoadoutChiefEngineerEquipmentBoxInflatable + category: JobsEngineeringChiefEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - BoxInflatable + +- type: loadout + id: LoadoutChiefEngineerEquipmentMedkitOxygen + category: JobsEngineeringChiefEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - MedkitOxygenFilled + +- type: loadout + id: LoadoutChiefEngineerEquipmentRCD + category: JobsEngineeringChiefEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - RCD + - RCDAmmo + +- type: loadout + id: LoadoutChiefEngineerEquipmentRCDAmmoSpare + category: JobsEngineeringChiefEngineer + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - RCDAmmo + - RCDAmmo + +# Eyes + +# Gloves + +# Head + +# Id +- type: loadout + id: LoadoutChiefEngineerNTPDA + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobChiefEngineer + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerId + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - CENTPDA + +# Neck +- type: loadout + id: LoadoutEngineeringChiefEngineerNeckMantle + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingNeckMantleCE + +- type: loadout + id: LoadoutEngineeringChiefEngineerNeckCloak + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingNeckCloakCe + +- type: loadout + id: LoadoutEngineeringChiefEngineerNeckEngineerMedal + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingNeckEngineermedal + +# Mask + +# Outer +- type: loadout + id: LoadoutCommandCEOuterWinter + category: JobsEngineeringChiefEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerOuter + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingOuterWinterCE + +# Shoes +- type: loadout + id: LoadoutChiefEngineerShoesBootsWinter + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerShoes + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingShoesBootsWinterChiefEngineer + +# Uniforms +- type: loadout + id: LoadoutChiefEngineerUniformSuit + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingUniformJumpsuitChiefEngineer + +- type: loadout + id: LoadoutEngineeringChiefEngineerUniformSkirt + category: JobsEngineeringChiefEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefEngineerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefEngineer + items: + - ClothingUniformJumpskirtChiefEngineer diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/seniorEngineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/seniorEngineer.yml new file mode 100644 index 00000000000..c507d073cdb --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/seniorEngineer.yml @@ -0,0 +1,159 @@ +# Senior Engineer +# Backpacks + +# Belt +- type: loadout + id: LoadoutSeniorEngineerBeltUtility + category: JobsEngineeringSeniorEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerBelt + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - ClothingBeltUtility + +- type: loadout + id: LoadoutSeniorEngineerBeltUtilityEngineering + category: JobsEngineeringSeniorEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerBelt + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - ClothingBeltUtilityEngineering + +- type: loadout + id: LoadoutSeniorEngineerBeltUtilityAtmos + category: JobsEngineeringSeniorEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerBelt + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - ClothingBeltUtilityAtmos + +# Ears + +# Equipment +- type: loadout + id: LoadoutSeniorEngineerEquipmentBoxInflatable + category: JobsEngineeringSeniorEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - BoxInflatable + +- type: loadout + id: LoadoutSeniorEngineerEquipmentMedkitOxygen + category: JobsEngineeringSeniorEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - MedkitOxygenFilled + +- type: loadout + id: LoadoutSeniorEngineerEquipmentRCD + category: JobsEngineeringSeniorEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - RCD + - RCDAmmo + +- type: loadout + id: LoadoutSeniorEngineerEquipmentRCDAmmo1 + category: JobsEngineeringSeniorEngineer + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - RCDAmmo + +- type: loadout + id: LoadoutSeniorEngineerEquipmentRCDAmmo2 + category: JobsEngineeringSeniorEngineer + cost: 1 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - RCDAmmo + +# Eyes + +# Gloves + +# Head + +# Id + +# Mask + +# Neck + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutEngineeringUniformJumpskirtSenior + category: JobsEngineeringSeniorEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - ClothingUniformJumpskirtSeniorEngineer + +- type: loadout + id: LoadoutEngineeringUniformJumpsuitSenior + category: JobsEngineeringSeniorEngineer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorEngineerUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - ClothingUniformJumpsuitSeniorEngineer diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/stationEngineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/stationEngineer.yml new file mode 100644 index 00000000000..1d060256452 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/stationEngineer.yml @@ -0,0 +1,52 @@ +# Station Engineer +# Backpack + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutStationEngineerEquipmentBoxInflatable + category: JobsEngineeringStationEngineer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutStationEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - StationEngineer + items: + - BoxInflatable + +- type: loadout + id: LoadoutStationEngineerEquipmentRCD + category: JobsEngineeringStationEngineer + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutStationEngineerEquipment + - !type:CharacterJobRequirement + jobs: + - SeniorEngineer + items: + - RCD + - RCDAmmo + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/technicalAssistant.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/technicalAssistant.yml new file mode 100644 index 00000000000..21133494ddf --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/technicalAssistant.yml @@ -0,0 +1,26 @@ +# Technical Assistant +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml new file mode 100644 index 00000000000..283448126b6 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/uncategorized.yml @@ -0,0 +1,257 @@ +# All Engineering Department Jobs +# Backpacks +- type: loadout + id: LoadoutBackpackEngineering + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackEngineering + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Engineering + +- type: loadout + id: LoadoutBackpackSatchelEngineering + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelEngineering + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Engineering + +- type: loadout + id: LoadoutBackpackDuffelEngineering + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelEngineering + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Engineering +# Belt + +# Ears + +# Equipment + +# Eyes +- type: loadout + id: LoadoutEngineeringEyesMeson + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEyesEngineering + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingEyesGlassesMeson + +# Gloves +- type: loadout + id: LoadoutEngineeringGlovesInsulated + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringGloves + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHandsGlovesColorYellow + +- type: loadout + id: LoadoutEngineeringGlovesCombat + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringGloves + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHandsGlovesCombat + +- type: loadout + id: LoadoutEngineeringGlovesMerc + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringGloves + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHandsMercGlovesCombat + +# Head +- type: loadout + id: LoadoutEngineeringHeadBeret + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatBeretEngineering + +- type: loadout + id: LoadoutEngineeringHeadHardhatBlue + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatHardhatBlue + +- type: loadout + id: LoadoutEngineeringHeadHardhatOrange + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatHardhatOrange + +- type: loadout + id: LoadoutEngineeringHeadHardhatYellow + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatHardhatYellow + +- type: loadout + id: LoadoutEngineeringHeadHardhatWhite + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatHardhatWhite + +- type: loadout + id: LoadoutEngineeringHeadHardhatRed + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringHead + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingHeadHatHardhatRed + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutEngineeringOuterHazard + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringOuter + - !type:CharacterDepartmentRequirement + departments: + - Engineering + items: + - ClothingOuterVestHazard + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutEngineeringUniformSuit + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringUniforms + - !type:CharacterJobRequirement + jobs: + - StationEngineer + items: + - ClothingUniformJumpsuitEngineering + +- type: loadout + id: LoadoutEngineeringUniformSkirt + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringUniforms + - !type:CharacterJobRequirement + jobs: + - StationEngineer + items: + - ClothingUniformJumpskirtEngineering + +- type: loadout + id: LoadoutEngineeringUniformHazard + category: JobsEngineeringAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEngineeringUniforms + - !type:CharacterJobRequirement + jobs: + - StationEngineer + items: + - ClothingUniformJumpsuitEngineeringHazard diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/acolyte.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/acolyte.yml new file mode 100644 index 00000000000..d0c82c617e6 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/acolyte.yml @@ -0,0 +1,26 @@ +# Acolyte +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/cataloger.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/cataloger.yml new file mode 100644 index 00000000000..f0e78102258 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/cataloger.yml @@ -0,0 +1,163 @@ +# Cataloger +# Backpacks + +# Belt + +# Ears + +# Equipment +#- type: loadout +# id: LoadoutCatalogerEquipmentPotentiometer +# category: JobsEpistemicsCataloger +# cost: 0 +# requirements: +# - !type:CharacterItemGroupRequirement +# group: LoadoutCataloguerUniforms +# - !type:CharacterJobRequirement +# jobs: +# - Librarian +# items: +# - PsiPotentiometerHandheld + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutScienceJumpsuitLibrarianNt + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianNt + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianIdris + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianIdris + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianOrion + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianOrion + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianHeph + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianHeph + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianPMCG + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianPMCG + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianZav + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianZav + +- type: loadout + id: LoadoutScienceJumpsuitLibrarianZeng + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarianZeng + +- type: loadout + id: LoadoutScienceJumpsuitLibrarian + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpsuitLibrarian + +- type: loadout + id: LoadoutScienceJumpskirtLibrarian + category: JobsEpistemicsCataloger + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCatalogerUniforms + - !type:CharacterJobRequirement + jobs: + - Librarian + items: + - ClothingUniformJumpskirtLibrarian diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/chaplain.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/chaplain.yml new file mode 100644 index 00000000000..a713ea78bb1 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/chaplain.yml @@ -0,0 +1,244 @@ +# Chaplain +# Backpacks + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutChaplainBible + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainEquipment + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - Bible + +- type: loadout + id: LoadoutChaplainStamp + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainEquipment + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - RubberStampChaplain + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutScienceHeadHatHoodNunHood + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainHead + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingHeadHatHoodNunHood + +- type: loadout + id: LoadoutScienceHeadHatPlaguedoctor + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainHead + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingHeadHatPlaguedoctor + +- type: loadout + id: LoadoutScienceHeadHatWitch + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainHead + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingHeadHatWitch + +- type: loadout + id: LoadoutScienceHeadHatWitch1 + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainHead + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingHeadHatWitch1 + +# Id + +# Neck +- type: loadout + id: LoadoutScienceNeckStoleChaplain + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainNeck + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingNeckStoleChaplain + +# Mask +- type: loadout + id: LoadoutScienceMaskPlague + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainMask + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingMaskPlague + +# Outer +- type: loadout + id: LoadoutScienceOuterPlagueSuit + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainOuter + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingOuterPlagueSuit + +- type: loadout + id: LoadoutScienceOuterNunRobe + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainOuter + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingOuterNunRobe + +- type: loadout + id: LoadoutScienceOuterHoodieBlack + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainOuter + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingOuterHoodieBlack + +- type: loadout + id: LoadoutScienceOuterHoodieChaplain + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainOuter + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingOuterHoodieChaplain + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutChaplainJumpsuit + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainUniforms + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingUniformJumpsuitChaplain + +- type: loadout + id: LoadoutChaplainJumpskirt + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainUniforms + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingUniformJumpskirtChaplain + +- type: loadout + id: LoadoutScienceUniformJumpsuitMonasticRobeDark + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainUniforms + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingUniformJumpsuitMonasticRobeDark + +- type: loadout + id: LoadoutScienceUniformJumpsuitMonasticRobeLight + category: JobsEpistemicsChaplain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChaplainUniforms + - !type:CharacterJobRequirement + jobs: + - Chaplain + items: + - ClothingUniformJumpsuitMonasticRobeLight diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml new file mode 100644 index 00000000000..f3972aa05b0 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/golemancer.yml @@ -0,0 +1,53 @@ +# Golemancer +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutScienceUniformJumpskirtRoboticist + category: JobsEpistemicsGolemancer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutGolemancerUniforms + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingUniformJumpskirtRoboticist + +- type: loadout + id: LoadoutScienceUniformJumpsuitRoboticist + category: JobsEpistemicsGolemancer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutGolemancerUniforms + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingUniformJumpsuitRoboticist diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystagogue.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystagogue.yml new file mode 100644 index 00000000000..5b7a3c81bee --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystagogue.yml @@ -0,0 +1,230 @@ +# Mystagogue +# Backpacks +- type: loadout + id: LoadoutMystagogueBackpacksBackpack + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueBackpacks + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingBackpackResearchDirectorFilled + +- type: loadout + id: LoadoutMystagogueBackpacksSatchel + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueBackpacks + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingBackpackSatchelResearchDirectorFilled + +- type: loadout + id: LoadoutMystagogueBackpacksDuffel + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueBackpacks + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingBackpackDuffelResearchDirectorFilled + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutCommandRDHeadHatBeretMysta + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueHead + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingHeadHatBeretMysta + +- type: loadout + id: LoadoutCommandRDHeadHoodMysta + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueHead + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingHeadHoodMysta + +# Id +- type: loadout + id: LoadoutMystagogueNTPDA + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobResearchDirector + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueId + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - RnDNTPDA + +# Neck +- type: loadout + id: LoadoutCommandRDNeckMantle + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueNeck + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingNeckMantleRD + +- type: loadout + id: LoadoutCommandRDNeckCloak + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueNeck + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingNeckCloakRd + +- type: loadout + id: LoadoutCommandRDNeckCloakMystagogue + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueNeck + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingNeckCloakMystagogue + +- type: loadout + id: LoadoutMystagogueNeckSciencemedal + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueNeck + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingNeckSciencemedal + +# Mask + +# Outer +- type: loadout + id: LoadoutCommandRDOuterWinter + category: JobsEpistemicsMystagogue + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueOuter + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingOuterWinterRD + +- type: loadout + id: LoadoutCommandRDOuterMysta + category: JobsEpistemicsMystagogue + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueOuter + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingOuterCoatRndMysta + +# Shoes +- type: loadout + id: LoadoutCommandRDShoesBootsWinter + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueShoes + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingShoesBootsWinterMystagogue + +# Uniforms +- type: loadout + id: LoadoutMystagogueUniformJumpsuit + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueUniforms + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingUniformJumpsuitResearchDirector + +- type: loadout + id: LoadoutMystagogueUniformJumpskirt + category: JobsEpistemicsMystagogue + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMystagogueUniforms + - !type:CharacterJobRequirement + jobs: + - ResearchDirector + items: + - ClothingUniformJumpskirtResearchDirector diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystic.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystic.yml new file mode 100644 index 00000000000..b390adefdaa --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/mystic.yml @@ -0,0 +1,66 @@ +# Mystic +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutScienceOuterLabcoatSeniorResearcher + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMysticOuter + - !type:CharacterJobRequirement + jobs: + - SeniorResearcher + items: + - ClothingOuterCoatLabSeniorResearcher + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutScienceUniformJumpskirtSenior + category: JobsEpistemicsMystic + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMysticUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorResearcher + items: + - ClothingUniformJumpskirtSeniorResearcher + +- type: loadout + id: LoadoutScienceUniformJumpsuitSenior + category: JobsEpistemicsMystic + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMysticUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorResearcher + items: + - ClothingUniformJumpsuitSeniorResearcher diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/noviciate.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/noviciate.yml new file mode 100644 index 00000000000..429a82bf9fe --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/noviciate.yml @@ -0,0 +1,26 @@ +# Noviciate +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/psionicMantis.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/psionicMantis.yml new file mode 100644 index 00000000000..c3396a4bdfd --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/psionicMantis.yml @@ -0,0 +1,40 @@ +# Psionic Mantis +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutScienceOuterWinterCoatMantis + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsionicMantisOuter + - !type:CharacterJobRequirement + jobs: + - ForensicMantis + items: + - ClothingOuterWinterCoatMantis + + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Epistemics/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Epistemics/uncategorized.yml new file mode 100644 index 00000000000..43f8623fb05 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Epistemics/uncategorized.yml @@ -0,0 +1,271 @@ +# Uniforms +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes +- type: loadout + id: LoadoutScienceEyesHudDiagnostic + category: JobsEpistemicsAAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsEyes + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingEyesHudDiagnostic + +- type: loadout + id: LoadoutScienceEyesEyepatchHudDiag + category: JobsEpistemicsAAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsEyes + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingEyesEyepatchHudDiag + +# Gloves +- type: loadout + id: LoadoutScienceHandsGlovesColorPurple + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsGloves + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingHandsGlovesColorPurple + +- type: loadout + id: LoadoutScienceHandsGlovesLatex + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsGloves + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingHandsGlovesLatex + +- type: loadout + id: LoadoutScienceHandsGlovesRobohands + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsGloves + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingHandsGlovesRobohands + +# Head +- type: loadout + id: LoadoutScienceHeadHatBeret + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsHead + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingHeadHatBeretRND + +- type: loadout + id: LoadoutScienceHeadHatFez + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsHead + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingHeadHatFez + +- type: loadout + id: LoadoutHeadHoodTechPriest + category: Head + cost: 0 + exclusive: true + items: + - ClothingHeadTechPriest + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsHead + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +# Id + +# Neck +- type: loadout + id: LoadoutScienceNeckTieSci + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsNeck + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingNeckTieSci + +- type: loadout + id: LoadoutScienceNeckScarfStripedPurple + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsNeck + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingNeckScarfStripedPurple + +- type: loadout + id: LoadoutScienceNeckScarfStripedBlack + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsNeck + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingNeckScarfStripedBlack + +# Mask + +# Outer +- type: loadout + id: LoadoutScienceOuterCoat + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingOuterCoatRnd + +- type: loadout + id: LoadoutScienceOuterLabcoat + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingOuterCoatLab + +- type: loadout + id: LoadoutScienceOuterCoatRobo + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingOuterCoatRobo + +- type: loadout + id: LoadoutScienceOuterWinterSci + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingOuterWinterSci + +- type: loadout + id: LoadoutScienceOuterExplorerLabcoat + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingOuterExplorerCoat + +- type: loadout + id: LoadoutOuterRobeTechPriest + category: Outer + cost: 0 + items: + - ClothingOuterRobeTechPriest + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsOuter + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + +# Shoes +- type: loadout + id: LoadoutScienceShoesBootsWinterSci + category: JobsEpistemicsAAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutEpistemicsShoes + - !type:CharacterDepartmentRequirement + departments: + - Epistemics + items: + - ClothingShoesBootsWinterSci + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml deleted file mode 100644 index 47e4310fdf9..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/captain.yml +++ /dev/null @@ -1,148 +0,0 @@ -- type: loadout - id: LoadoutCommandCapNeckMantle - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingNeckMantleCap - -- type: loadout - id: LoadoutCommandCapNeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingNeckCloakCap - -- type: loadout - id: LoadoutCommandCapNeckCloakFormal - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingNeckCloakCapFormal - -- type: loadout - id: LoadoutCommandCapJumpsuitFormal - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingUniformJumpsuitCapFormal - -- type: loadout - id: LoadoutCommandCapJumpskirtFormal - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingUniformJumpskirtCapFormalDress - -- type: loadout - id: LoadoutCommandCapOuterWinter - category: JobsCommand - cost: 1 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingOuterWinterCap - -- type: loadout - id: LoadoutCommandCapGloves - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingHandsGlovesCaptain - -- type: loadout - id: LoadoutCommandCapHat - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingHeadHatCaptain - -- type: loadout - id: LoadoutCommandCapHatCapcap - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingHeadHatCapcap - -- type: loadout - id: LoadoutCommandCapHatBeret - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingHeadHatBeretCap - -- type: loadout - id: LoadoutCommandCapMaskGas - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingMaskGasCaptain - -- type: loadout - id: LoadoutCommandCapShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - ClothingShoesBootsWinterCap - -- type: loadout - id: LoadoutCommandCapItemDrinkFlask - category: JobsCommand - cost: 1 - requirements: - - !type:CharacterJobRequirement - jobs: - - Captain - items: - - DrinkFlask diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml deleted file mode 100644 index bfddc6e383e..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefEngineer.yml +++ /dev/null @@ -1,46 +0,0 @@ -- type: loadout - id: LoadoutCommandCENeckMantle - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefEngineer - items: - - ClothingNeckMantleCE - -- type: loadout - id: LoadoutCommandCENeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefEngineer - items: - - ClothingNeckCloakCe - -- type: loadout - id: LoadoutCommandCEOuterWinter - category: JobsCommand - cost: 1 - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefEngineer - items: - - ClothingOuterWinterCE - -- type: loadout - id: LoadoutCommandCEShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefEngineer - items: - - ClothingShoesBootsWinterChiefEngineer diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml deleted file mode 100644 index 0c46af70137..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/chiefMedicalOfficer.yml +++ /dev/null @@ -1,68 +0,0 @@ -- type: loadout - id: LoadoutCommandCMONeckMantle - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingNeckMantleCMO - -- type: loadout - id: LoadoutCommandCMONeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingCloakCmo - -- type: loadout - id: LoadoutCommandCMOOuterWinter - category: JobsCommand - cost: 1 - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingOuterWinterCMO - -- type: loadout - id: LoadoutCommandCMOOuterLab - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingOuterCoatLabCmo - -- type: loadout - id: LoadoutCommandCMOHatBeret - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingHeadHatBeretCmo - -- type: loadout - id: LoadoutCommandCMOShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ChiefMedicalOfficer - items: - - ClothingShoesBootsWinterChiefMedicalOfficer diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml deleted file mode 100644 index ccc791460b6..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/command.yml +++ /dev/null @@ -1,24 +0,0 @@ -- type: loadout - id: LoadoutCommandGlovesInspection - category: JobsCommand - cost: 1 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - - Captain - items: - - ClothingHandsGlovesInspection - -- type: loadout - id: LoadoutCommandTelescopicBaton - category: JobsCommand - cost: 3 - exclusive: true - requirements: - - !type:CharacterDepartmentRequirement - departments: - - Command - items: - - TelescopicBaton diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml deleted file mode 100644 index 7bb265dd7b1..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfPersonnel.yml +++ /dev/null @@ -1,116 +0,0 @@ -- type: loadout - id: LoadoutCommandHOPNeckMantle - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingNeckMantleHOP - -- type: loadout - id: LoadoutCommandHOPNeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingNeckCloakHop - -- type: loadout - id: LoadoutCommandHOPJumpsuitTurtleneckBoatswain - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingUniformJumpsuitBoatswain - -- type: loadout - id: LoadoutCommandHOPJumpsuitMess - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingUniformJumpsuitHoPMess - -- type: loadout - id: LoadoutCommandHOPJumpskirtMess - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingUniformJumpskirtHoPMess - -- type: loadout - id: LoadoutcommandHOPOuterCoatFormal - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingOuterCoatHoPFormal - -- type: loadout - id: LoadoutCommandHOPBackIan - category: JobsCommand - cost: 2 - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingBackpackIan - -- type: loadout - id: LoadoutCommandHOPHatCap - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingHeadHatHopcap - -- type: loadout - id: LoadoutCommandHOPShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - ClothingShoesBootsWinterHeadOfPersonel - -- type: loadout - id: LoadoutCommandHOPBedsheetIan - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - items: - - BedsheetIan diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml deleted file mode 100644 index 0dd45eb3f5f..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/quarterMaster.yml +++ /dev/null @@ -1,71 +0,0 @@ -# What? This isn't a thing?? :( -# - type: loadout -# id: LoadoutCommandQMNeckMantle -# category: JobsCommand -# cost: 2 -# exclusive: true -# requirements: -# - !type:CharacterJobRequirement -# jobs: -# - Quartermaster -# items: -# - ClothingNeckMantleQM - -- type: loadout - id: LoadoutCommandQMNeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Quartermaster - items: - - ClothingNeckCloakQm - -- type: loadout - id: LoadoutCommandQMUniformTurtleneck - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Quartermaster - items: - - ClothingUniformJumpsuitQMTurtleneck - -- type: loadout - id: LoadoutCommandQMUniformTurtleneckSkirt - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Quartermaster - items: - - ClothingUniformJumpskirtQMTurtleneck - -- type: loadout - id: LoadoutCommandQMHeadSoft - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - Quartermaster - items: - - ClothingHeadHatQMsoft - -- type: loadout - id: LoadoutCommandQMShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Quartermaster - items: - - ClothingShoesBootsWinterLogisticsOfficer diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml b/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml deleted file mode 100644 index 0ec43fc3a77..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/researchDirector.yml +++ /dev/null @@ -1,101 +0,0 @@ -# Outer - -- type: loadout - id: LoadoutCommandRDOuterWinter - category: JobsCommand - cost: 1 - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingOuterWinterRD - -- type: loadout - id: LoadoutCommandRDOuterMysta - category: JobsCommand - cost: 0 - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingOuterCoatRndMysta - -# Head - -- type: loadout - id: LoadoutCommandRDHeadHatBeretMysta - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingHeadHatBeretMysta - -- type: loadout - id: LoadoutCommandRDHeadHoodMysta - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingHeadHoodMysta - -# Neck - -- type: loadout - id: LoadoutCommandRDNeckMantle - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingNeckMantleRD - -- type: loadout - id: LoadoutCommandRDNeckCloak - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingNeckCloakRd - -- type: loadout - id: LoadoutCommandRDNeckCloakMystagogue - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingNeckCloakMystagogue - -# Shoes - -- type: loadout - id: LoadoutCommandRDShoesBootsWinter - category: JobsCommand - cost: 0 - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - ResearchDirector - items: - - ClothingShoesBootsWinterMystagogue diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/cargoTechnician.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/cargoTechnician.yml new file mode 100644 index 00000000000..d1e7013e6f6 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/cargoTechnician.yml @@ -0,0 +1,52 @@ +# Cargo technician +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutCargoOuterWinterCargo + category: JobsLogisticsAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCargoTechnicianOuter + - !type:CharacterJobRequirement + jobs: + - CargoTechnician + items: + - ClothingOuterWinterCargo + +# Shoes +- type: loadout + id: LoadoutCargoShoesBootsWinterCargo + category: JobsLogisticsAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCargoTechnicianShoes + - !type:CharacterJobRequirement + jobs: + - CargoTechnician + items: + - ClothingShoesBootsWinterCargo + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/courier.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/courier.yml new file mode 100644 index 00000000000..3c0651c7698 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/courier.yml @@ -0,0 +1,26 @@ +# Courier +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml new file mode 100644 index 00000000000..190c7467b54 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/logisticsOfficer.yml @@ -0,0 +1,107 @@ +# Logistics Officer +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutCommandQMHeadSoft + category: JobsLogisticsLogisticsOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerHead + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingHeadHatQMsoft + +# Id +- type: loadout + id: LoadoutLogisticsOfficerNTPDA + category: JobsLogisticsLogisticsOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobQuartermaster + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerId + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - QuartermasterNTPDA + +# Neck +- type: loadout + id: LoadoutCommandQMNeckCloak + category: JobsLogisticsLogisticsOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerNeck + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingNeckCloakQm + +# Mask + +# Outer + +# Shoes +- type: loadout + id: LoadoutCommandQMShoesBootsWinter + category: JobsLogisticsLogisticsOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerShoes + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingShoesBootsWinterLogisticsOfficer + +# Uniforms +- type: loadout + id: LoadoutCommandQMUniformTurtleneck + category: JobsLogisticsLogisticsOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingUniformJumpsuitQMTurtleneck + +- type: loadout + id: LoadoutCommandQMUniformTurtleneckSkirt + category: JobsLogisticsLogisticsOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - Quartermaster + items: + - ClothingUniformJumpskirtQMTurtleneck diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/salvageSpecialist.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/salvageSpecialist.yml new file mode 100644 index 00000000000..f81f60817fa --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/salvageSpecialist.yml @@ -0,0 +1,108 @@ +# Salvage Specialist +# Backpacks +- type: loadout + id: LoadoutSalvageBackpackBackpack + category: JobsLogisticsSalvageSpecialist + cost: 0 + exclusive: true + items: + - ClothingBackpackSalvage + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +- type: loadout + id: LoadoutSalvageBackpackSatchel + category: JobsLogisticsSalvageSpecialist + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelSalvage + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +- type: loadout + id: LoadoutSalvageBackpackDuffel + category: JobsLogisticsSalvageSpecialist + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelSalvage + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutCargoWeaponsCrusherDagger + category: JobsLogisticsSalvageSpecialist + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistWeapons + - !type:CharacterJobRequirement + jobs: + - SalvageSpecialist + items: + - WeaponCrusherDagger + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck +- type: loadout + id: LoadoutCargoNeckGoliathCloak + category: JobsLogisticsSalvageSpecialist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistNeck + - !type:CharacterJobRequirement + jobs: + - SalvageSpecialist + - !type:CharacterPlaytimeRequirement + tracker: JobSalvageSpecialist + min: 36000 # 10 hours + items: + - ClothingNeckCloakGoliathCloak + +# Mask + +# Outer +- type: loadout + id: LoadoutCargoOuterWinterMiner + category: JobsLogisticsSalvageSpecialist + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSalvageSpecialistOuter + - !type:CharacterJobRequirement + jobs: + - SalvageSpecialist + items: + - ClothingOuterWinterMiner + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Logistics/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Logistics/uncategorized.yml new file mode 100644 index 00000000000..fe6d664e287 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Logistics/uncategorized.yml @@ -0,0 +1,67 @@ +# Uncategorized +# Backpacks +- type: loadout + id: LoadoutBackpackCargo + category: JobsLogisticsAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackCargo + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +- type: loadout + id: LoadoutBackpackSatchelCargo + category: JobsLogisticsAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelCargo + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +- type: loadout + id: LoadoutBackpackDuffelCargo + category: JobsLogisticsAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelCargo + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLogisticsBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Logistics + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml new file mode 100644 index 00000000000..8b8aac38378 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/chemist.yml @@ -0,0 +1,342 @@ +# Chemist +# Backpacks +- type: loadout + id: LoadoutChemistryBackpackBackpack + category: JobsMedicalChemist + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelChemistry + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistBackpacks + - !type:CharacterJobRequirement + jobs: + - Chemist + +- type: loadout + id: LoadoutBackpackSatchelChemistry + category: JobsMedicalChemist + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelChemistry + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistBackpacks + - !type:CharacterJobRequirement + jobs: + - Chemist + +- type: loadout + id: LoadoutBackpackDuffelChemistry + category: JobsMedicalChemist + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelChemistry + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistBackpacks + - !type:CharacterJobRequirement + jobs: + - Chemist + +# Belt +- type: loadout + id: LoadoutChemistBeltChemBag + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistBelt + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ChemBag + +# Ears + +# Equipment +- type: loadout + id: LoadoutMedicalItemHandLabeler + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - HandLabeler + +- type: loadout + id: LoadoutChemistPillCanisterKelotane + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterKelotane + +- type: loadout + id: LoadoutChemistPillCanisterTricordrazine + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterTricordrazine + +- type: loadout + id: LoadoutChemistPillCanisterHyronalin + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterHyronalin + +- type: loadout + id: LoadoutChemistPillCanisterBicaridine + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterBicaridine + +- type: loadout + id: LoadoutChemistPillCanisterDermaline + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterDermaline + +- type: loadout + id: LoadoutChemistPillCanisterDylovene + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterDylovene + +- type: loadout + id: LoadoutChemistPillCanisterDexalin + category: JobsMedicalChemist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterDexalin + +- type: loadout + id: LoadoutChemistPillCanisterSpaceDrugs + category: JobsMedicalChemist + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEquipment + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - PillCanisterSpaceDrugs + +# Eyes +- type: loadout + id: LoadoutMedicalEyesGlassesChemicalBudget + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEyes + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingEyesGlassesChemicalBudget + +- type: loadout + id: LoadoutMedicalEyesGlassesChemical + category: JobsMedicalChemist + cost: 2 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEyes + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingEyesGlassesChemical + +- type: loadout + id: LoadoutMedicalEyesGlassesChemist + category: JobsMedicalChemist + cost: 1 # These provide caustic armor, oddly enough. + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistEyes + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingEyesGlassesChemist + +# Gloves +- type: loadout + id: LoadoutMedicalHandsGlovesChemist + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistGloves + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingHandsGlovesChemist + +# Head + +# Id + +# Neck +- type: loadout + id: LoadoutMedicalNeckTieChem + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistNeck + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingNeckTieChem + +# Mask + +# Outer +- type: loadout + id: LoadoutMedicalOuterLabcoatChem + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistOuter + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingOuterCoatLabChem + +- type: loadout + id: LoadoutMedicalOuterApronChemist + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistOuter + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingOuterApronChemist + +# Shoes +- type: loadout + id: LoadoutMedicalShoesEnclosedChem + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistShoes + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingShoesEnclosedChem + +# Uniforms +- type: loadout + id: LoadoutMedicalUniformJumpsuitChemShirt + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistUniforms + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingUniformJumpsuitChemShirt + +- type: loadout + id: LoadoutMedicalUniformJumpsuitChemistry + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistUniforms + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingUniformJumpsuitChemistry + +- type: loadout + id: LoadoutMedicalUniformJumpskirtChemistry + category: JobsMedicalChemist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChemistUniforms + - !type:CharacterJobRequirement + jobs: + - Chemist + items: + - ClothingUniformJumpskirtChemistry diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml new file mode 100644 index 00000000000..b5e82749cec --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/chiefMedicalOfficer.yml @@ -0,0 +1,214 @@ +# Chief Medical Officer +# Backpacks + +# Belt +- type: loadout + id: LoadoutChiefMedicalOfficerBeltMedical + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerBelt + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingBeltMedical + +- type: loadout + id: LoadoutChiefMedicalOfficerBeltMedicalAdvancedFilled + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerBelt + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingBeltMedicalAdvancedFilled + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutCommandCMOHatBeret + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerHead + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingHeadHatBeretCmo + +# Id +- type: loadout + id: LoadoutChiefMedicalOfficerNTPDA + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobChiefMedicalOfficer + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerId + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - CMONTPDA + +# Neck +- type: loadout + id: LoadoutCommandCMONeckMantle + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingNeckMantleCMO + +- type: loadout + id: LoadoutCommandCMONeckCloak + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingCloakCmo + +- type: loadout + id: LoadoutChiefMedicalOfficerNeckMedalMedical + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerNeck + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingNeckMedicalmedal + +# Mask + +# Outer +- type: loadout + id: LoadoutCommandCMOOuterWinter + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerOuter + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingOuterWinterCMO + +- type: loadout + id: LoadoutCommandCMOOuterLab + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerOuter + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingOuterCoatLabCmo + +# Shoes +- type: loadout + id: LoadoutCommandCMOShoesBootsWinter + category: JobsMedicalChiefMedicalOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerShoes + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingShoesBootsWinterChiefMedicalOfficer + +- type: loadout + id: LoadoutChiefMedicalOfficerShoesLaceup + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerShoes + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingShoesBootsLaceup + +- type: loadout + id: LoadoutChiefMedicalOfficerShoesLeather + category: JobsCommandCaptain + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerShoes + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingShoesLeather + +# Uniforms +- type: loadout + id: LoadoutChiefMedicalOfficerJumpsuit + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingUniformJumpsuitCMO + +- type: loadout + id: LoadoutChiefMedicalOfficerJumpskirt + category: JobsMedicalChiefMedicalOfficer + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChiefMedicalOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - ChiefMedicalOfficer + items: + - ClothingUniformJumpskirtCMO diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/medicalDoctor.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/medicalDoctor.yml new file mode 100644 index 00000000000..9aba4313287 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/medicalDoctor.yml @@ -0,0 +1,105 @@ +# Medical Doctor +# Backpacks + +# Belt +- type: loadout + id: LoadoutMedicalDoctorBeltMedical + category: JobsMedicalMedicalDoctor + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorBelt + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingBeltMedical + +- type: loadout + id: LoadoutMedicalDoctorBeltMedicalFilled + category: JobsMedicalMedicalDoctor + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorBelt + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingBeltMedicalFilled + +- type: loadout + id: LoadoutMedicalDoctorBeltMedicalAdvancedFilled + category: JobsMedicalMedicalDoctor + cost: 2 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorBelt + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingBeltMedicalAdvancedFilled + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutMedicalHeadNurse + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorHead + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingHeadNurseHat + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutMedicalDoctorJumpsuit + category: JobsMedicalMedicalDoctor + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorUniforms + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingUniformJumpsuitMedicalDoctor + +- type: loadout + id: LoadoutMedicalDoctorJumpskirt + category: JobsMedicalMedicalDoctor + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalDoctorUniforms + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingUniformJumpskirtMedicalDoctor diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/medicalIntern.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/medicalIntern.yml new file mode 100644 index 00000000000..9c0f5fc9ecc --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/medicalIntern.yml @@ -0,0 +1,53 @@ +# Medical Intern +# Backpacks + +# Belt +- type: loadout + id: LoadoutMedicalInternBeltMedical + category: JobsMedicalMedicalIntern + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalInternBelt + - !type:CharacterJobRequirement + jobs: + - MedicalIntern + items: + - ClothingBeltMedical + +- type: loadout + id: LoadoutMedicalInternBeltMedicalFilled + category: JobsMedicalMedicalIntern + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalInternBelt + - !type:CharacterJobRequirement + jobs: + - MedicalIntern + items: + - ClothingBeltMedicalFilled + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/paramedic.yml new file mode 100644 index 00000000000..56082d35edd --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/paramedic.yml @@ -0,0 +1,53 @@ +# Paramedic +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutMedicalUniformParamedicJumpsuit + category: JobsMedicalParamedic + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutParamedicUniforms + - !type:CharacterJobRequirement + jobs: + - Paramedic + items: + - ClothingUniformJumpsuitParamedic + +- type: loadout + id: LoadoutMedicalUniformParamedicJumpskirt + category: JobsMedicalParamedic + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutParamedicUniforms + - !type:CharacterJobRequirement + jobs: + - Paramedic + items: + - ClothingUniformJumpskirtParamedic diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/psychologist.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/psychologist.yml new file mode 100644 index 00000000000..9414b687dac --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/psychologist.yml @@ -0,0 +1,146 @@ +# Psychologist +# Backpacks +- type: loadout + id: LoadoutPsychologistBackpackBackpack + category: JobsMedicalPsychologist + cost: 0 + exclusive: true + items: + - ClothingBackpackPsychologistFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutPsychologistBackpackSatchel + category: JobsMedicalPsychologist + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelPsychologistFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutPsychologistBackpackDuffel + category: JobsMedicalPsychologist + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelPsychologistFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +# Belt + +# Ears + +# Equipment +# The Psychologist chooses freely from drugs that change the mind. +# If we ever get more mind-affecting drugs, add them here. +- type: loadout + id: LoadoutPsychologistPillCanisterSpaceDrugs + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistEquipment + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - PillCanisterSpaceDrugs + +- type: loadout + id: LoadoutPsychologistPillCanisterPax + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistEquipment + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - PillCanisterPax + +- type: loadout + id: LoadoutPsychologistPillCanisterCryptobiolin + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistEquipment + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - PillCanisterCryptobiolin + +# Yes this one is a little dangerous. Keeps the job interesting. :) +- type: loadout + id: LoadoutPsychologistPillCanisterChloralHydrate + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistEquipment + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - PillCanisterChloralHydrate + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutPsychologistJumpsuit + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistUniforms + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - ClothingUniformJumpsuitPsychologist + +- type: loadout + id: LoadoutPsychologistJumpskirt + category: JobsMedicalPsychologist + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPsychologistUniforms + - !type:CharacterJobRequirement + jobs: + - Psychologist + items: + - ClothingUniformJumpsuitPsychologist diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/seniorPhysician.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/seniorPhysician.yml new file mode 100644 index 00000000000..a8937cc2f0e --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/seniorPhysician.yml @@ -0,0 +1,93 @@ +# Senior Physician +# Backpacks + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutSeniorPhysicianBeltMedical + category: JobsMedicalSeniorPhysician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorPhysicianBelt + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + items: + - ClothingBeltMedical + +- type: loadout + id: LoadoutSeniorPhysicianBeltMedicalAdvancedFilled + category: JobsMedicalSeniorPhysician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorPhysicianBelt + - !type:CharacterJobRequirement + jobs: + - SeniorPhysician + items: + - ClothingBeltMedicalAdvancedFilled + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutMedicalHeadBeretSeniorPhysician + category: JobsMedicalSeniorPhysician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorPhysicianHead + - !type:CharacterJobRequirement + jobs: + - SeniorPhysician + items: + - ClothingHeadHatBeretSeniorPhysician + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutMedicalUniformJumpskirtSenior + category: JobsMedicalSeniorPhysician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorPhysicianUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorPhysician + items: + - ClothingUniformJumpskirtSeniorPhysician + +- type: loadout + id: LoadoutMedicalUniformJumpsuitSenior + category: JobsMedicalSeniorPhysician + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorPhysicianUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorPhysician + items: + - ClothingUniformJumpsuitSeniorPhysician diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml new file mode 100644 index 00000000000..d3b88f9fa9d --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/uncategorized.yml @@ -0,0 +1,505 @@ +# Uncategorized +# Backpacks +- type: loadout + id: LoadoutBackpackMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackMedical + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackVirology + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackVirology + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackGenetics + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackGenetics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackSatchelMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelMedical + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackSatchelVirology + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelVirology + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackSatchelGenetics + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelGenetics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackDuffelMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelMedical + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackDuffelVirology + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelVirology + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackDuffelGenetics + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelGenetics + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +- type: loadout + id: LoadoutBackpackMedicalDuffelSurgeryFilled + category: JobsMedicalAUncategorized + cost: 3 + exclusive: true + items: + - ClothingBackpackDuffelSurgeryFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalBackpacks + - !type:CharacterDepartmentRequirement + departments: + - Medical + +# Belt + +# Ears + +# Equipment + +# Eyes +- type: loadout + id: LoadoutMedicalEyesHudMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalEyes + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingEyesHudMedical + +- type: loadout + id: LoadoutMedicalEyesEyepatchHudMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalEyes + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingEyesEyepatchHudMedical + +- type: loadout + id: LoadoutMedicalEyesHudMedicalPrescription + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalEyes + - !type:CharacterDepartmentRequirement + departments: + - Medical + - !type:CharacterTraitRequirement + traits: + - Nearsighted + items: + - ClothingEyesPrescriptionMedHud + +# Gloves +- type: loadout + id: LoadoutMedicalGlovesNitrile + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalGloves + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHandsGlovesNitrile + +- type: loadout + id: LoadoutMedicalGlovesLatex + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalGloves + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHandsGlovesLatex + +# Head +- type: loadout + id: LoadoutMedicalHeadSurgcapBlue + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapBlue + +- type: loadout + id: LoadoutMedicalHeadSurgcapPurple + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapPurple + +- type: loadout + id: LoadoutMedicalHeadSurgcapGreen + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapGreen + +- type: loadout + id: LoadoutMedicalHeadSurgcapCyan + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapCyan + +- type: loadout + id: LoadoutMedicalHeadSurgcapBlack + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapBlack + +- type: loadout + id: LoadoutMedicalHeadSurgcapPink + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapPink + +- type: loadout + id: LoadoutMedicalHeadSurgcapWhite + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingHeadHatSurgcapWhite + +- type: loadout + id: LoadoutMedicalHeadSurgcapCybersun + category: JobsMedicalAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalHead + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + - Chemist + - Paramedic + items: + - ClothingHeadHatSurgcapCybersun + +# Id + +# Neck +- type: loadout + id: LoadoutMedicalNeckStethoscope + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalNeck + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - ClothingNeckStethoscope + +- type: loadout + id: LoadoutMedicalBedsheetMedical + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalNeck + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - BedsheetMedical + +# Mask + +# Outer +- type: loadout + id: LoadoutMedicalOuterLabcoat + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalOuter + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + - Chemist + items: + - ClothingOuterCoatLab + +- type: loadout + id: LoadoutMedicalOuterCybersunWindbreaker + category: JobsMedicalAUncategorized + cost: 3 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalOuter + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + - Chemist + - Paramedic + items: + - ClothingOuterCoatCybersunWindbreaker + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutMedicalUniformScrubsBlue + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorBlue + +- type: loadout + id: LoadoutMedicalUniformScrubsGreen + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorGreen + +- type: loadout + id: LoadoutMedicalUniformScrubsPurple + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorPurple + +- type: loadout + id: LoadoutMedicalUniformScrubsCyan + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorCyan + +- type: loadout + id: LoadoutMedicalUniformScrubsBlack + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorBlack + +- type: loadout + id: LoadoutMedicalUniformScrubsPink + category: JobsMedicalAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterDepartmentRequirement + departments: + - Medical + items: + - UniformScrubsColorPink + +- type: loadout + id: LoadoutMedicalUniformScrubsCybersun + category: JobsMedicalAUncategorized + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMedicalUniforms + - !type:CharacterJobRequirement + jobs: + - MedicalDoctor + - Chemist + - Paramedic + items: + - UniformScrubsColorCybersun diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/cadet.yml b/Resources/Prototypes/Loadouts/Jobs/Security/cadet.yml new file mode 100644 index 00000000000..5450f362cf9 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/cadet.yml @@ -0,0 +1,26 @@ +# Cadet +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/corpsman.yml b/Resources/Prototypes/Loadouts/Jobs/Security/corpsman.yml new file mode 100644 index 00000000000..5f7781e74ce --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/corpsman.yml @@ -0,0 +1,133 @@ +# Corpsman +# Backpacks +- type: loadout + id: LoadoutCorpsmanBackpackBackpack + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + items: + - ClothingBackpackBrigmedicFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanBackpacks + - !type:CharacterJobRequirement + jobs: + - Brigmedic + +- type: loadout + id: LoadoutCorpsmanBackpackSatchel + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelBrigmedicFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanBackpacks + - !type:CharacterJobRequirement + jobs: + - Brigmedic + +- type: loadout + id: LoadoutCorpsmanBackpackDuffel + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelBrigmedicFilled + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanBackpacks + - !type:CharacterJobRequirement + jobs: + - Brigmedic + +# Belt +- type: loadout + id: LoadoutClothingBeltCorpsmanWebbing + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanBelt + - !type:CharacterJobRequirement + jobs: + - Brigmedic + items: + - ClothingBeltCorpsmanWebbingFilled + +# Ears + +# Equipment + +# Eyes + +# Gloves +- type: loadout + id: LoadoutClothingHandsGlovesNitrile + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanGloves + - !type:CharacterJobRequirement + jobs: + - Brigmedic + items: + - ClothingHandsGlovesNitrile + +# Head +- type: loadout + id: LoadoutClothingHeadHatBeretBrigmedic + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanHead + - !type:CharacterJobRequirement + jobs: + - Brigmedic + items: + - ClothingHeadHatBeretBrigmedic + +- type: loadout + id: LoadoutClothingHeadHatBeretCorpsman + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanHead + - !type:CharacterJobRequirement + jobs: + - Brigmedic + items: + - ClothingHeadHatBeretCorpsman + +# Id + +# Neck +- type: loadout + id: LoadoutBedsheetBrigmedic + category: JobsSecurityCorpsman + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutCorpsmanNeck + - !type:CharacterJobRequirement + jobs: + - Brigmedic + items: + - BedsheetBrigmedic + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml b/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml new file mode 100644 index 00000000000..e68b63a57a1 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml @@ -0,0 +1,53 @@ +# Detective +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutClothingOuterCoatDetective + category: JobsSecurityDetective + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutDetectiveOuter + - !type:CharacterJobRequirement + jobs: + - Detective + items: + - ClothingOuterCoatDetective + +- type: loadout + id: LoadoutOuterVestDetective + category: JobsSecurityDetective + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutDetectiveOuter + - !type:CharacterJobRequirement + jobs: + - Detective + items: + - ClothingOuterVestDetective + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml similarity index 57% rename from Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml rename to Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml index bd2a03f214f..f43a23e822f 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Heads/headOfSecurity.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml @@ -1,128 +1,193 @@ +# Head Of Security +# Backpacks + +# Belt + +# Ears + +# Equipment +# Head of Security Weapon Selection +# Most of these mirror the unique weapons that were previously map-specific items placed in the HoS Office. +# Or are weapons that fit a similar theme of "Rare weapons not normally seen by Security" - type: loadout - id: LoadoutCommandHOSNeckMantle - category: JobsCommand + id: LoadoutCommandHoSPulsePistol + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingNeckMantleHOS + - WeaponPulsePistolHoS - type: loadout - id: LoadoutCommandHOSNeckCloak - category: JobsCommand + id: LoadoutCommandHoSWt550 + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingNeckCloakHos + - WeaponSubMachineGunWt550HoS - type: loadout - id: LoadoutCommandHOSJumpsuitAlt - category: JobsCommand + id: LoadoutCommandHoSKatanaSheath + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpsuitHoSAlt + - ClothingBeltKatanaSheathFilledHoS - type: loadout - id: LoadoutCommandHOSJumpsuitBlue - category: JobsCommand + id: LoadoutCommandHoSC20r + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpsuitHoSBlue + - WeaponSubMachineGunC20rHoS - type: loadout - id: LoadoutCommandHOSJumpsuitGrey - category: JobsCommand + id: LoadoutCommandHoSBulldog + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpsuitHoSGrey + - WeaponShotgunBulldogHoS - type: loadout - id: LoadoutCommandHOSJumpsuitParade - category: JobsCommand + id: LoadoutCommandHoSEnergySword + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpsuitHoSParadeMale + - EnergySwordHoS - type: loadout - id: LoadoutCommandHOSJumpsuitFormal - category: JobsCommand + id: LoadoutCommandHoSEnergyGun + category: JobsSecurityHeadOfSecurity cost: 0 - exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpsuitHosFormal + - WeaponEnergyGunMultiphase + +# Eyes +# Gloves + +# Head - type: loadout - id: LoadoutCommandHOSJumpskirtAlt - category: JobsCommand + id: LoadoutCommandHOSHatBeret + category: JobsSecurityHeadOfSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityHead + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - ClothingHeadHatBeretHoS + +- type: loadout + id: LoadoutCommandHOSHatHoshat + category: JobsSecurityHeadOfSecurity + cost: 0 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityHead + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - ClothingHeadHatHoshat + +# Id +- type: loadout + id: LoadoutHeadOfSecurityNTPDA + category: JobsSecurityHeadOfSecurity cost: 0 exclusive: true requirements: + - !type:CharacterPlaytimeRequirement + tracker: JobHeadOfSecurity + min: 36000 # 10 hours + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityId - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpskirtHoSAlt + - HoSNTPDA +# Neck - type: loadout - id: LoadoutCommandHOSJumpskirtParade - category: JobsCommand + id: LoadoutCommandHOSNeckMantle + category: JobsSecurityHeadOfSecurity cost: 0 exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityNeck - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpskirtHoSParadeMale + - ClothingNeckMantleHOS - type: loadout - id: LoadoutCommandHOSJumpskirtFormal - category: JobsCommand + id: LoadoutCommandHOSNeckCloak + category: JobsSecurityHeadOfSecurity cost: 0 exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityNeck - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingUniformJumpskirtHosFormal + - ClothingNeckCloakHos +# Mask + +# Outer - type: loadout id: LoadoutCommandHOSOuterWinter - category: JobsCommand - cost: 1 + category: JobsSecurityHeadOfSecurity + cost: 0 requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityOuter - !type:CharacterJobRequirement jobs: - HeadOfSecurity @@ -131,139 +196,169 @@ - type: loadout id: LoadoutCommandHOSOuterTrench - category: JobsCommand - cost: 1 + category: JobsSecurityHeadOfSecurity + cost: 0 requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityOuter - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - ClothingOuterCoatHoSTrench +# Shoes - type: loadout - id: LoadoutCommandHOSHatBeret - category: JobsCommand + id: LoadoutCommandHOSShoesBootsWinter + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityShoes - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingHeadHatBeretHoS + - ClothingShoesBootsWinterHeadOfSecurity +# Uniforms - type: loadout - id: LoadoutCommandHOSHatHoshat - category: JobsCommand + id: LoadoutUniformJumpskirtHoSBlue + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingHeadHatHoshat + - ClothingUniformJumpskirtHoSBlue - type: loadout - id: LoadoutCommandHOSShoesBootsWinter - category: JobsCommand + id: LoadoutUniformJumpskirtHoSGrey + category: JobsSecurityHeadOfSecurity cost: 0 exclusive: true requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingShoesBootsWinterHeadOfSecurity + - ClothingUniformJumpskirtHoSGrey -# Head of Security Weapon Selection -# Most of these mirror the unique weapons that were previously map-specific items placed in the HoS Office. -# Or are weapons that fit a similar theme of "Rare weapons not normally seen by Security" - type: loadout - id: LoadoutCommandHoSPulsePistol - category: JobsCommand + id: LoadoutCommandHOSJumpsuitAlt + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - WeaponPulsePistolHoS + - ClothingUniformJumpsuitHoSAlt - type: loadout - id: LoadoutCommandHoSWt550 - category: JobsCommand + id: LoadoutCommandHOSJumpsuitBlue + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - WeaponSubMachineGunWt550HoS + - ClothingUniformJumpsuitHoSBlue - type: loadout - id: LoadoutCommandHoSKatanaSheath - category: JobsCommand + id: LoadoutCommandHOSJumpsuitGrey + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - ClothingBeltKatanaSheathFilledHoS + - ClothingUniformJumpsuitHoSGrey - type: loadout - id: LoadoutCommandHoSC20r - category: JobsCommand + id: LoadoutCommandHOSJumpsuitParade + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - WeaponSubMachineGunC20rHoS + - ClothingUniformJumpsuitHoSParadeMale - type: loadout - id: LoadoutCommandHoSBulldog - category: JobsCommand + id: LoadoutCommandHOSJumpsuitFormal + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - WeaponShotgunBulldogHoS + - ClothingUniformJumpsuitHosFormal - type: loadout - id: LoadoutCommandHoSEnergySword - category: JobsCommand + id: LoadoutCommandHOSJumpskirtAlt + category: JobsSecurityHeadOfSecurity + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityUniforms + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + items: + - ClothingUniformJumpskirtHoSAlt + +- type: loadout + id: LoadoutCommandHOSJumpskirtParade + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - EnergySwordHoS + - ClothingUniformJumpskirtHoSParadeMale - type: loadout - id: LoadoutCommandHoSEnergyGun - category: JobsCommand + id: LoadoutCommandHOSJumpskirtFormal + category: JobsSecurityHeadOfSecurity cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutHoSWeapon + group: LoadoutHeadOfSecurityUniforms - !type:CharacterJobRequirement jobs: - HeadOfSecurity items: - - WeaponEnergyGunMultiphase + - ClothingUniformJumpskirtHosFormal diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/securityOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Security/securityOfficer.yml new file mode 100644 index 00000000000..36ce1874aa9 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/securityOfficer.yml @@ -0,0 +1,26 @@ +# Security Officer +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/seniorOfficer.yml b/Resources/Prototypes/Loadouts/Jobs/Security/seniorOfficer.yml new file mode 100644 index 00000000000..69e47019c3a --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/seniorOfficer.yml @@ -0,0 +1,53 @@ +# Senior Officer +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutSecurityUniformJumpskirtSenior + category: JobsSecuritySeniorOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorOfficer + items: + - ClothingUniformJumpskirtSeniorOfficer + +- type: loadout + id: LoadoutSecurityUniformJumpsuitSenior + category: JobsSecuritySeniorOfficer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSeniorOfficerUniforms + - !type:CharacterJobRequirement + jobs: + - SeniorOfficer + items: + - ClothingUniformJumpsuitSeniorOfficer diff --git a/Resources/Prototypes/Loadouts/Jobs/security.yml b/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml similarity index 63% rename from Resources/Prototypes/Loadouts/Jobs/security.yml rename to Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml index f2587b4d14d..0002bbb6565 100644 --- a/Resources/Prototypes/Loadouts/Jobs/security.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/uncategorized.yml @@ -1,1329 +1,1005 @@ -# Uniforms +# Uncategorized +# Backpack - type: loadout - id: LoadoutSecurityUniformJumpsuitBlue - category: JobsSecurity + id: LoadoutClothingBackSecurity + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBackpacks - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpsuitSecBlue + - ClothingBackpackSecurity - type: loadout - id: LoadoutSecurityUniformJumpsuitGrey - category: JobsSecurity + id: LoadoutClothingBackSecuritySatchel + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBackpacks - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpsuitSecGrey + - ClothingBackpackSatchelSecurity - type: loadout - id: LoadoutSecurityUniformJumpskirtGrey - category: JobsSecurity + id: LoadoutClothingBackSecurityDuffel + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBackpacks - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpskirtSecGrey + - ClothingBackpackDuffelSecurity +# Belt - type: loadout - id: LoadoutSecurityUniformJumpskirtBlue - category: JobsSecurity + id: LoadoutSecurityBeltWebbing + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBelt - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpskirtSecBlue - -- type: loadout - id: LoadoutSecurityUniformJumpskirtSenior - category: JobsSecurity - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - SecurityOfficer - - !type:CharacterPlaytimeRequirement - tracker: JobWarden - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobDetective - min: 7200 # 2 hours - - !type:CharacterPlaytimeRequirement - tracker: JobSecurityOfficer - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 216000 # 60 hours - items: - - ClothingUniformJumpskirtSeniorOfficer - -- type: loadout - id: LoadoutSecurityUniformJumpsuitSenior - category: JobsSecurity - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - SecurityOfficer - - !type:CharacterPlaytimeRequirement - tracker: JobWarden - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobDetective - min: 7200 # 2 hours - - !type:CharacterPlaytimeRequirement - tracker: JobSecurityOfficer - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 216000 # 60 hours - items: - - ClothingUniformJumpsuitSeniorOfficer - -- type: loadout - id: LoadoutUniformJumpsuitWardenBlue - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingUniformJumpsuitWardenBlue - -- type: loadout - id: LoadoutUniformJumpsuitWardenGrey - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingUniformJumpsuitWardenGrey - -- type: loadout - id: LoadoutUniformJumpskirtWardenBlue - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingUniformJumpskirtWardenBlue - -- type: loadout - id: LoadoutUniformJumpskirtWardenGrey - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingUniformJumpskirtWardenGrey - -- type: loadout - id: LoadoutUniformJumpskirtHoSBlue - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingUniformJumpskirtHoSBlue - -- type: loadout - id: LoadoutUniformJumpskirtHoSGrey - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingUniformJumpskirtHoSGrey + - ClothingBeltSecurityWebbingFilled - type: loadout - id: LoadoutUniformJumpsuitSecFormal - category: JobsSecurity + id: LoadoutClothingBeltSecurity + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBelt - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpsuitSecFormal + - ClothingBeltSecurityFilled - type: loadout - id: LoadoutUniformJumpsuitSecSummer - category: JobsSecurity + id: LoadoutClothingBeltHolster + category: JobsSecurityAUncategorized cost: 0 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutUniformsSecurity + group: LoadoutSecurityBelt - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingUniformJumpsuitSecSummer + - ClothingBeltHolster -# Mask -- type: loadout - id: LoadoutSecurityMaskGasSwat - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - - HeadOfSecurity - items: - - ClothingMaskGasSwat +# Ears -# Shoes +# Equipment +# Equipment, limit 3 selections +# Duplicate "Spare" equipment exists and shares the ItemGroup, for those officers who like to pack a spare magazine in their pocket, outside of what was issued to them. +# I knew a lot of people in my time working IRL Armed security that did this. - type: loadout - id: LoadoutSecurityShoesJackboots - category: JobsSecurity + id: LoadoutSecurityCombatKnife + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutShoesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingShoesBootsJack + - CombatKnife - type: loadout - id: LoadoutClothingShoesBootsCombat - category: JobsSecurity + id: LoadoutSecurityFlash + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutShoesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingShoesBootsCombatFilled + - Flash -# Eyes - type: loadout - id: LoadoutSecurityEyesHudSecurity - category: JobsSecurity + id: LoadoutMagazinePistol + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEyesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingEyesHudSecurity + - MagazinePistol - type: loadout - id: ClothingEyesGlassesSunglasses - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutMagazinePistolSpare + category: JobsSecurityAUncategorized + cost: 2 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEyesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingEyesGlassesSunglasses + - MagazinePistol - type: loadout - id: LoadoutSecurityEyesEyepatchHudSecurity - category: JobsSecurity + id: LoadoutMagazinePistolRubber + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutEyesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingEyesEyepatchHudSecurity + - MagazinePistolRubber - type: loadout - id: LoadoutSecurityEyesHudSecurityPrescription - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutMagazinePistolRubberSpare + category: JobsSecurityAUncategorized + cost: 2 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutEyesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security - - !type:CharacterTraitRequirement - traits: - - Nearsighted items: - - ClothingEyesPrescriptionHudSecurity + - MagazinePistolRubber - type: loadout - id: LoadoutClothingEyesGlassesSecurity - category: JobsSecurity + id: LoadoutSpeedLoaderMagnum + category: JobsSecurityAUncategorized cost: 2 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEyesSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingEyesGlassesSecurity + - SpeedLoaderMagnum -#Backpack - type: loadout - id: LoadoutClothingBackSecurity - category: JobsSecurity - cost: 0 + id: LoadoutSpeedLoaderMagnumSpare + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutBackSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBackpackSecurity + - SpeedLoaderMagnum - type: loadout - id: LoadoutClothingBackSecuritySatchel - category: JobsSecurity - cost: 0 + id: LoadoutSpeedLoaderMagnumRubber + category: JobsSecurityAUncategorized + cost: 2 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutBackSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBackpackSatchelSecurity + - SpeedLoaderMagnumRubber - type: loadout - id: LoadoutClothingBackSecurityDuffel - category: JobsSecurity - cost: 0 + id: LoadoutSpeedLoaderMagnumRubberSpare + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutBackSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBackpackDuffelSecurity + - SpeedLoaderMagnumRubber -# Head - type: loadout - id: LoadoutSecurityHeadHatBeret - category: JobsSecurity - cost: 0 + id: LoadoutMagazineMagnum + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingHeadHatBeretSecurity + - MagazineMagnum - type: loadout - id: LoadoutClothingHeadHelmetBasic - category: JobsSecurity - cost: 0 + id: LoadoutMagazineMagnumRubber + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingHeadHelmetBasic - -- type: loadout - id: LoadoutClothingHeadHatBeretBrigmedic - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity - - !type:CharacterJobRequirement - jobs: - - Brigmedic - items: - - ClothingHeadHatBeretBrigmedic - -- type: loadout - id: LoadoutClothingHeadHatBeretCorpsman - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity - - !type:CharacterJobRequirement - jobs: - - Brigmedic - items: - - ClothingHeadHatBeretCorpsman - -- type: loadout - id: LoadoutClothingHeadHatBeretWarden - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingHeadHatBeretWarden + - MagazineMagnumRubber - type: loadout - id: LoadoutClothingHeadHatBeretHoS - category: JobsSecurity - cost: 0 + id: LoadoutMagazineMagnumSpare + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingHeadHatBeretHoS - -- type: loadout - id: LoadoutSecurityHeadHelmetInsulated - category: JobsSecurity - cost: 1 - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingHeadHelmetInsulated + - MagazineMagnum -# Belt - type: loadout - id: LoadoutSecurityBeltWebbing - category: JobsSecurity - cost: 0 + id: LoadoutMagazineMagnumRubberSpare + category: JobsSecurityAUncategorized + cost: 4 exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutBeltSecurity + group: LoadoutSecurityEquipment - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBeltSecurityWebbingFilled - -- type: loadout - id: LoadoutClothingBeltCorpsmanWebbing - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBeltSecurity - - !type:CharacterJobRequirement - jobs: - - Brigmedic - items: - - ClothingBeltCorpsmanWebbingFilled + - MagazineMagnumRubber +# Service Weapon, limit 1 selection. +# Security no longer spawns with a weapon automatically, instead they have a free choice of security appropriate Duty Pistol in their loadouts. +# This category is universal to the entire security department by special request, so that players can choose their preferred Duty Pistol even if they aren't playing a security role. +# All lethal options come with a 1 hour security department playtime, as a basic shitter protection. - type: loadout - id: LoadoutClothingBeltSecurity - category: JobsSecurity + id: LoadoutSecurityDisabler + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutBeltSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBeltSecurityFilled + - WeaponDisabler - type: loadout - id: LoadoutClothingBeltHolster - category: JobsSecurity + id: LoadoutSecurityMk58 + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutBeltSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingBeltHolster - -#Gloves - -- type: loadout - id: LoadoutClothingHandsGlovesNitrile - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesSecurity - - !type:CharacterJobRequirement - jobs: - - Brigmedic - items: - - ClothingHandsGlovesNitrile - -# Outerwear + - WeaponPistolMk58Security - type: loadout - id: LoadoutClothingOuterArmorPlateCarrier - category: JobsSecurity + id: LoadoutSecurityMk58NonLethal + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingOuterArmorPlateCarrier + - WeaponPistolMk58SecurityNonlethal - type: loadout - id: LoadoutClothingOuterArmorDuraVest - category: JobsSecurity + id: LoadoutSecurityRevolver + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingOuterArmorDuraVest + - WeaponRevolverInspectorSecurity - type: loadout - id: LoadoutClothingOuterArmorBasic - category: JobsSecurity + id: LoadoutSecurityRevolverNonLethal + category: JobsSecurityAUncategorized cost: 0 - exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingOuterArmorBasic + - WeaponRevolverInspectorNonLethalSecurity - type: loadout - id: LoadoutClothingOuterArmorSlim - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutSecurityRevolverDeckard + category: JobsSecurityAUncategorized + cost: 1 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - ClothingOuterArmorBasicSlim - -- type: loadout - id: LoadoutClothingOuterCoatDetective - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity - - !type:CharacterJobRequirement - jobs: - - Detective - items: - - ClothingOuterCoatDetective - -- type: loadout - id: LoadoutOuterVestDetective - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity - - !type:CharacterJobRequirement - jobs: - - Detective - items: - - ClothingOuterVestDetective - -- type: loadout - id: LoadoutClothingOuterCoatWarden - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity - - !type:CharacterJobRequirement - jobs: - - Warden - items: - - ClothingOuterCoatWarden - -- type: loadout - id: LoadoutClothingOuterCoatHoSTrench - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingOuterCoatHoSTrench - -- type: loadout - id: LoadoutClothingOuterWinterHoS - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingOuterWinterHoS - -# Neck -- type: loadout - id: LoadoutClothingNeckCloakHos - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingNeckCloakHos - -- type: loadout - id: LoadoutClothingNeckMantleHOS - category: JobsSecurity - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckSecurity - - !type:CharacterJobRequirement - jobs: - - HeadOfSecurity - items: - - ClothingNeckMantleHOS + - WeaponRevolverDeckardSecurity - type: loadout - id: LoadoutBedsheetBrigmedic - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutSecurityRevolverDeckardNonLethal + category: JobsSecurityAUncategorized + cost: 1 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutNeckSecurity - - !type:CharacterJobRequirement - jobs: - - Brigmedic + group: LoadoutSecurityWeapons + - !type:CharacterDepartmentRequirement + departments: + - Security items: - - BedsheetBrigmedic + - WeaponRevolverDeckardNonLethalSecurity -# Equipment, limit 3 selections -# Duplicate "Spare" equipment exists and shares the ItemGroup, for those officers who like to pack a spare magazine in their pocket, outside of what was issued to them. -# I knew a lot of people in my time working IRL Armed security that did this. - type: loadout - id: LoadoutSecurityCombatKnife - category: JobsSecurity - cost: 0 + id: LoadoutSecurityPistolN1984 + category: JobsSecurityAUncategorized + cost: 5 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - CombatKnife + - WeaponPistolN1984Security - type: loadout - id: LoadoutSecurityFlash - category: JobsSecurity - cost: 0 + id: LoadoutSecurityPistolN1984NonLethal + category: JobsSecurityAUncategorized + cost: 5 requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - Flash + - WeaponPistolN1984SecurityNonLethal - type: loadout - id: LoadoutMagazinePistol - category: JobsSecurity - cost: 0 + id: LoadoutSecurityPistolViper + category: JobsSecurityAUncategorized + cost: 2 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazinePistol + - WeaponPistolViperSecurity - type: loadout - id: LoadoutMagazinePistolSpare - category: JobsSecurity + id: LoadoutSecurityPistolViperNonLethal + category: JobsSecurityAUncategorized cost: 2 requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazinePistol + - WeaponPistolViperSecurityNonLethal - type: loadout - id: LoadoutMagazinePistolRubber - category: JobsSecurity - cost: 0 + id: LoadoutSecurityPistolViperWood + category: JobsSecurityAUncategorized + cost: 2 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 108000 # 30 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazinePistolRubber + - WeaponPistolViperWoodSecurity - type: loadout - id: LoadoutMagazinePistolRubberSpare - category: JobsSecurity - cost: 2 + id: LoadoutSecurityEquipmentTruncheon + category: JobsSecurityAUncategorized + cost: 3 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security + - !type:CharacterSpeciesRequirement + species: + - Oni items: - - MagazinePistolRubber + - Truncheon - type: loadout - id: LoadoutSpeedLoaderMagnum - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutSecurityPistolSvalin + category: JobsSecurityAUncategorized + cost: 1 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - SpeedLoaderMagnum + - WeaponLaserSvalinn - type: loadout - id: LoadoutSpeedLoaderMagnumSpare - category: JobsSecurity + id: LoadoutSecurityEnergyGunMini + category: JobsSecurityAUncategorized cost: 2 - exclusive: true requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - SpeedLoaderMagnum + - WeaponEnergyGunMiniSecurity - type: loadout - id: LoadoutSpeedLoaderMagnumRubber - category: JobsSecurity - cost: 0 - exclusive: true + id: LoadoutSecurityEnergyGunPistol + category: JobsSecurityAUncategorized + cost: 2 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - SpeedLoaderMagnumRubber + - WeaponEnergyGunPistolSecurity - type: loadout - id: LoadoutSpeedLoaderMagnumRubberSpare - category: JobsSecurity - cost: 2 - exclusive: true + id: LoadoutSecurityPistolPollock + category: JobsSecurityAUncategorized + cost: 1 requirements: + - !type:CharacterDepartmentTimeRequirement + department: Security + min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - SpeedLoaderMagnumRubber + - WeaponPistolPollockSecurity - type: loadout - id: LoadoutMagazineMagnum - category: JobsSecurity - cost: 2 - exclusive: true + id: LoadoutSecurityPistolPollockNonlethal + category: JobsSecurityAUncategorized + cost: 1 requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazineMagnum + - WeaponPistolPollockNonlethalSecurity - type: loadout - id: LoadoutMagazineMagnumRubber - category: JobsSecurity - cost: 2 - exclusive: true + id: LoadoutSecurityRevolverSnub + category: JobsSecurityAUncategorized + cost: 3 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazineMagnumRubber + - WeaponRevolverSnubSecurity - type: loadout - id: LoadoutMagazineMagnumSpare - category: JobsSecurity - cost: 2 - exclusive: true + id: LoadoutSecurityRevolverSnubNonlethal + category: JobsSecurityAUncategorized + cost: 3 requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazineMagnum + - WeaponRevolverSnubNonlethalSecurity - type: loadout - id: LoadoutMagazineMagnumRubberSpare - category: JobsSecurity - cost: 2 - exclusive: true + id: LoadoutSecurityRevolverK38Master + category: JobsSecurityAUncategorized + cost: 1 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - MagazineMagnumRubber + - WeaponRevolverK38MasterSecurity -# Service Weapon, limit 1 selection. -# Security no longer spawns with a weapon automatically, instead they have a free choice of security appropriate Duty Pistol in their loadouts. -# This category is universal to the entire security department by special request, so that players can choose their preferred Duty Pistol even if they aren't playing a security role. -# All lethal options come with a 1 hour security department playtime, as a basic shitter protection. - type: loadout - id: LoadoutSecurityDisabler - category: JobsSecurity - cost: 0 + id: LoadoutSecurityRevolverK38MasterNonlethal + category: JobsSecurityAUncategorized + cost: 1 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponDisabler + - WeaponRevolverK38MasterNonlethalSecurity - type: loadout - id: LoadoutSecurityMk58 - category: JobsSecurity - cost: 0 + id: LoadoutSecurityRevolverFitz + category: JobsSecurityAUncategorized + cost: 2 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolMk58Security + - WeaponRevolverFitzSecurity - type: loadout - id: LoadoutSecurityMk58NonLethal - category: JobsSecurity - cost: 0 + id: LoadoutSecurityRevolverFitzNonlethal + category: JobsSecurityAUncategorized + cost: 2 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolMk58SecurityNonlethal + - WeaponRevolverFitzNonlethalSecurity - type: loadout - id: LoadoutSecurityRevolver - category: JobsSecurity - cost: 0 + id: LoadoutSecurityRevolverPython + category: JobsSecurityAUncategorized + cost: 5 requirements: - !type:CharacterDepartmentTimeRequirement department: Security min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverInspectorSecurity + - WeaponRevolverPythonSecurity - type: loadout - id: LoadoutSecurityRevolverNonLethal - category: JobsSecurity - cost: 0 + id: LoadoutSecurityRevolverPythonNonlethal + category: JobsSecurityAUncategorized + cost: 5 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityWeapons - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverInspectorNonLethalSecurity + - WeaponRevolverPythonNonlethalSecurity +# Eyes - type: loadout - id: LoadoutSecurityRevolverDeckard - category: JobsSecurity - cost: 1 + id: LoadoutSecurityEyesHudSecurity + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityEyes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverDeckardSecurity + - ClothingEyesHudSecurity - type: loadout - id: LoadoutSecurityRevolverDeckardNonLethal - category: JobsSecurity - cost: 1 + id: ClothingEyesGlassesSunglasses + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityEyes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverDeckardNonLethalSecurity + - ClothingEyesGlassesSunglasses - type: loadout - id: LoadoutSecurityPistolN1984 - category: JobsSecurity - cost: 2 + id: LoadoutSecurityEyesEyepatchHudSecurity + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityEyes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolN1984Security + - ClothingEyesEyepatchHudSecurity - type: loadout - id: LoadoutSecurityPistolN1984NonLethal - category: JobsSecurity - cost: 2 + id: LoadoutSecurityEyesHudSecurityPrescription + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityEyes - !type:CharacterDepartmentRequirement departments: - Security + - !type:CharacterTraitRequirement + traits: + - Nearsighted items: - - WeaponPistolN1984SecurityNonLethal + - ClothingEyesPrescriptionHudSecurity - type: loadout - id: LoadoutSecurityPistolViper - category: JobsSecurity + id: LoadoutClothingEyesGlassesSecurity + category: JobsSecurityAUncategorized cost: 2 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityEyes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolViperSecurity + - ClothingEyesGlassesSecurity + +# Gloves +# Head - type: loadout - id: LoadoutSecurityPistolViperNonLethal - category: JobsSecurity - cost: 2 + id: LoadoutSecurityHeadHatBeret + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityHead - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolViperSecurityNonLethal + - ClothingHeadHatBeretSecurity - type: loadout - id: LoadoutSecurityPistolViperWood - category: JobsSecurity - cost: 2 + id: LoadoutClothingHeadHelmetBasic + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 108000 # 30 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityHead - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolViperWoodSecurity + - ClothingHeadHelmetBasic - type: loadout - id: LoadoutSecurityEquipmentTruncheon - category: JobsSecurity - cost: 3 + id: LoadoutSecurityHeadHelmetInsulated + category: JobsSecurityAUncategorized + cost: 1 requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityHead - !type:CharacterDepartmentRequirement departments: - Security - - !type:CharacterSpeciesRequirement - species: - - Oni items: - - Truncheon + - ClothingHeadHelmetInsulated +# Id + +# Neck + +# Mask - type: loadout - id: LoadoutSecurityPistolSvalin - category: JobsSecurity - cost: 1 + id: LoadoutSecurityMaskGasSwat + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity - - !type:CharacterDepartmentRequirement - departments: - - Security + group: LoadoutSecurityMask + - !type:CharacterJobRequirement + jobs: + - Warden + - HeadOfSecurity items: - - WeaponLaserSvalinn + - ClothingMaskGasSwat +# Outer - type: loadout - id: LoadoutSecurityEnergyGunMini - category: JobsSecurity - cost: 2 + id: LoadoutClothingOuterArmorPlateCarrier + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityOuter - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponEnergyGunMiniSecurity + - ClothingOuterArmorPlateCarrier - type: loadout - id: LoadoutSecurityEnergyGunPistol - category: JobsSecurity - cost: 2 + id: LoadoutClothingOuterArmorDuraVest + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityOuter - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponEnergyGunPistolSecurity + - ClothingOuterArmorDuraVest - type: loadout - id: LoadoutSecurityPistolPollock - category: JobsSecurity - cost: 1 + id: LoadoutClothingOuterArmorBasic + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityOuter - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolPollockSecurity + - ClothingOuterArmorBasic - type: loadout - id: LoadoutSecurityPistolPollockNonlethal - category: JobsSecurity - cost: 1 + id: LoadoutClothingOuterArmorSlim + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityOuter - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponPistolPollockNonlethalSecurity + - ClothingOuterArmorBasicSlim +# Shoes - type: loadout - id: LoadoutSecurityRevolverSnub - category: JobsSecurity - cost: 2 + id: LoadoutSecurityShoesJackboots + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityShoes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverSnubSecurity + - ClothingShoesBootsJack - type: loadout - id: LoadoutSecurityRevolverSnubNonlethal - category: JobsSecurity - cost: 2 + id: LoadoutClothingShoesBootsCombat + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityShoes - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverSnubNonlethalSecurity + - ClothingShoesBootsCombatFilled +# Uniforms - type: loadout - id: LoadoutSecurityRevolverK38Master - category: JobsSecurity - cost: 1 + id: LoadoutSecurityUniformJumpsuitBlue + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverK38MasterSecurity + - ClothingUniformJumpsuitSecBlue - type: loadout - id: LoadoutSecurityRevolverK38MasterNonlethal - category: JobsSecurity - cost: 1 + id: LoadoutSecurityUniformJumpsuitGrey + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverK38MasterNonlethalSecurity + - ClothingUniformJumpsuitSecGrey - type: loadout - id: LoadoutSecurityRevolverFitz - category: JobsSecurity - cost: 1 + id: LoadoutSecurityUniformJumpskirtGrey + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverFitzSecurity + - ClothingUniformJumpskirtSecGrey - type: loadout - id: LoadoutSecurityRevolverFitzNonlethal - category: JobsSecurity - cost: 1 + id: LoadoutSecurityUniformJumpskirtBlue + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverFitzNonlethalSecurity + - ClothingUniformJumpskirtSecBlue - type: loadout - id: LoadoutSecurityRevolverPython - category: JobsSecurity - cost: 3 + id: LoadoutUniformJumpsuitSecFormal + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - - !type:CharacterDepartmentTimeRequirement - department: Security - min: 3600 # 1 hours - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverPythonSecurity + - ClothingUniformJumpsuitSecFormal - type: loadout - id: LoadoutSecurityRevolverPythonNonlethal - category: JobsSecurity - cost: 3 + id: LoadoutUniformJumpsuitSecSummer + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true requirements: - !type:CharacterItemGroupRequirement - group: LoadoutWeaponSecurity + group: LoadoutSecurityUniforms - !type:CharacterDepartmentRequirement departments: - Security items: - - WeaponRevolverPythonNonlethalSecurity + - ClothingUniformJumpsuitSecSummer diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml new file mode 100644 index 00000000000..45ef25e326a --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml @@ -0,0 +1,107 @@ +# Warden +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutClothingHeadHatBeretWarden + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenHead + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingHeadHatBeretWarden + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutClothingOuterCoatWarden + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenOuter + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingOuterCoatWarden + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutUniformJumpsuitWardenBlue + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenUniforms + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingUniformJumpsuitWardenBlue + +- type: loadout + id: LoadoutUniformJumpsuitWardenGrey + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenUniforms + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingUniformJumpsuitWardenGrey + +- type: loadout + id: LoadoutUniformJumpskirtWardenBlue + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenUniforms + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingUniformJumpskirtWardenBlue + +- type: loadout + id: LoadoutUniformJumpskirtWardenGrey + category: JobsSecurityWarden + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutWardenUniforms + - !type:CharacterJobRequirement + jobs: + - Warden + items: + - ClothingUniformJumpskirtWardenGrey diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml new file mode 100644 index 00000000000..e3540a2234a --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml @@ -0,0 +1,232 @@ +# Bartender +# Backpacks + +# Belt + +# Ears + +# Equipment +- type: loadout + id: LoadoutServiceBartenderBoxBeanbags + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderAmmo + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - BoxBeanbag + +- type: loadout + id: LoadoutServiceBartenderBoxLightRifleRubber + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderAmmo + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - MagazineBoxLightRifleRubber + +- type: loadout + id: LoadoutServiceBartenderShotgunDoubleBarreledRubber + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderWeapon + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - WeaponShotgunDoubleBarreledRubber + +- type: loadout + id: LoadoutServiceBartenderMosinRubber + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderWeapon + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - WeaponSniperMosinRubber + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutServiceHeadBartenderNt + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderHead + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingHeadHatFlatcapBartenderNanotrasen + +- type: loadout + id: LoadoutServiceHeadBartenderIdris + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderHead + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingHeadHatFlatcapBartenderIdris + +- type: loadout + id: LoadoutServiceHeadBartenderOrion + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderHead + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingHeadHatFlatcapBartenderOrion + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutServiceBartenderArmorDuraVest + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderOuter + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingOuterArmorDuraVest + +- type: loadout + id: LoadoutServiceOuterBartenderNt + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderOuter + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingOuterVestNt + +- type: loadout + id: LoadoutServiceOuterBartenderIdris + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderOuter + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingOuterVestIdris + +- type: loadout + id: LoadoutServiceOuterBartenderOrion + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderOuter + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingOuterVestOrion + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceBartenderUniformPurple + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderUniforms + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingUniformJumpsuitBartenderPurple + +- type: loadout + id: LoadoutServiceJumpsuitBartenderNt + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderUniforms + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingUniformJumpsuitBartenderNt + +- type: loadout + id: LoadoutServiceJumpsuitBartenderIdris + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderUniforms + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingUniformJumpsuitBartenderIdris + +- type: loadout + id: LoadoutServiceJumpsuitBartenderOrion + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderUniforms + - !type:CharacterJobRequirement + jobs: + - Bartender + items: + - ClothingUniformJumpsuitBartenderOrion diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml b/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml new file mode 100644 index 00000000000..c34eb3f55ab --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/botanist.yml @@ -0,0 +1,81 @@ +# Botanist +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceBotanistUniformOveralls + category: JobsServiceBotanist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBotanistUniforms + - !type:CharacterJobRequirement + jobs: + - Botanist + items: + - ClothingUniformOveralls + +- type: loadout + id: LoadoutServiceJumpsuitHydroponicsNt + category: JobsServiceBotanist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBotanistUniforms + - !type:CharacterJobRequirement + jobs: + - Botanist + items: + - ClothingUniformJumpsuitHydroponicsNt + +- type: loadout + id: LoadoutServiceJumpsuitHydroponicsIdris + category: JobsServiceBotanist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBotanistUniforms + - !type:CharacterJobRequirement + jobs: + - Botanist + items: + - ClothingUniformJumpsuitHydroponicsIdris + +- type: loadout + id: LoadoutServiceJumpsuitHydroponicsOrion + category: JobsServiceBotanist + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBotanistUniforms + - !type:CharacterJobRequirement + jobs: + - Botanist + items: + - ClothingUniformJumpsuitHydroponicsOrion diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/chef.yml b/Resources/Prototypes/Loadouts/Jobs/Service/chef.yml new file mode 100644 index 00000000000..abdbbea5b40 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/chef.yml @@ -0,0 +1,149 @@ +# Chef +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head +- type: loadout + id: LoadoutServiceHeadChefNt + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefHead + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingHeadHatChefNt + +- type: loadout + id: LoadoutServiceHeadChefIdris + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefHead + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingHeadHatChefIdris + +- type: loadout + id: LoadoutServiceHeadChefOrion + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefHead + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingHeadHatChefOrion + +# Id + +# Neck + +# Mask + +# Outer +- type: loadout + id: LoadoutServiceOuterChefNt + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefOuter + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingOuterJacketChefNt + +- type: loadout + id: LoadoutServiceOuterChefIdris + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefOuter + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingOuterJacketChefIdris + +- type: loadout + id: LoadoutServiceOuterChefOrion + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefOuter + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingOuterJacketChefOrion + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceJumpsuitChefNt + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefUniforms + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingUniformJumpsuitChefNt + +- type: loadout + id: LoadoutServiceJumpsuitChefIdris + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefUniforms + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingUniformJumpsuitChefIdris + +- type: loadout + id: LoadoutServiceJumpsuitChefOrion + category: JobsServiceChef + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutChefUniforms + - !type:CharacterJobRequirement + jobs: + - Chef + items: + - ClothingUniformJumpsuitChefOrion diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml b/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml new file mode 100644 index 00000000000..a522ab8c9db --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/clown.yml @@ -0,0 +1,164 @@ +# Clown +# Backpacks +- type: loadout + id: LoadoutBackpackClown + category: JobsServiceClown + cost: 0 + exclusive: true + items: + - ClothingBackpackClown + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownBackpacks + - !type:CharacterJobRequirement + jobs: + - Clown + +- type: loadout + id: LoadoutBackpackSatchelClown + category: JobsServiceClown + cost: 0 + exclusive: true + items: + - ClothingBackpackSatchelClown + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownBackpacks + - !type:CharacterJobRequirement + jobs: + - Clown + +- type: loadout + id: LoadoutBackpackDuffelClown + category: JobsServiceClown + cost: 0 + exclusive: true + items: + - ClothingBackpackDuffelClown + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownBackpacks + - !type:CharacterJobRequirement + jobs: + - Clown + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck +- type: loadout + id: LoadoutServiceClownBedsheetClown + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownNeck + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - BedsheetClown + +# Mask +- type: loadout + id: LoadoutServiceClownMaskSexy + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownMask + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingMaskSexyClown + +# Outer +- type: loadout + id: LoadoutServiceClownOuterWinter + category: JobsServiceClown + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownOuter + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingOuterWinterClown + +- type: loadout + id: LoadoutServiceClownOuterClownPriest + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownOuter + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingOuterClownPriest + +# Shoes +- type: loadout + id: LoadoutServiceClownBootsWinter + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownShoes + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingShoesBootsWinterClown + +# Uniforms +- type: loadout + id: LoadoutServiceClownOutfitJester + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownUniforms + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingUniformJumpsuitJester + - ClothingHeadHatJester + - ClothingShoesJester + +- type: loadout + id: LoadoutServiceClownOutfitJesterAlt + category: JobsServiceClown + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutClownUniforms + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - ClothingUniformJumpsuitJesterAlt + - ClothingHeadHatJesterAlt + - ClothingShoesJester diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml b/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml new file mode 100644 index 00000000000..b8a2909e209 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/janitor.yml @@ -0,0 +1,67 @@ +# Janitor +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceJumpsuitJanitorNt + category: JobsServiceJanitor + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutJanitorUniforms + - !type:CharacterJobRequirement + jobs: + - Janitor + items: + - ClothingUniformJumpsuitJanitorNt + +- type: loadout + id: LoadoutServiceJumpsuitJanitorIdris + category: JobsServiceJanitor + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutJanitorUniforms + - !type:CharacterJobRequirement + jobs: + - Janitor + items: + - ClothingUniformJumpsuitJanitorIdris + +- type: loadout + id: LoadoutServiceJumpsuitJanitorOrion + category: JobsServiceJanitor + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutJanitorUniforms + - !type:CharacterJobRequirement + jobs: + - Janitor + items: + - ClothingUniformJumpsuitJanitorOrion diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/lawyer.yml b/Resources/Prototypes/Loadouts/Jobs/Service/lawyer.yml new file mode 100644 index 00000000000..d2dd0393cdc --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/lawyer.yml @@ -0,0 +1,137 @@ +# Lawyer +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceLawyerUniformBlueSuit + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpsuitLawyerBlue + +- type: loadout + id: LoadoutServiceLawyerUniformBlueSkirt + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpskirtLawyerBlue + +- type: loadout + id: LoadoutServiceLawyerUniformRedSuit + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpsuitLawyerRed + +- type: loadout + id: LoadoutServiceLawyerUniformRedSkirt + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpskirtLawyerRed + +- type: loadout + id: LoadoutServiceLawyerUniformPurpleSuit + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpsuitLawyerPurple + +- type: loadout + id: LoadoutServiceLawyerUniformPurpleSkirt + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpskirtLawyerPurple + +- type: loadout + id: LoadoutServiceLawyerUniformGoodSuit + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpsuitLawyerGood + +- type: loadout + id: LoadoutServiceLawyerUniformGoodSkirt + category: JobsServiceLawyer + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutLawyerUniforms + - !type:CharacterJobRequirement + jobs: + - Lawyer + items: + - ClothingUniformJumpskirtLawyerGood diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/mime.yml b/Resources/Prototypes/Loadouts/Jobs/Service/mime.yml new file mode 100644 index 00000000000..d83ce2bae18 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/mime.yml @@ -0,0 +1,106 @@ +# Mime +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck +- type: loadout + id: LoadoutServiceMimeBedsheetMime + category: JobsServiceMime + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeNeck + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - BedsheetMime + + +# Mask +- type: loadout + id: LoadoutServiceMimeMaskSad + category: JobsServiceMime + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeMask + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - ClothingMaskSadMime + +- type: loadout + id: LoadoutServiceMimeMaskScared + category: JobsServiceMime + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeMask + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - ClothingMaskScaredMime + +- type: loadout + id: LoadoutServiceMimeMaskSexy + category: JobsServiceMime + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeMask + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - ClothingMaskSexyMime + +# Outer +- type: loadout + id: LoadoutServiceMimeOuterWinter + category: JobsServiceMime + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeOuter + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - ClothingOuterWinterMime + +# Shoes +- type: loadout + id: LoadoutServiceMimeShoesBootsWinter + category: JobsServiceMime + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutMimeShoes + - !type:CharacterJobRequirement + jobs: + - Mime + items: + - ClothingShoesBootsWinterMime +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml index 5bf5471697b..8a161e3e3aa 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/musician.yml @@ -1,4 +1,11 @@ # Musician +# Backpacks + +# Belt + +# Ears + +# Equipment # Musician Instruments # Brass Instruments - type: loadout @@ -7,7 +14,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -20,7 +27,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -33,7 +40,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -46,7 +53,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -60,7 +67,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -73,7 +80,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -88,7 +95,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -101,7 +108,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -114,7 +121,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -127,7 +134,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -140,7 +147,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -153,7 +160,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -166,7 +173,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -180,7 +187,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -193,7 +200,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -206,7 +213,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -219,7 +226,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -232,7 +239,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -245,7 +252,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -258,7 +265,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -271,7 +278,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -285,7 +292,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -298,7 +305,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -311,7 +318,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -324,7 +331,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -337,7 +344,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -350,7 +357,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -363,7 +370,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -376,7 +383,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -389,7 +396,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -402,7 +409,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -415,7 +422,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -428,7 +435,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -442,7 +449,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -455,7 +462,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -468,7 +475,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -481,7 +488,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -494,7 +501,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -507,7 +514,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -520,7 +527,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -533,7 +540,7 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician @@ -546,9 +553,27 @@ cost: 0 requirements: - !type:CharacterItemGroupRequirement - group: LoadoutMusicianInstruments + group: LoadoutMusicianEquipment - !type:CharacterJobRequirement jobs: - Musician items: - BagpipeInstrument + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/reporter.yml b/Resources/Prototypes/Loadouts/Jobs/Service/reporter.yml new file mode 100644 index 00000000000..d03b95b3a0c --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/reporter.yml @@ -0,0 +1,67 @@ +# Reporter +# Backpacks + +# Belt + +# Ears + +# Equipment + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms +- type: loadout + id: LoadoutServiceReporterUniformDetectivesuit + category: JobsServiceReporter + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutReporterUniforms + - !type:CharacterJobRequirement + jobs: + - Reporter + items: + - ClothingUniformJumpsuitDetective + +- type: loadout + id: LoadoutServiceReporterUniformDetectiveskirt + category: JobsServiceReporter + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutReporterUniforms + - !type:CharacterJobRequirement + jobs: + - Reporter + items: + - ClothingUniformJumpskirtDetective + +- type: loadout + id: LoadoutServiceReporterUniformJournalist + category: JobsServiceReporter + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutReporterUniforms + - !type:CharacterJobRequirement + jobs: + - Reporter + items: + - ClothingUniformJumpsuitJournalist diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/uncategorized.yml b/Resources/Prototypes/Loadouts/Jobs/Service/uncategorized.yml new file mode 100644 index 00000000000..fe03506dad9 --- /dev/null +++ b/Resources/Prototypes/Loadouts/Jobs/Service/uncategorized.yml @@ -0,0 +1,72 @@ +# Uncategorized +# Backpacks + +# Belt + +# Ears + +# Equipment +# For the most part we dont want people to take this item, so its used as an example of all the things +# you can do with requirements. Point someone to this thing if they ask "how tf do loadout requirements work?" +- type: loadout + id: LoadoutServiceClownCowToolboxFilled + category: JobsServiceAUncategorized + cost: 2 + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutServiceEquipment + - !type:CharacterLogicXorRequirement + requirements: + - !type:CharacterLogicAndRequirement + requirements: + - !type:CharacterSexRequirement + sex: Male + - !type:CharacterSpeciesRequirement + species: + - Felinid + - !type:CharacterHeightRequirement + min: 110 + max: 122 + - !type:CharacterGenderRequirement + gender: Female + - !type:CharacterTraitRequirement + traits: + - HeavyweightDrunk + - !type:CharacterLogicAndRequirement + requirements: + - !type:CharacterSpeciesRequirement + species: + - Harpy + - !type:CharacterHeightRequirement + min: 170 + - !type:CharacterWeightRequirement + min: 20 + - !type:CharacterSexRequirement + sex: Male + - !type:CharacterJobRequirement + inverted: true # This is the equivalent of !(condition) + jobs: + - Clown + - !type:CharacterJobRequirement + jobs: + - Clown + items: + - CowToolboxFilled + +# Eyes + +# Gloves + +# Head + +# Id + +# Neck + +# Mask + +# Outer + +# Shoes + +# Uniforms diff --git a/Resources/Prototypes/Loadouts/Jobs/cargo.yml b/Resources/Prototypes/Loadouts/Jobs/cargo.yml deleted file mode 100644 index 7e9c525e409..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/cargo.yml +++ /dev/null @@ -1,72 +0,0 @@ -# Cargo technician -- type: loadout - id: LoadoutCargoOuterWinterCargo - category: JobsCargo - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterCargo - - !type:CharacterJobRequirement - jobs: - - CargoTechnician - items: - - ClothingOuterWinterCargo - -- type: loadout - id: LoadoutCargoShoesBootsWinterCargo - category: JobsCargo - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoesCargo - - !type:CharacterJobRequirement - jobs: - - CargoTechnician - items: - - ClothingShoesBootsWinterCargo - -# Salvage specialist - -- type: loadout - id: LoadoutCargoOuterWinterMiner - category: JobsCargo - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterCargo - - !type:CharacterJobRequirement - jobs: - - SalvageSpecialist - items: - - ClothingOuterWinterMiner - -- type: loadout - id: LoadoutCargoNeckGoliathCloak - category: JobsCargo - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckCargo - - !type:CharacterJobRequirement - jobs: - - SalvageSpecialist - - !type:CharacterPlaytimeRequirement - tracker: JobSalvageSpecialist - min: 36000 # 10 hours - items: - - ClothingNeckCloakGoliathCloak - -- type: loadout - id: LoadoutCargoWeaponsCrusherDagger - category: JobsCargo - cost: 2 - requirements: - - !type:CharacterJobRequirement - jobs: - - SalvageSpecialist - items: - - WeaponCrusherDagger diff --git a/Resources/Prototypes/Loadouts/Jobs/engineering.yml b/Resources/Prototypes/Loadouts/Jobs/engineering.yml deleted file mode 100644 index 2bf857c85fb..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/engineering.yml +++ /dev/null @@ -1,194 +0,0 @@ -- type: loadout - id: LoadoutEngineeringUniformHazard - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - items: - - ClothingUniformJumpsuitEngineeringHazard - -- type: loadout - id: LoadoutEngineeringOuterHazard - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - items: - - ClothingOuterVestHazard - -- type: loadout - id: LoadoutEngineeringUniformJumpskirtSenior - category: JobsEngineering - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - !type:CharacterPlaytimeRequirement - tracker: JobAtmosphericTechnician - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobStationEngineer - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Engineering - min: 216000 # 60 hours - items: - - ClothingUniformJumpskirtSeniorEngineer - -- type: loadout - id: LoadoutEngineeringUniformJumpsuitSenior - category: JobsEngineering - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - !type:CharacterPlaytimeRequirement - tracker: JobAtmosphericTechnician - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobStationEngineer - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Engineering - min: 216000 # 60 hours - items: - - ClothingUniformJumpsuitSeniorEngineer - -- type: loadout - id: LoadoutEngineeringChickenSuit # :) - category: JobsEngineering - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterEngineering - - !type:CharacterJobRequirement - jobs: - - AtmosphericTechnician - items: - - ClothingOuterSuitChicken - - ClothingHeadHatChickenhead - -- type: loadout - id: LoadoutEngineeringEyesMeson - category: JobsEngineering - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingEyesGlassesMeson - -- type: loadout - id: LoadoutEngineeringHeadBeret - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - - ChiefEngineer - items: - - ClothingHeadHatBeretEngineering - -- type: loadout - id: LoadoutEngineeringHeadHardhatBlue - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingHeadHatHardhatBlue - -- type: loadout - id: LoadoutEngineeringHeadHardhatOrange - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingHeadHatHardhatOrange - -- type: loadout - id: LoadoutEngineeringHeadHardhatYellow - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingHeadHatHardhatYellow - -- type: loadout - id: LoadoutEngineeringHeadHardhatWhite - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingHeadHatHardhatWhite - -- type: loadout - id: LoadoutEngineeringHeadHardhatRed - category: JobsEngineering - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadEngineering - - !type:CharacterJobRequirement - jobs: - - StationEngineer - - AtmosphericTechnician - items: - - ClothingHeadHatHardhatRed diff --git a/Resources/Prototypes/Loadouts/Jobs/medical.yml b/Resources/Prototypes/Loadouts/Jobs/medical.yml deleted file mode 100644 index 6a2d5fb9d2e..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/medical.yml +++ /dev/null @@ -1,632 +0,0 @@ -- type: loadout - id: LoadoutMedicalGlovesNitrile - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Paramedic - - ChiefMedicalOfficer - - MedicalIntern - - Chemist - items: - - ClothingHandsGlovesNitrile - -- type: loadout - id: LoadoutMedicalOuterLabcoat - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - items: - - ClothingOuterCoatLab - -- type: loadout - id: LoadoutMedicalNeckStethoscope - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - ChiefMedicalOfficer - - MedicalIntern - items: - - ClothingNeckStethoscope - -- type: loadout - id: LoadoutMedicalUniformScrubsBlue - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorBlue - -- type: loadout - id: LoadoutMedicalUniformScrubsGreen - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorGreen - -- type: loadout - id: LoadoutMedicalUniformScrubsPurple - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorPurple - -- type: loadout - id: LoadoutMedicalUniformScrubsCyan - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorCyan - -- type: loadout - id: LoadoutMedicalUniformScrubsBlack - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorBlack - -- type: loadout - id: LoadoutMedicalUniformScrubsPink - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - UniformScrubsColorPink - -- type: loadout - id: LoadoutMedicalUniformScrubsCybersun - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - items: - - UniformScrubsColorCybersun - -- type: loadout - id: LoadoutMedicalOuterCybersunWindbreaker - category: JobsMedical - cost: 3 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - items: - - ClothingOuterCoatCybersunWindbreaker - -- type: loadout - id: LoadoutMedicalOuterLabcoatChem - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingOuterCoatLabChem - -- type: loadout - id: LoadoutMedicalItemHandLabeler - category: JobsMedical - exclusive: true - requirements: - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - HandLabeler - -- type: loadout - id: LoadoutMedicalUniformParamedicJumpsuit - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - Paramedic - items: - - ClothingUniformJumpsuitParamedic - -- type: loadout - id: LoadoutMedicalUniformParamedicJumpskirt - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - Paramedic - items: - - ClothingUniformJumpskirtParamedic - -- type: loadout - id: LoadoutMedicalUniformJumpskirtSenior - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - ChiefMedicalOfficer - - !type:CharacterPlaytimeRequirement - tracker: JobChemist - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobMedicalDoctor - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Medical - min: 216000 # 60 hours - items: - - ClothingUniformJumpskirtSeniorPhysician - -- type: loadout - id: LoadoutMedicalUniformJumpsuitSenior - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - ChiefMedicalOfficer - - !type:CharacterPlaytimeRequirement - tracker: JobChemist - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobMedicalDoctor - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Medical - min: 216000 # 60 hours - items: - - ClothingUniformJumpsuitSeniorPhysician - -- type: loadout - id: LoadoutMedicalHeadNurse - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - items: - - ClothingHeadNurseHat - -- type: loadout - id: LoadoutMedicalHeadBeretSeniorPhysician - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - ChiefMedicalOfficer - - !type:CharacterPlaytimeRequirement - tracker: JobChemist - min: 21600 # 6 hours - - !type:CharacterPlaytimeRequirement - tracker: JobMedicalDoctor - min: 21600 # 6 hours - - !type:CharacterDepartmentTimeRequirement - department: Medical - min: 216000 # 60 hours - items: - - ClothingHeadHatBeretSeniorPhysician - -- type: loadout - id: LoadoutMedicalHeadSurgcapBlue - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapBlue - -- type: loadout - id: LoadoutMedicalHeadSurgcapPurple - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapPurple - -- type: loadout - id: LoadoutMedicalHeadSurgcapGreen - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapGreen - -- type: loadout - id: LoadoutMedicalHeadSurgcapCyan - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapCyan - -- type: loadout - id: LoadoutMedicalHeadSurgcapBlack - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapBlack - -- type: loadout - id: LoadoutMedicalHeadSurgcapPink - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapPink - -- type: loadout - id: LoadoutMedicalHeadSurgcapWhite - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - - MedicalIntern - items: - - ClothingHeadHatSurgcapWhite - -- type: loadout - id: LoadoutMedicalHeadSurgcapCybersun - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Chemist - - Paramedic - items: - - ClothingHeadHatSurgcapCybersun - -- type: loadout - id: LoadoutMedicalEyesHudMedical - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Paramedic - - ChiefMedicalOfficer - - MedicalIntern - - Brigmedic - items: - - ClothingEyesHudMedical - -- type: loadout - id: LoadoutMedicalEyesEyepatchHudMedical - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Paramedic - - ChiefMedicalOfficer - - MedicalIntern - - Brigmedic - items: - - ClothingEyesEyepatchHudMedical - -- type: loadout - id: LoadoutMedicalEyesHudMedicalPrescription - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesMedical - - !type:CharacterJobRequirement - jobs: - - MedicalDoctor - - Paramedic - - ChiefMedicalOfficer - - MedicalIntern - - Brigmedic - - !type:CharacterTraitRequirement - traits: - - Nearsighted - items: - - ClothingEyesPrescriptionMedHud - -- type: loadout - id: LoadoutMedicalEyesGlassesChemical - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingEyesGlassesChemical - -- type: loadout - id: LoadoutMedicalBedsheetMedical - category: JobsMedical - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckMedical - - !type:CharacterDepartmentRequirement - departments: - - Medical - items: - - BedsheetMedical - -# Chemist PPE gear -- type: loadout - id: LoadoutMedicalUniformJumpsuitChemShirt - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingUniformJumpsuitChemShirt - -- type: loadout - id: LoadoutMedicalNeckTieChem - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingNeckTieChem - -- type: loadout - id: LoadoutMedicalShoesEnclosedChem - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoesMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingShoesEnclosedChem - -- type: loadout - id: LoadoutMedicalOuterApronChemist - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingOuterApronChemist - -- type: loadout - id: LoadoutMedicalEyesGlassesChemist - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingEyesGlassesChemist - -- type: loadout - id: LoadoutMedicalHandsGlovesChemist - category: JobsMedical - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesMedical - - !type:CharacterJobRequirement - jobs: - - Chemist - items: - - ClothingHandsGlovesChemist diff --git a/Resources/Prototypes/Loadouts/Jobs/science.yml b/Resources/Prototypes/Loadouts/Jobs/science.yml deleted file mode 100644 index 3f376ec872d..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/science.yml +++ /dev/null @@ -1,713 +0,0 @@ -# Uniforms - -- type: loadout - id: LoadoutScienceUniformJumpskirtSenior - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - - !type:CharacterDepartmentTimeRequirement - department: Epistemics - min: 216000 # 60 hours - items: - - ClothingUniformJumpskirtSeniorResearcher - -- type: loadout - id: LoadoutScienceUniformJumpsuitSenior - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - - !type:CharacterDepartmentTimeRequirement - department: Epistemics - min: 216000 # 60 hours - items: - - ClothingUniformJumpsuitSeniorResearcher - -- type: loadout - id: LoadoutScienceUniformJumpskirtRoboticist - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingUniformJumpskirtRoboticist - -- type: loadout - id: LoadoutScienceUniformJumpsuitRoboticist - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingUniformJumpsuitRoboticist - -- type: loadout - id: LoadoutScienceUniformJumpsuitMonasticRobeDark - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingUniformJumpsuitMonasticRobeDark - -- type: loadout - id: LoadoutScienceUniformJumpsuitMonasticRobeLight - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingUniformJumpsuitMonasticRobeLight - -# Outer - -- type: loadout - id: LoadoutScienceOuterCoat - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingOuterCoatRnd - -- type: loadout - id: LoadoutScienceOuterLabcoat - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingOuterCoatLab - -- type: loadout - id: LoadoutSciencegOuterCoatRobo - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingOuterCoatRobo - -- type: loadout - id: LoadoutScienceOuterWinterSci - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingOuterWinterSci - -- type: loadout - id: LoadoutScienceOuterLabcoatSeniorResearcher - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - - !type:CharacterDepartmentTimeRequirement - department: Epistemics - min: 216000 # 60 hours - items: - - ClothingOuterCoatLabSeniorResearcher - -- type: loadout - id: LoadoutScienceOuterExplorerLabcoat - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingOuterExplorerCoat - -- type: loadout - id: LoadoutScienceOuterPlagueSuit - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingOuterPlagueSuit - -- type: loadout - id: LoadoutScienceOuterNunRobe - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingOuterNunRobe - -- type: loadout - id: LoadoutScienceOuterHoodieBlack - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingOuterHoodieBlack - -- type: loadout - id: LoadoutScienceOuterHoodieChaplain - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingOuterHoodieChaplain - -- type: loadout - id: LoadoutScienceOuterWinterCoatMantis - category: JobsScience - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterJobRequirement - jobs: - - ForensicMantis - items: - - ClothingOuterWinterCoatMantis - -# Gloves - -- type: loadout - id: LoadoutScienceHandsGlovesColorPurple - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingHandsGlovesColorPurple - -- type: loadout - id: LoadoutScienceHandsGlovesLatex - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingHandsGlovesLatex - -- type: loadout - id: LoadoutScienceHandsGlovesRobohands - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGlovesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingHandsGlovesRobohands - -# Neck - -- type: loadout - id: LoadoutScienceNeckTieSci - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingNeckTieSci - -- type: loadout - id: LoadoutScienceNeckScarfStripedPurple - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingNeckScarfStripedPurple - -- type: loadout - id: LoadoutScienceNeckStoleChaplain - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingNeckStoleChaplain - -- type: loadout - id: LoadoutScienceNeckScarfStripedBlack - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingNeckScarfStripedBlack - -# Mask - -- type: loadout - id: LoadoutScienceMaskPlague - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingMaskPlague - -# Head - -- type: loadout - id: LoadoutScienceHeadHatBeret - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingHeadHatBeretRND - -- type: loadout - id: LoadoutScienceHeadHatFez - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingHeadHatFez - -- type: loadout - id: LoadoutScienceHeadHatHoodNunHood - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingHeadHatHoodNunHood - -- type: loadout - id: LoadoutScienceHeadHatPlaguedoctor - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingHeadHatPlaguedoctor - -- type: loadout - id: LoadoutScienceHeadHatWitch - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingHeadHatWitch - -- type: loadout - id: LoadoutScienceHeadHatWitch1 - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingHeadHatWitch1 - -# Eyes - -- type: loadout - id: LoadoutScienceEyesHudDiagnostic - category: JobsScience - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingEyesHudDiagnostic - -- type: loadout - id: LoadoutScienceEyesEyepatchHudDiag - category: JobsScience - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEyesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingEyesEyepatchHudDiag - -# Shoes - -- type: loadout - id: LoadoutScienceShoesBootsWinterSci - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoesScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - items: - - ClothingShoesBootsWinterSci - -# Robes - -- type: loadout - id: LoadoutOuterRobeTechPriest - category: Outer - cost: 0 - items: - - ClothingOuterRobeTechPriest - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutHeadHoodTechPriest - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadTechPriest - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHeadScience - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -# Cataloguer -- type: loadout - id: LoadoutScienceJumpsuitLibrarianNt - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianNt - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianIdris - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianIdris - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianOrion - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianOrion - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianHeph - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianHeph - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianPMCG - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianPMCG - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianZav - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianZav - -- type: loadout - id: LoadoutScienceJumpsuitLibrarianZeng - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarianZeng - -- type: loadout - id: LoadoutScienceJumpsuitLibrarian - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpsuitLibrarian - -- type: loadout - id: LoadoutScienceJumpskirtLibrarian - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutCataloguerUniforms - - !type:CharacterJobRequirement - jobs: - - Librarian - items: - - ClothingUniformJumpskirtLibrarian - -# Chaplain -- type: loadout - id: LoadoutChaplainJumpsuit - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChaplainUniforms - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingUniformJumpsuitChaplain - -- type: loadout - id: LoadoutChaplainJumpskirt - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChaplainUniforms - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - ClothingUniformJumpskirtChaplain - -- type: loadout - id: LoadoutChaplainBible - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChaplainEquipment - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - Bible - -- type: loadout - id: LoadoutChaplainStamp - category: JobsScience - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChaplainEquipment - - !type:CharacterJobRequirement - jobs: - - Chaplain - items: - - RubberStampChaplain diff --git a/Resources/Prototypes/Loadouts/Jobs/service.yml b/Resources/Prototypes/Loadouts/Jobs/service.yml deleted file mode 100644 index c0f04ef151a..00000000000 --- a/Resources/Prototypes/Loadouts/Jobs/service.yml +++ /dev/null @@ -1,829 +0,0 @@ -# Clown -- type: loadout - id: LoadoutServiceClownOutfitJester - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingUniformJumpsuitJester - - ClothingHeadHatJester - - ClothingShoesJester - -- type: loadout - id: LoadoutServiceClownOutfitJesterAlt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingUniformJumpsuitJesterAlt - - ClothingHeadHatJesterAlt - - ClothingShoesJester - -- type: loadout - id: LoadoutServiceClownOuterWinter - category: JobsServiceUncategorized - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingOuterWinterClown - -- type: loadout - id: LoadoutServiceClownOuterClownPriest - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingOuterClownPriest - -- type: loadout - id: LoadoutServiceClownBootsWinter - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoesService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingShoesBootsWinterClown - -- type: loadout - id: LoadoutServiceClownMaskSexy - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - ClothingMaskSexyClown - -- type: loadout - id: LoadoutServiceClownBedsheetClown - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckService - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - BedsheetClown - -# For the most part we dont want people to take this item, so its used as an example of all the things -# you can do with requirements. Point someone to this thing if they ask "how tf do loadout requirements work?" - -- type: loadout - id: LoadoutServiceClownCowToolboxFilled - category: JobsServiceUncategorized - cost: 2 - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutEquipmentService - - !type:CharacterLogicXorRequirement - requirements: - - !type:CharacterLogicAndRequirement - requirements: - - !type:CharacterSexRequirement - sex: Male - - !type:CharacterSpeciesRequirement - species: - - Felinid - - !type:CharacterHeightRequirement - min: 110 - max: 122 - - !type:CharacterGenderRequirement - gender: Female - - !type:CharacterTraitRequirement - traits: - - HeavyweightDrunk - - !type:CharacterLogicAndRequirement - requirements: - - !type:CharacterSpeciesRequirement - species: - - Harpy - - !type:CharacterHeightRequirement - min: 170 - - !type:CharacterWeightRequirement - min: 20 - - !type:CharacterSexRequirement - sex: Male - - !type:CharacterJobRequirement - inverted: true # This is the equivalent of !(condition) - jobs: - - Clown - - !type:CharacterJobRequirement - jobs: - - Clown - items: - - CowToolboxFilled - -# Mime -- type: loadout - id: LoadoutServiceMimeOuterWinter - category: JobsServiceUncategorized - cost: 1 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutOuterService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - ClothingOuterWinterMime - -- type: loadout - id: LoadoutServiceMimeMaskSad - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - ClothingMaskSadMime - -- type: loadout - id: LoadoutServiceMimeMaskScared - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - ClothingMaskScaredMime - -- type: loadout - id: LoadoutServiceMimeMaskSexy - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMaskService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - ClothingMaskSexyMime - -- type: loadout - id: LoadoutServiceMimeShoesBootsWinter - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoesService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - ClothingShoesBootsWinterMime - -- type: loadout - id: LoadoutServiceMimeBedsheetMime - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeckService - - !type:CharacterJobRequirement - jobs: - - Mime - items: - - BedsheetMime - -# Bartender -- type: loadout - id: LoadoutServiceBartenderUniformPurple - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingUniformJumpsuitBartenderPurple - -- type: loadout - id: LoadoutServiceBartenderArmorDuraVest - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderOuterwear - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingOuterArmorDuraVest - -- type: loadout - id: LoadoutServiceBartenderBoxBeanbags - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderAmmo - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - BoxBeanbag - -- type: loadout - id: LoadoutServiceBartenderBoxLightRifleRubber - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderAmmo - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - MagazineBoxLightRifleRubber - -- type: loadout - id: LoadoutServiceBartenderShotgunDoubleBarreledRubber - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderWeapon - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - WeaponShotgunDoubleBarreledRubber - -- type: loadout - id: LoadoutServiceBartenderMosinRubber - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderWeapon - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - WeaponSniperMosinRubber - -- type: loadout - id: LoadoutServiceJumpsuitBartenderNt - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderUniforms - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingUniformJumpsuitBartenderNt - -- type: loadout - id: LoadoutServiceJumpsuitBartenderIdris - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderUniforms - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingUniformJumpsuitBartenderIdris - -- type: loadout - id: LoadoutServiceJumpsuitBartenderOrion - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderUniforms - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingUniformJumpsuitBartenderOrion - -- type: loadout - id: LoadoutServiceHeadBartenderNt - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderHead - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingHeadHatFlatcapBartenderNanotrasen - -- type: loadout - id: LoadoutServiceHeadBartenderIdris - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderHead - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingHeadHatFlatcapBartenderIdris - -- type: loadout - id: LoadoutServiceHeadBartenderOrion - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderHead - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingHeadHatFlatcapBartenderOrion - -- type: loadout - id: LoadoutServiceOuterBartenderNt - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderOuterwear - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingOuterVestNt - -- type: loadout - id: LoadoutServiceOuterBartenderIdris - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderOuterwear - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingOuterVestIdris - -- type: loadout - id: LoadoutServiceOuterBartenderOrion - category: JobsServiceBartender - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBartenderOuterwear - - !type:CharacterJobRequirement - jobs: - - Bartender - items: - - ClothingOuterVestOrion - -# Botanist -- type: loadout - id: LoadoutServiceBotanistUniformOveralls - category: JobsServiceBotanist - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Botanist - items: - - ClothingUniformOveralls - -- type: loadout - id: LoadoutServiceJumpsuitHydroponicsNt - category: JobsServiceBotanist - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBotanistUniforms - - !type:CharacterJobRequirement - jobs: - - Botanist - items: - - ClothingUniformJumpsuitHydroponicsNt - -- type: loadout - id: LoadoutServiceJumpsuitHydroponicsIdris - category: JobsServiceBotanist - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBotanistUniforms - - !type:CharacterJobRequirement - jobs: - - Botanist - items: - - ClothingUniformJumpsuitHydroponicsIdris - -- type: loadout - id: LoadoutServiceJumpsuitHydroponicsOrion - category: JobsServiceBotanist - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBotanistUniforms - - !type:CharacterJobRequirement - jobs: - - Botanist - items: - - ClothingUniformJumpsuitHydroponicsOrion - -# Lawyer -- type: loadout - id: LoadoutServiceLawyerUniformBlueSuit - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpsuitLawyerBlue - -- type: loadout - id: LoadoutServiceLawyerUniformBlueSkirt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpskirtLawyerBlue - -- type: loadout - id: LoadoutServiceLawyerUniformRedSuit - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpsuitLawyerRed - -- type: loadout - id: LoadoutServiceLawyerUniformRedSkirt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpskirtLawyerRed - -- type: loadout - id: LoadoutServiceLawyerUniformPurpleSuit - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpsuitLawyerPurple - -- type: loadout - id: LoadoutServiceLawyerUniformPurpleSkirt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpskirtLawyerPurple - -- type: loadout - id: LoadoutServiceLawyerUniformGoodSuit - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpsuitLawyerGood - -- type: loadout - id: LoadoutServiceLawyerUniformGoodSkirt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Lawyer - items: - - ClothingUniformJumpskirtLawyerGood - -- type: loadout - id: LoadoutServiceReporterUniformJournalist - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Reporter - items: - - ClothingUniformJumpsuitJournalist - -# Reporter -- type: loadout - id: LoadoutServiceReporterUniformDetectivesuit - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Reporter - items: - - ClothingUniformJumpsuitDetective - -- type: loadout - id: LoadoutServiceReporterUniformDetectiveskirt - category: JobsServiceUncategorized - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsService - - !type:CharacterJobRequirement - jobs: - - Reporter - items: - - ClothingUniformJumpskirtDetective - -# Chef -- type: loadout - id: LoadoutServiceJumpsuitChefNt - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefUniforms - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingUniformJumpsuitChefNt - -- type: loadout - id: LoadoutServiceJumpsuitChefIdris - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefUniforms - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingUniformJumpsuitChefIdris - -- type: loadout - id: LoadoutServiceJumpsuitChefOrion - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefUniforms - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingUniformJumpsuitChefOrion - -- type: loadout - id: LoadoutServiceHeadChefNt - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefHead - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingHeadHatChefNt - -- type: loadout - id: LoadoutServiceHeadChefIdris - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefHead - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingHeadHatChefIdris - -- type: loadout - id: LoadoutServiceHeadChefOrion - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefHead - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingHeadHatChefOrion - -- type: loadout - id: LoadoutServiceOuterChefNt - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefOuter - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingOuterJacketChefNt - -- type: loadout - id: LoadoutServiceOuterChefIdris - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefOuter - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingOuterJacketChefIdris - -- type: loadout - id: LoadoutServiceOuterChefOrion - category: JobsServiceChef - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutChefOuter - - !type:CharacterJobRequirement - jobs: - - Chef - items: - - ClothingOuterJacketChefOrion - -# Janitor -- type: loadout - id: LoadoutServiceJumpsuitJanitorNt - category: JobsServiceJanitor - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutJanitorUniforms - - !type:CharacterJobRequirement - jobs: - - Janitor - items: - - ClothingUniformJumpsuitJanitorNt - -- type: loadout - id: LoadoutServiceJumpsuitJanitorIdris - category: JobsServiceJanitor - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutJanitorUniforms - - !type:CharacterJobRequirement - jobs: - - Janitor - items: - - ClothingUniformJumpsuitJanitorIdris - -- type: loadout - id: LoadoutServiceJumpsuitJanitorOrion - category: JobsServiceJanitor - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutJanitorUniforms - - !type:CharacterJobRequirement - jobs: - - Janitor - items: - - ClothingUniformJumpsuitJanitorOrion diff --git a/Resources/Prototypes/Loadouts/backpacks.yml b/Resources/Prototypes/Loadouts/backpacks.yml deleted file mode 100644 index 5fd812380c5..00000000000 --- a/Resources/Prototypes/Loadouts/backpacks.yml +++ /dev/null @@ -1,268 +0,0 @@ -- type: loadout - id: LoadoutBackpack - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - -- type: loadout - id: LoadoutBackpackClown - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackClown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Clown - -- type: loadout - id: LoadoutBackpackIan - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackIan - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - HeadOfPersonnel - -- type: loadout - id: LoadoutBackpackSecurity - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSecurity - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Security - -- type: loadout - id: LoadoutBackpackBrigmedic - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackBrigmedic - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Brigmedic - -- type: loadout - id: LoadoutBackpackEngineering - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackEngineering - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackAtmospherics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackAtmospherics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackMedical - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackMedical - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackCaptain - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackCaptain - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Captain - -- type: loadout - id: LoadoutBackpackMime - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackMime - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Mime - -- type: loadout - id: LoadoutBackpackChemistry - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackChemistry - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackHydroponics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackHydroponics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Civilian - -- type: loadout - id: LoadoutBackpackScience - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackScience - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackRobotics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackRobotics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackVirology - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackVirology - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackGenetics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackGenetics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackCargo - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackCargo - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics - -- type: loadout - id: LoadoutBackpackSalvage - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSalvage - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics - -- type: loadout - id: LoadoutBackpackMerc - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackMerc - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterLogicOrRequirement - requirements: - - !type:CharacterDepartmentRequirement - departments: - - Security - - Civilian - - !type:CharacterJobRequirement - jobs: - - SalvageSpecialist diff --git a/Resources/Prototypes/Loadouts/duffelbags.yml b/Resources/Prototypes/Loadouts/duffelbags.yml deleted file mode 100644 index 89997326f1a..00000000000 --- a/Resources/Prototypes/Loadouts/duffelbags.yml +++ /dev/null @@ -1,234 +0,0 @@ -- type: loadout - id: LoadoutBackpackDuffel - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffel - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - -- type: loadout - id: LoadoutBackpackDuffelClown - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelClown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Clown - -- type: loadout - id: LoadoutBackpackDuffelSecurity - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelSecurity - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Security - -- type: loadout - id: LoadoutBackpackDuffelBrigmedic - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelBrigmedic - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Brigmedic - -- type: loadout - id: LoadoutBackpackDuffelEngineering - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelEngineering - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackDuffelAtmospherics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelAtmospherics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackDuffelMedical - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelMedical - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackDuffelCaptain - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelCaptain - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Captain - -- type: loadout - id: LoadoutBackpackDuffelMime - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelMime - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Mime - -- type: loadout - id: LoadoutBackpackDuffelChemistry - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelChemistry - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackDuffelHydroponics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelHydroponics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Civilian - -- type: loadout - id: LoadoutBackpackDuffelScience - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelScience - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackDuffelRobotics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelRobotics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackDuffelVirology - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelVirology - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackDuffelGenetics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelGenetics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackDuffelCargo - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelCargo - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics - -- type: loadout - id: LoadoutBackpackDuffelSalvage - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackDuffelSalvage - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics diff --git a/Resources/Prototypes/Loadouts/satchels.yml b/Resources/Prototypes/Loadouts/satchels.yml deleted file mode 100644 index 4f21dc7656f..00000000000 --- a/Resources/Prototypes/Loadouts/satchels.yml +++ /dev/null @@ -1,247 +0,0 @@ -- type: loadout - id: LoadoutBackpackSatchel - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchel - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - -- type: loadout - id: LoadoutItemBackpackSatchelLeather - category: Backpacks - cost: 1 - exclusive: true - items: - - ClothingBackpackSatchelLeather - requirements: - - !type:CharacterJobRequirement - inverted: true - jobs: - - Prisoner - -- type: loadout - id: LoadoutBackpackSatchelClown - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelClown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Clown - -- type: loadout - id: LoadoutBackpackSatchelSecurity - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelSecurity - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Security - -- type: loadout - id: LoadoutBackpackSatchelBrigmedic - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelBrigmedic - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Brigmedic - -- type: loadout - id: LoadoutBackpackSatchelEngineering - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelEngineering - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackSatchelAtmospherics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelAtmospherics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Engineering - -- type: loadout - id: LoadoutBackpackSatchelMedical - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelMedical - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackSatchelCaptain - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelCaptain - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Captain - -- type: loadout - id: LoadoutBackpackSatchelMime - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelMime - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterJobRequirement - jobs: - - Mime - -- type: loadout - id: LoadoutBackpackSatchelChemistry - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelChemistry - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackSatchelHydroponics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelHydroponics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Civilian - -- type: loadout - id: LoadoutBackpackSatchelScience - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelScience - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackSatchelRobotics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelRobotics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Epistemics - -- type: loadout - id: LoadoutBackpackSatchelVirology - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelVirology - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackSatchelGenetics - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelGenetics - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Medical - -- type: loadout - id: LoadoutBackpackSatchelCargo - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelCargo - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics - -- type: loadout - id: LoadoutBackpackSatchelSalvage - category: Backpacks - cost: 0 - exclusive: true - items: - - ClothingBackpackSatchelSalvage - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutBackpacks - - !type:CharacterDepartmentRequirement - departments: - - Logistics diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Medical/pills.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Medical/pills.yml index 962f5351948..1b0bf68fb09 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Medical/pills.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Medical/pills.yml @@ -25,3 +25,43 @@ reagents: - ReagentId: Cryptobiolin Quantity: 20 + +- type: entity + name: pill canister (Cryptobiolin 20u) + parent: PillCanister + id: PillCanisterCryptobiolin + suffix: Cryptobiolin, 5 + components: + - type: Label + currentLabel: Cryptobiolin 20u + - type: StorageFill + contents: + - id: PillCryptobiolin + amount: 5 + +- type: entity + name: chloral-hydrate + parent: Pill + id: PillChloralHydrate + description: A powerful sedative. + components: + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: ChloralHydrate + Quantity: 20 + +- type: entity + name: pill canister (Chloral-Hydrate 20u) + parent: PillCanister + id: PillCanisterChloralHydrate + suffix: ChloralHydrate, 5 + components: + - type: Label + currentLabel: ChloralHydrate 20u + - type: StorageFill + contents: + - id: PillChloralHydrate + amount: 5 diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index 9c56881bd81..03d0e84c717 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -78,8 +78,8 @@ state: icon - type: stealTargetGroup - id: WeaponAntiqueLaser - name: antique laser pistol + id: WeaponCaptain + name: captain's weapon sprite: sprite: Objects/Weapons/Guns/Battery/antiquelasergun.rsi state: base diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index 34efe5a166c..c9faeb80fd6 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -177,14 +177,17 @@ components: - type: StealCondition stealGroup: Hypospray + verifyMapExistence: true -- type: entity - categories: [ HideSpawnMenu ] - parent: BaseCMOStealObjective - id: CMOCrewMonitorStealObjective - components: - - type: StealCondition - stealGroup: HandheldCrewMonitor +# This is going back in Loadouts. Not worth fucking over Paramedics. +#- type: entity +# categories: [ HideSpawnMenu ] +# parent: BaseCMOStealObjective +# id: CMOCrewMonitorStealObjective +# components: +# - type: StealCondition +# stealGroup: HandheldCrewMonitor +# verifyMapExistence: true ## rd @@ -205,6 +208,7 @@ components: - type: StealCondition stealGroup: ClothingOuterHardsuitRd + verifyMapExistence: true - type: Objective # This item must be worn or stored in a slowing duffelbag, very hard to hide. difficulty: 3 @@ -216,6 +220,7 @@ components: - type: StealCondition stealGroup: HandTeleporter + verifyMapExistence: true ## hos @@ -231,6 +236,7 @@ job: HeadOfSecurity - type: StealCondition stealGroup: BookSecretDocuments + verifyMapExistence: true owner: job-name-hos ## ce @@ -244,6 +250,7 @@ job: ChiefEngineer - type: StealCondition stealGroup: ClothingShoesBootsMagAdv + verifyMapExistence: true owner: job-name-ce ## qm @@ -257,6 +264,7 @@ job: Quartermaster - type: StealCondition stealGroup: BoxFolderQmClipboard + verifyMapExistence: true owner: job-name-qm ## hop @@ -294,6 +302,7 @@ components: - type: StealCondition stealGroup: CaptainIDCard + verifyMapExistence: true - type: entity categories: [ HideSpawnMenu ] @@ -302,6 +311,7 @@ components: - type: StealCondition stealGroup: JetpackCaptainFilled + verifyMapExistence: true - type: entity categories: [ HideSpawnMenu ] @@ -309,8 +319,9 @@ id: CaptainGunStealObjective components: - type: StealCondition - stealGroup: WeaponAntiqueLaser + stealGroup: WeaponCaptain owner: job-name-captain + verifyMapExistence: true - type: entity categories: [ HideSpawnMenu ] @@ -325,6 +336,7 @@ - type: NotCommandRequirement - type: StealCondition stealGroup: NukeDisk + verifyMapExistence: true owner: objective-condition-steal-station - type: entity diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index 219684cc7d7..7e4d4e19a9e 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -47,10 +47,6 @@ jumpsuit: ClothingUniformJumpsuitCaptain back: ClothingBackpackCaptainFilled shoes: ClothingShoesBootsLaceup - head: ClothingHeadHatCaptain - eyes: ClothingEyesGlassesSunglasses - gloves: ClothingHandsGlovesCaptain - outerClothing: ClothingOuterArmorCaptainCarapace id: CaptainPDA ears: ClothingHeadsetAltCommand innerClothingSkirt: ClothingUniformJumpskirtCaptain diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index 878b184b8bc..feda9c0f466 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -73,11 +73,8 @@ jumpsuit: ClothingUniformJumpsuitHoP back: ClothingBackpackHOPFilled shoes: ClothingShoesLeather # DeltaV - HoP needs something better than plebe shoes. - head: ClothingHeadHatHopcap id: HoPPDA - gloves: ClothingHandsGlovesHop ears: ClothingHeadsetHoP # DeltaV - HoP is now a service role, replaces their all channels headset. - belt: BoxFolderClipboard innerClothingSkirt: ClothingUniformJumpskirtHoP satchel: ClothingBackpackSatchelHOPFilled duffelbag: ClothingBackpackDuffelHOPFilled diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml index 1a6ddbc0c42..a3bba1547a4 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml @@ -21,11 +21,9 @@ id: AtmosphericTechnicianGear equipment: jumpsuit: ClothingUniformJumpsuitAtmos - back: ClothingBackpackEngineeringFilled + back: ClothingBackpackAtmospherics shoes: ClothingShoesColorWhite - eyes: ClothingEyesGlassesMeson id: AtmosPDA - belt: ClothingBeltUtilityEngineering ears: ClothingHeadsetEngineering innerClothingSkirt: ClothingUniformJumpskirtAtmos satchel: ClothingBackpackSatchelEngineeringFilled diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index 2690b9ba016..74ba2ae68d1 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -43,9 +43,7 @@ back: ClothingBackpackChiefEngineerFilled shoes: ClothingShoesColorBrown id: CEPDA - eyes: ClothingEyesGlassesMeson ears: ClothingHeadsetCE - belt: ClothingBeltUtilityEngineering innerClothingSkirt: ClothingUniformJumpskirtChiefEngineer satchel: ClothingBackpackSatchelChiefEngineerFilled duffelbag: ClothingBackpackDuffelChiefEngineerFilled diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml index 5106f1129c4..128779db94d 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/senior_engineer.yml @@ -3,7 +3,6 @@ name: job-name-senior-engineer description: job-description-senior-engineer playTimeTracker: JobSeniorEngineer - setPreference: false # DeltaV - Disable Senior Roles round start selection requirements: - !type:CharacterPlaytimeRequirement tracker: JobAtmosphericTechnician diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml index 15060faebda..65ce8816e65 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml @@ -29,8 +29,6 @@ shoes: ClothingShoesColorWhite id: ChemistryPDA ears: ClothingHeadsetMedical - belt: ChemBag - # the purple glasses? innerClothingSkirt: ClothingUniformJumpskirtChemistry satchel: ClothingBackpackSatchelChemistryFilled duffelbag: ClothingBackpackDuffelChemistryFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index 756a651fb0f..a7c3f189835 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -63,7 +63,6 @@ shoes: ClothingShoesColorBrown id: CMOPDA ears: ClothingHeadsetCMO - belt: ClothingBeltMedicalFilled innerClothingSkirt: ClothingUniformJumpskirtCMO satchel: ClothingBackpackSatchelCMOFilled duffelbag: ClothingBackpackDuffelCMOFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index 7cdbbed8f08..81c56a677fe 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -31,7 +31,6 @@ shoes: ClothingShoesColorWhite id: MedicalPDA ears: ClothingHeadsetMedical - belt: ClothingBeltMedicalFilled innerClothingSkirt: ClothingUniformJumpskirtMedicalDoctor satchel: ClothingBackpackSatchelMedicalFilled duffelbag: ClothingBackpackDuffelMedicalFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml index 67ede6810f8..3d3ba15990d 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml @@ -30,7 +30,6 @@ shoes: ClothingShoesColorWhite id: MedicalInternPDA ears: ClothingHeadsetMedical - belt: ClothingBeltMedicalFilled pocket2: BookMedicalReferenceBook # innerClothingSkirt: ClothingUniformJumpskirtColorWhite # DeltaV satchel: ClothingBackpackSatchelMedicalFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index da0acc468b0..9114d21966f 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -34,13 +34,13 @@ id: ParamedicGear equipment: jumpsuit: ClothingUniformJumpsuitParamedic - back: ClothingBackpackParamedicFilledDV # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/backpack.yml + back: ClothingBackpackParamedicFilledDV shoes: ClothingShoesColorBlue id: ParamedicPDA ears: ClothingHeadsetMedical belt: ClothingBeltMedicalEMTFilled - pocket1: HandheldGPSBasic # DeltaV - Give Paramedics useful tools on spawn - pocket2: HandheldCrewMonitor # DeltaV - Give Paramedics useful tools on spawn + pocket1: HandheldGPSBasic + pocket2: HandheldCrewMonitor innerClothingSkirt: ClothingUniformJumpskirtParamedic - satchel: ClothingBackpackSatchelParamedicFilledDV # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/satchel.yml - duffelbag: ClothingBackpackDuffelParamedicFilledDV # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/duffelbag.yml + satchel: ClothingBackpackSatchelParamedicFilledDV + duffelbag: ClothingBackpackDuffelParamedicFilledDV diff --git a/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml b/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml index 65ac51621d0..01b57e11775 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/senior_physician.yml @@ -3,7 +3,6 @@ name: job-name-senior-physician description: job-description-senior-physician playTimeTracker: JobSeniorPhysician - setPreference: false # DeltaV - Disable Senior Roles round start selection requirements: - !type:CharacterPlaytimeRequirement tracker: JobChemist diff --git a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml index 25b170a46e6..ecb61b36f4a 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/senior_researcher.yml @@ -3,7 +3,6 @@ name: job-name-senior-researcher description: job-description-senior-researcher playTimeTracker: JobSeniorResearcher - setPreference: true requirements: - !type:CharacterDepartmentTimeRequirement department: Epistemics # DeltaV - Epistemics Department replacing Science From 5756a0e4c8588e8ea22e08f8987d60708b26f854 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 18 Nov 2024 22:09:00 +0000 Subject: [PATCH 035/182] Automatic Changelog Update (#1230) --- Resources/Changelog/Changelog.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 41662ed5dd3..4f768f49121 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8014,3 +8014,18 @@ Entries: id: 6530 time: '2024-11-18T22:07:31.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1248 +- author: VMSolidus + changes: + - type: Fix + message: >- + Reorganized Loadouts so that all Jobs now have their own job specific + tabs. The code for them has been thoroughly reorganized too, such that + figuring out which jobs are missing crap is way easier to do. + - type: Add + message: >- + Captain's Personal Weapon loadout category. Currently only contains a + choice between the antique laser pistol, or a pulse pistol. Whichever + choice is made will be used as a target for a traitor objective. + id: 6531 + time: '2024-11-18T22:08:35.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1230 From 049a995f64c42734e5286229b524161a730aaea9 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Tue, 19 Nov 2024 22:47:45 -0500 Subject: [PATCH 036/182] Fix Power Attacks Being Faster Than Left Clicks (#1252) # Description This fixes some stupid math. Power attacks are now correctly slower than left clicks. Previously they were faster. # Changelog :cl: - fix: Power Attacks now correctly apply a penalty on swing speed, and are no longer faster than left clicking. --- Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs | 6 +++--- Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 2999b7aed7c..16847c3797e 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -48,16 +48,16 @@ public sealed partial class MeleeWeaponComponent : Component */ /// - /// How many times we can attack per second. + /// How many seconds between attacks must you wait in order to swing. /// [DataField, AutoNetworkedField] public float AttackRate = 1f; /// - /// When power attacking, the swing speed (in attacks per second) is multiplied by this amount + /// When power attacking, the required cooldown between swings is multiplied by this amount. /// [DataField, AutoNetworkedField] - public float HeavyRateModifier = 0.8f; + public float HeavyRateModifier = 1.2f; /// /// Are we currently holding down the mouse for an attack. /// Used so we can't just hold the mouse button and attack constantly. diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 0be97e29b05..8ccf7578fe7 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -364,7 +364,7 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo return false; break; case HeavyAttackEvent: - fireRateSwingModifier *= weapon.HeavyRateModifier; + fireRateSwingModifier = weapon.HeavyRateModifier; break; default: if (!Blocker.CanAttack(user, weapon: (weaponUid, weapon))) @@ -373,7 +373,7 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo } // Windup time checked elsewhere. - var fireRate = TimeSpan.FromSeconds(1f / GetAttackRate(weaponUid, user, weapon) * fireRateSwingModifier); + var fireRate = TimeSpan.FromSeconds(GetAttackRate(weaponUid, user, weapon) * fireRateSwingModifier); var swings = 0; // TODO: If we get autoattacks then probably need a shotcounter like guns so we can do timing properly. From 8a88bfd11f1384fa2fb01fd7ace6477202a68499 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 20 Nov 2024 03:48:19 +0000 Subject: [PATCH 037/182] Automatic Changelog Update (#1252) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4f768f49121..0e22f36302f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8029,3 +8029,12 @@ Entries: id: 6531 time: '2024-11-18T22:08:35.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1230 +- author: VMSolidus + changes: + - type: Fix + message: >- + Power Attacks now correctly apply a penalty on swing speed, and are no + longer faster than left clicking. + id: 6532 + time: '2024-11-20T03:47:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1252 From 411cb213ac9ab2e6a0b790e72b25a142a4945217 Mon Sep 17 00:00:00 2001 From: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> Date: Fri, 22 Nov 2024 04:01:32 +0300 Subject: [PATCH 038/182] Tweak Wizden Trait Descriptions (#1260) # Description Converted the descriptions of most wizden traits to a more formal and roleplay-oriented style, also clarifying some aspects of other traits in the process. --- TODO: - [ ] Test this --- # Changelog :cl: - tweak: Tweaked the descriptions of most Wizden traits to be more vivid and descriptive. --------- Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> --- Resources/Locale/en-US/traits/traits.ftl | 60 +++++++++++++++++------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 921546d466c..c6ed0d49399 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -3,10 +3,15 @@ trait-description-Blindness = You are legally blind, and can't see clearly past trait-examined-Blindness = [color=lightblue]{CAPITALIZE(POSS-ADJ($target))} eyes are glassy and unfocused. It doesn't seem like {SUBJECT($target)} can see you well, if at all.[/color] trait-name-Narcolepsy = Narcolepsy -trait-description-Narcolepsy = You fall asleep randomly +trait-description-Narcolepsy = + Due to a neurological disorder, controlling your sleep-wake cycles is difficult for you. + As a result, you may repeatedly fall asleep for short periods of time throughout the day. trait-name-Pacifist = Pacifist -trait-description-Pacifist = You cannot attack or hurt any living beings. +trait-description-Pacifist = + Either due to moral principles, or as a result of body modification, + you cannot bring yourself to harm or to risk harming any other living being, + regardless of what threat they may pose. trait-name-SelfAware = Self-Aware trait-description-SelfAware = @@ -15,11 +20,16 @@ trait-description-SelfAware = and can gauge if you have toxin or airloss damage. trait-name-LightweightDrunk = Lightweight Drunk -trait-description-LightweightDrunk = Alcohol has a stronger effect on you +trait-description-LightweightDrunk = + Your body exhibits a significantly heightened susceptibility to alcohol intoxication. + As a result, alcohol has a more significant effect on your cognitive functions. + Note: This pertrains solely to the [color=blue]visual effects[/color] of intoxication, and does not affect the alchohol poisoning threshold. trait-name-HeavyweightDrunk = Alcohol Tolerance trait-description-HeavyweightDrunk = - Alcohol is afraid of you. + Your body has developed an exceptionally high level of alcohol tolerance, leaving the very beverages you consume intimidated. + As a result, the effects of alcohol on your cognitive functions are considerably less noticeable. + Note: This pertrains solely to the [color=blue]visual effects[/color] of intoxication, and does not affect the alchohol poisoning threshold. trait-name-LiquorLifeline = Liquor Lifeline trait-description-LiquorLifeline = @@ -28,7 +38,10 @@ trait-description-LiquorLifeline = You also gain the benefits of [color=lightblue]Alcohol Tolerance[/color]. trait-name-Muted = Muted -trait-description-Muted = You can't speak +trait-description-Muted = + Either due to to an abnormality in your body development, or due to some body augmentation, you are unable to utilize spoken language. + Consequently, you may encounter difficulties in communicating with others or using radio communication. + To compensate for this limitation, you have been taught the Galactic Sign Language. trait-name-BloodDeficiency = Blood Deficiency trait-description-BloodDeficiency = @@ -41,22 +54,34 @@ trait-description-Hemophilia = You bleed twice as long, and you have easy bruising, taking 10% more Blunt damage. trait-name-Paracusia = Paracusia -trait-description-Paracusia = You hear sounds that aren't really there +trait-description-Paracusia = + The challenges of deep space life have led you to experience chronic and frequent auditory hallucinations, + causing you to perceive sounds that are not really there. trait-name-PirateAccent = Pirate Accent -trait-description-PirateAccent = You can't stop speaking like a pirate! +trait-description-PirateAccent = + Your interactions with space pirates or a fascination with their culture + have influenced your speech, causing you to communicate in a manner characteristic of pirates. trait-name-Accentless = Accentless -trait-description-Accentless = You don't have the accent that your species would usually have +trait-description-Accentless = + You may have developed in isolation or separation from other repsentatives of your species, + which resulted in you not having the typical accent that your species peers may possess. trait-name-FrontalLisp = Frontal Lisp -trait-description-FrontalLisp = You thpeak with a lithp +trait-description-FrontalLisp = + An abnormality in the development of your speech has caused you to pronounce the "s" and "z" sounds similarly to "th". + In other words, you thpeak with a lithp. trait-name-Stutter = Stutter -trait-description-Stutter = You t-t-talk with a bit of a s-s-stutter... +trait-description-Stutter = + Either due to a speech disorder, or due to anxiety or stress, you often find yourself stuttering while trying to speak. + +trait-name-Southern = Southern Drawl +trait-description-Southern = You have a different way of speakin'. trait-name-Snoring = Snoring -trait-description-Snoring = You will snore while sleeping. +trait-description-Snoring = You tend to snore loudly while sleeping. trait-name-CPRTraining = CPR Training trait-description-CPRTraining = At some point in your life, you have received training in how to perform CPR. @@ -66,13 +91,14 @@ trait-name-Nearsighted = Nearsighted trait-description-Nearsighted = Your eyes are not what they once were, you have difficulty seeing things far away without corrective glasses. trait-name-NormalVisionHarpy = Trichromat Modification -trait-description-NormalVisionHarpy = Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. - -trait-name-Southern = Southern Drawl -trait-description-Southern = You have a different way of speakin'. +trait-description-NormalVisionHarpy = + Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. + You do not have the usual vision anomaly that your species may possess. trait-name-NormalVision = Trichromat Modification -trait-description-NormalVision = Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. +trait-description-NormalVision = + Your eyes have been modified by means of advanced medicine to see in the standard colors of Red, Green, and Blue. + You do not have the usual vision anomaly that your species may possess. trait-name-Thieving = Thieving trait-description-Thieving = @@ -201,7 +227,7 @@ trait-description-SnailPaced = trait-name-LightStep = Light Step trait-description-LightStep = - You move with a gentle step, making your footsteps quieter. + You move with a gentle step, which makes your footsteps quieter. trait-name-Swashbuckler = Swashbuckler trait-description-Swashbuckler = From 29d2cb1ed85ab089d83c702f7405e938a0d9374c Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Thu, 21 Nov 2024 20:01:46 -0500 Subject: [PATCH 039/182] More Trait Functions (PushMarkup & AddArmor) (#1253) # Description This PR effectively "Reworks" several of the Bionic Traits through use of new modular TraitFunctions. These being, **TraitPushDescription**: Ensures that an entity has the new ExtendDescriptionComponent, then writes to said component. ExtendDescriptionComponent serves as a new highly modular "One stop shop" for any system wanting to add text to the shift-click examine window. It even accepts arguments for text color, font size, and whether or not a person must be standing within touching distance to "See" the provided texts. It accepts arbitrarily any number of descriptions. **TraitAddArmor**: This takes advantage of a new functionality for the DamageableSystem, whereby entities are able to have more than one DamageModifierSet. This allows arbitrarily any number of traits to add as many modifier sets as desired, without fear of any compatibility issues. These can be both negative and positive, and as Skubman has pointed out, this can also be used to create negative traits that make a character more vulnerable to a given damage type! Additionally, most of the Bionics Traits have been reworked. CyberEyes has been split into two modules, one for the base implant, and one for the Flash Protection. Dermal Armor has been reworked using TraitAddArmor, so that it no longer replaces your original modifier set, and instead stacks multiplicatively with whatever your original species modifier set was. Thus, it can now be taken by any species. # TODO

Media

TraitPushDescription ![image](https://github.com/user-attachments/assets/4661671a-6f20-4cb1-9fad-41c36f7ad79e) TraitAddArmor ![image](https://github.com/user-attachments/assets/bbc823e1-73bf-471d-b5f6-ef8cdf35c746)

# Changelog :cl: - add: Five new functions for the Trait System, AddArmor, PushDescription, ModifyMobThresholds, AddSolutionContainer, and ModifyStamina. - tweak: CyberEyes Basic System has been split, now Flash Protection is a separate module. - add: Dermal Armor no longer replaces your original species damage resistances. It now stacks multiplicatively with your original resistances. - tweak: Dermal Armor can now be taken by any species, not just Humans. - add: Dermal Armor, and Bionic Arms can now be revealed by a close examination. Shift click on someone within touching distance will reveal if they have these "Obvious" cyberware. --------- Signed-off-by: VMSolidus Co-authored-by: Remuchi <72476615+Remuchi@users.noreply.github.com> --- .../Traits/TraitSystem.Functions.cs | 137 ++++++++++++++++++ .../Damage/Components/DamageableComponent.cs | 6 + .../Damage/Systems/DamageableSystem.cs | 7 + .../Assorted/Components/CyberEyesComponent.cs | 11 -- .../Components/ExtendDescriptionComponent.cs | 29 ++++ .../Assorted/Systems/CyberEyesSystem.cs | 21 --- .../Systems/ExtendDescriptionSystem.cs | 27 ++++ Resources/Locale/en-US/traits/misc.ftl | 2 + Resources/Locale/en-US/traits/traits.ftl | 11 +- Resources/Prototypes/Traits/disabilities.yml | 2 +- Resources/Prototypes/Traits/physical.yml | 51 +++++-- 11 files changed, 256 insertions(+), 48 deletions(-) delete mode 100644 Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs create mode 100644 Content.Shared/Traits/Assorted/Components/ExtendDescriptionComponent.cs delete mode 100644 Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs create mode 100644 Content.Shared/Traits/Assorted/Systems/ExtendDescriptionSystem.cs diff --git a/Content.Server/Traits/TraitSystem.Functions.cs b/Content.Server/Traits/TraitSystem.Functions.cs index 07794903d3e..57b508018a6 100644 --- a/Content.Server/Traits/TraitSystem.Functions.cs +++ b/Content.Server/Traits/TraitSystem.Functions.cs @@ -10,6 +10,14 @@ using Content.Server.Language; using Content.Shared.Mood; using Content.Server.NPC.Systems; +using Content.Shared.Traits.Assorted.Components; +using Content.Shared.Damage; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Mobs; +using Content.Shared.Damage.Components; namespace Content.Server.Traits; @@ -263,3 +271,132 @@ public override void OnPlayerSpawn(EntityUid uid, vvm.WritePath(path, value); } } + +/// Used for writing to an entity's ExtendDescriptionComponent. If one is not present, it will be added! +/// Use this to create traits that add special descriptions for when a character is shift-click examined. +[UsedImplicitly] +public sealed partial class TraitPushDescription : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public List DescriptionExtensions { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + entityManager.EnsureComponent(uid, out var descComp); + foreach (var descExtension in DescriptionExtensions) + descComp.DescriptionList.Add(descExtension); + } +} + +[UsedImplicitly] +public sealed partial class TraitAddArmor : TraitFunction +{ + /// + /// The list of prototype ID's of DamageModifierSets to be added to the enumerable damage modifiers of an entity. + /// + /// + /// Dear Maintainer, I'm well aware that validating protoIds is a thing. Unfortunately, this is for a legacy system that doesn't have validated prototypes. + /// And refactoring the entire DamageableSystem is way the hell outside of the scope of the PR adding this function. + /// {FaridaIsCute.png} - Solidus + /// + [DataField, AlwaysPushInheritance] + public List DamageModifierSets { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + entityManager.EnsureComponent(uid, out var damageableComponent); + foreach (var modifierSet in DamageModifierSets) + damageableComponent.DamageModifierSets.Add(modifierSet); + } +} + +[UsedImplicitly] +public sealed partial class TraitAddSolutionContainer : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public Dictionary Solutions { get; private set; } = new(); + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var solutionContainer = entityManager.System(); + + foreach (var (containerKey, solution) in Solutions) + { + var hasSolution = solutionContainer.EnsureSolution(uid, containerKey, out Solution? newSolution); + + if (!hasSolution) + return; + + newSolution!.AddSolution(solution.Solution, null); + } + } +} + +[UsedImplicitly] +public sealed partial class TraitModifyMobThresholds : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public int CritThresholdModifier; + + [DataField, AlwaysPushInheritance] + public int DeadThresholdModifier; + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + if (!entityManager.TryGetComponent(uid, out var threshold)) + return; + + var thresholdSystem = entityManager.System(); + if (CritThresholdModifier != 0) + { + var critThreshold = thresholdSystem.GetThresholdForState(uid, MobState.Critical, threshold); + if (critThreshold != 0) + thresholdSystem.SetMobStateThreshold(uid, critThreshold + CritThresholdModifier, MobState.Critical); + } + + if (DeadThresholdModifier != 0) + { + var deadThreshold = thresholdSystem.GetThresholdForState(uid, MobState.Dead, threshold); + if (deadThreshold != 0) + thresholdSystem.SetMobStateThreshold(uid, deadThreshold + DeadThresholdModifier, MobState.Dead); + } + } +} + +[UsedImplicitly] +public sealed partial class TraitModifyStamina : TraitFunction +{ + [DataField, AlwaysPushInheritance] + public float StaminaModifier; + + [DataField, AlwaysPushInheritance] + public float DecayModifier; + + [DataField, AlwaysPushInheritance] + public float CooldownModifier; + + public override void OnPlayerSpawn(EntityUid uid, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + if (!entityManager.TryGetComponent(uid, out var staminaComponent)) + return; + + staminaComponent.CritThreshold += StaminaModifier; + staminaComponent.Decay += DecayModifier; + staminaComponent.Cooldown += CooldownModifier; + } +} diff --git a/Content.Shared/Damage/Components/DamageableComponent.cs b/Content.Shared/Damage/Components/DamageableComponent.cs index be66d51e3bc..3c3a27c5fac 100644 --- a/Content.Shared/Damage/Components/DamageableComponent.cs +++ b/Content.Shared/Damage/Components/DamageableComponent.cs @@ -40,6 +40,12 @@ public sealed partial class DamageableComponent : Component [DataField("damageModifierSet", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? DamageModifierSetId; + /// + /// List of all Modifier Sets stored by this entity. The above single format is a deprecated function used only to support legacy yml. + /// + [DataField] + public List DamageModifierSets = new(); + /// /// All the damage information is stored in this . /// diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index b944eabdecc..5a3ff778574 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -162,6 +162,13 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp // TODO: We need to add a check to see if the given armor covers the targeted part (if any) to modify or not. damage = DamageSpecifier.ApplyModifierSet(damage, modifierSet); } + + // From Solidus: If you are reading this, I owe you a more comprehensive refactor of this entire system. + if (damageable.DamageModifierSets.Count > 0) + foreach (var enumerableModifierSet in damageable.DamageModifierSets) + if (_prototypeManager.TryIndex(enumerableModifierSet, out var enumerableModifier)) + damage = DamageSpecifier.ApplyModifierSet(damage, enumerableModifier); + var ev = new DamageModifyEvent(damage, origin, targetPart); RaiseLocalEvent(uid.Value, ev); damage = ev.Damage; diff --git a/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs b/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs deleted file mode 100644 index 7009077e9cc..00000000000 --- a/Content.Shared/Traits/Assorted/Components/CyberEyesComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Shared.Traits.Assorted.Components; - -[RegisterComponent] -public sealed partial class CyberEyesComponent : Component -{ - /// - /// The text that will appear when someone with the CyberEyes component is examined at close range - /// - [DataField] - public string CyberEyesExaminationText = "examine-cybereyes-message"; -} diff --git a/Content.Shared/Traits/Assorted/Components/ExtendDescriptionComponent.cs b/Content.Shared/Traits/Assorted/Components/ExtendDescriptionComponent.cs new file mode 100644 index 00000000000..dca8e10d4b3 --- /dev/null +++ b/Content.Shared/Traits/Assorted/Components/ExtendDescriptionComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Traits.Assorted.Components; + +[Serializable, NetSerializable, DataDefinition] +public sealed partial class DescriptionExtension +{ + [DataField] + public string Description = ""; + + [DataField] + public int FontSize = 12; + + [DataField] + public string Color = "#ffffff"; + + [DataField] + public bool RequireDetailRange = true; +} + +[RegisterComponent] +public sealed partial class ExtendDescriptionComponent : Component +{ + /// + /// The list of all descriptions to add to an entity when examined at close range. + /// + [DataField] + public List DescriptionList = new(); +} diff --git a/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs b/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs deleted file mode 100644 index 2dde4379720..00000000000 --- a/Content.Shared/Traits/Assorted/Systems/CyberEyesSystem.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Content.Shared.Examine; -using Content.Shared.Traits.Assorted.Components; - -namespace Content.Shared.Traits.Assorted.Systems; - -public sealed class CyberEyesSystem : EntitySystem -{ - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnExamined); - } - - private void OnExamined(EntityUid uid, CyberEyesComponent component, ExaminedEvent args) - { - if (!args.IsInDetailsRange) - return; - - args.PushMarkup($"[color=white]{Loc.GetString(component.CyberEyesExaminationText, ("entity", uid))}[/color]"); - } -} diff --git a/Content.Shared/Traits/Assorted/Systems/ExtendDescriptionSystem.cs b/Content.Shared/Traits/Assorted/Systems/ExtendDescriptionSystem.cs new file mode 100644 index 00000000000..0883da1eb86 --- /dev/null +++ b/Content.Shared/Traits/Assorted/Systems/ExtendDescriptionSystem.cs @@ -0,0 +1,27 @@ +using Content.Shared.Examine; +using Content.Shared.Traits.Assorted.Components; + +namespace Content.Shared.Traits.Assorted.Systems; + +public sealed class ExtendDescriptionSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnExamined); + } + + private void OnExamined(EntityUid uid, ExtendDescriptionComponent component, ExaminedEvent args) + { + if (component.DescriptionList.Count <= 0) + return; + + foreach (var desc in component.DescriptionList) + { + if (!args.IsInDetailsRange && desc.RequireDetailRange) + continue; + + args.PushMarkup($"[font size ={desc.FontSize}][color={desc.Color}]{Loc.GetString(desc.Description, ("entity", uid))}[/color][/font]"); + } + } +} diff --git a/Resources/Locale/en-US/traits/misc.ftl b/Resources/Locale/en-US/traits/misc.ftl index 814614f4e2b..9a17c3afc44 100644 --- a/Resources/Locale/en-US/traits/misc.ftl +++ b/Resources/Locale/en-US/traits/misc.ftl @@ -1 +1,3 @@ examine-cybereyes-message = {CAPITALIZE(POSS-ADJ($entity))} eyes shine with a faint inner light. +examine-dermal-armor-message = {CAPITALIZE(POSS-ADJ($entity))} skin seems to be made of a sturdy, yet flexible plastic. +examine-bionic-arm-message = {CAPITALIZE(POSS-ADJ($entity))} limbs emit an ever present faint chirp of servomotors. diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index c6ed0d49399..74eb67bdaf2 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -347,7 +347,7 @@ trait-description-AddictionNicotine = trait-name-AnimalFriend = Animal Friend trait-description-AnimalFriend = You have a way with animals. You will never be attacked by animals, unless you attack them first. - + trait-name-Liar = Pathological liar trait-description-Liar = You can hardly bring yourself to tell the truth. Sometimes you lie anyway. @@ -409,8 +409,13 @@ trait-description-DermalArmor = trait-name-CyberEyes = Cyber-Eyes Basic System trait-description-CyberEyes = One or more of your eyes have been replaced with a highly modular mechanical ocular implant. - Their most basic functionality is to provide amelioration for weaknesses of the wearer's natural eyes, - but additionally these implants provide protection from bright flashes of light. + Their most basic functionality is to provide amelioration for weaknesses of the wearer's natural eyes. + The functionality of these implants can be extended by a variety of commercially available modules. + +trait-name-FlareShielding = Cyber-Eyes Flare Shielding +trait-description-FlareShielding = + Your cybereyes have been fitted with a photochromic lense that automatically darkens in response to intense stimuli. + This provides substantial protection from bright flashes of light, such as those from welding arcs. trait-name-CyberEyesSecurity = Cyber-Eyes SecHud trait-description-CyberEyesSecurity = diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml index efa77391013..246a3e97d41 100644 --- a/Resources/Prototypes/Traits/disabilities.yml +++ b/Resources/Prototypes/Traits/disabilities.yml @@ -245,7 +245,7 @@ - Vulpkanin # This trait functions exactly as-is for the Vulpkanin trait. - Shadowkin functions: - - !type:TraitAddComponent + - !type:TraitReplaceComponent components: - type: Flashable eyeDamageChance: 0.3 diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index 083a91382f9..a13db4f48cf 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -450,12 +450,18 @@ inverted: true jobs: - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - Gladiator functions: - !type:TraitAddComponent components: - type: Prying speedModifier: 1 pryPowered: true + - !type:TraitPushDescription + descriptionExtensions: + - description: examine-bionic-arm-message + fontSize: 12 + requireDetailRange: true - type: trait id: PlateletFactories @@ -489,25 +495,26 @@ - type: trait id: DermalArmor category: Physical - points: -9 + points: -6 requirements: - !type:CharacterJobRequirement inverted: true jobs: - Prisoner # Bionics should be "Confiscated" from long term prisoners. - - !type:CharacterSpeciesRequirement - species: - - Human functions: - - !type:TraitReplaceComponent - components: - - type: Damageable - damageModifierSet: DermalArmor + - !type:TraitAddArmor + damageModifierSets: + - DermalArmor + - !type:TraitPushDescription + descriptionExtensions: + - description: examine-dermal-armor-message + fontSize: 12 + requireDetailRange: true - type: trait id: CyberEyes category: Physical - points: -8 + points: -4 requirements: - !type:CharacterJobRequirement inverted: true @@ -520,14 +527,34 @@ - Blindness - Nearsighted functions: - - !type:TraitRemoveComponent + - !type:TraitPushDescription + descriptionExtensions: + - description: examine-cybereyes-message + fontSize: 12 + requireDetailRange: true + - !type:TraitReplaceComponent components: - - type: Flashable + - type: Flashable # Effectively, removes any flash-vulnerability species traits. + + +- type: trait + id: FlareShielding + category: Physical + points: -4 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterTraitRequirement + traits: + - CyberEyes + functions: - !type:TraitAddComponent components: - type: FlashImmunity - type: EyeProtection - - type: CyberEyes + - type: trait id: CyberEyesSecurity From 8d54aa2fffdd3726e948d6d228287b01c0a81413 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 01:02:03 +0000 Subject: [PATCH 040/182] Automatic Changelog Update (#1260) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0e22f36302f..72bc8cc618b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8038,3 +8038,12 @@ Entries: id: 6532 time: '2024-11-20T03:47:45.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1252 +- author: Mnemotechnician + changes: + - type: Tweak + message: >- + Tweaked the descriptions of most Wizden traits to be more vivid and + descriptive. + id: 6533 + time: '2024-11-22T01:01:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1260 From 0574be444b90137808c07f85e10b59c464f054cf Mon Sep 17 00:00:00 2001 From: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> Date: Fri, 22 Nov 2024 04:02:13 +0300 Subject: [PATCH 041/182] Feat: Anomaly Scanner Data Copying (#1250) # Description Makes it so that using one anomaly scanner on another transfers the anomaly data onto the used scanner.

Media

![image](https://github.com/user-attachments/assets/b212e6e8-58a3-4a64-a216-3ba496a81d4a)

# Changelog :cl: - add: You can now touch one anomaly scanner with another to copy the anomaly scan data from it. --- .../Anomaly/AnomalySystem.Scanner.cs | 23 ++++++++++++------- Resources/Locale/en-US/anomaly/anomaly.ftl | 5 ++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Content.Server/Anomaly/AnomalySystem.Scanner.cs b/Content.Server/Anomaly/AnomalySystem.Scanner.cs index 39c0d08b55e..b9c0beb04e6 100644 --- a/Content.Server/Anomaly/AnomalySystem.Scanner.cs +++ b/Content.Server/Anomaly/AnomalySystem.Scanner.cs @@ -87,17 +87,24 @@ private void OnScannerUiOpened(EntityUid uid, AnomalyScannerComponent component, private void OnScannerAfterInteract(EntityUid uid, AnomalyScannerComponent component, AfterInteractEvent args) { - if (args.Target is not { } target) - return; - if (!HasComp(target)) - return; - if (!args.CanReach) + if (args.Target is not { } target || !args.CanReach) return; - _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.ScanDoAfterDuration, new ScannerDoAfterEvent(), uid, target: target, used: uid) + // If interacting with an anomaly, start a scan do-after + if (HasComp(target)) + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.ScanDoAfterDuration, new ScannerDoAfterEvent(), uid, target: target, used: uid) + { + DistanceThreshold = 2f + }); + + // If interacting with another scanner, copy the anomaly data + if (component.ScannedAnomaly is not { Valid: true } + && TryComp(args.Target, out var otherScanner) + && otherScanner.ScannedAnomaly is {} otherAnomaly) { - DistanceThreshold = 2f - }); + UpdateScannerWithNewAnomaly(uid, otherAnomaly, component); + Popup.PopupEntity(Loc.GetString("anomaly-scanner-scan-copied"), uid); + } } private void OnDoAfter(EntityUid uid, AnomalyScannerComponent component, DoAfterEvent args) diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl index 1609d77d914..cce9488b2f6 100644 --- a/Resources/Locale/en-US/anomaly/anomaly.ftl +++ b/Resources/Locale/en-US/anomaly/anomaly.ftl @@ -12,6 +12,7 @@ anomaly-particles-omega = Omega particles anomaly-particles-sigma = Sigma particles anomaly-scanner-component-scan-complete = Scan complete! +anomaly-scanner-scan-copied = Copied anomaly scan data! anomaly-scanner-ui-title = anomaly scanner anomaly-scanner-no-anomaly = No anomaly currently scanned. @@ -79,7 +80,7 @@ anomaly-generator-flavor-right = v1.1 anomaly-behavior-unknown = [color=red]ERROR. Cannot be read.[/color] anomaly-behavior-title = behavior deviation analysis: -anomaly-behavior-point =[color=gold]Anomaly produces {$mod}% of the points[/color] +anomaly-behavior-point =[color=gold]Anomaly produces {$mod}% of the points[/color] anomaly-behavior-safe = [color=forestgreen]The anomaly is extremely stable. Extremely rare pulsations.[/color] anomaly-behavior-slow = [color=forestgreen]The frequency of pulsations is much less frequent.[/color] @@ -94,4 +95,4 @@ anomaly-behavior-secret = Interference detected. Some data cannot be read anomaly-behavior-inconstancy = [color=crimson]Impermanence has been detected. Particle types can change over time.[/color] anomaly-behavior-fast = [color=crimson]The pulsation frequency is strongly increased.[/color] anomaly-behavior-strenght = [color=crimson]The pulsation power is significantly increased.[/color] -anomaly-behavior-moving = [color=crimson]Coordinate instability was detected.[/color] \ No newline at end of file +anomaly-behavior-moving = [color=crimson]Coordinate instability was detected.[/color] From 6fa8d6817fa81e6d6d20b61f5ec4b7b96fdb185b Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 01:02:31 +0000 Subject: [PATCH 042/182] Automatic Changelog Update (#1253) --- Resources/Changelog/Changelog.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 72bc8cc618b..aa6d2f607bb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8047,3 +8047,28 @@ Entries: id: 6533 time: '2024-11-22T01:01:33.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1260 +- author: VMSolidus + changes: + - type: Add + message: >- + Five new functions for the Trait System, AddArmor, PushDescription, + ModifyMobThresholds, AddSolutionContainer, and ModifyStamina. + - type: Tweak + message: >- + CyberEyes Basic System has been split, now Flash Protection is a + separate module. + - type: Add + message: >- + Dermal Armor no longer replaces your original species damage + resistances. It now stacks multiplicatively with your original + resistances. + - type: Tweak + message: Dermal Armor can now be taken by any species, not just Humans. + - type: Add + message: >- + Dermal Armor, and Bionic Arms can now be revealed by a close + examination. Shift click on someone within touching distance will reveal + if they have these "Obvious" cyberware. + id: 6534 + time: '2024-11-22T01:01:46.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1253 From 1b5704535ce42041c068d201cdb447af42004c20 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 01:03:02 +0000 Subject: [PATCH 043/182] Automatic Changelog Update (#1250) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index aa6d2f607bb..6c12172e141 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8072,3 +8072,12 @@ Entries: id: 6534 time: '2024-11-22T01:01:46.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1253 +- author: Mnemotechnician + changes: + - type: Add + message: >- + You can now touch one anomaly scanner with another to copy the anomaly + scan data from it. + id: 6535 + time: '2024-11-22T01:02:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1250 From 41501bd335c5e1e2e65b5d2ad040a3ae6851d4e8 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:03:21 -0400 Subject: [PATCH 044/182] Mass Bug Fixing (#1256) # Description Mass bug fixing, for bugs related to #1220. Feel free to link or send bugs. Fix list: - #1242 - #1243 - #1244 - https://github.com/space-wizards/space-station-14/pull/28084 - https://github.com/space-wizards/space-station-14/pull/28282 - Actually fixed PirateRadioSpawnRule heisentest (with a bandaid) (I cancel if it's 0) - https://github.com/Simple-Station/Einstein-Engines/issues/1263 --- # Changelog :cl: - fix: Fixed chair visuals drawing depth wrongly if you sat in a north-facing chair. - fix: Fixed buckling doing several buckles each time you did one. - fix: Fixed the magic mirror. - fix: Fixed beds re-positioning you every few seconds. - fix: Fixed E not opening containers that are in another container. - fix: Fixed disposal systems not flushing or ejecting properly. --------- Co-authored-by: sleepyyapril Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> --- Content.Client/Buckle/BuckleSystem.cs | 49 +++++++++----- .../Disposal/Tube/DisposalTubeSystem.cs | 3 +- .../Unit/EntitySystems/DisposableSystem.cs | 15 ++--- .../Unit/EntitySystems/DisposalUnitSystem.cs | 2 +- .../MagicMirror/MagicMirrorSystem.cs | 64 +++---------------- .../Events/PirateRadioSpawnRule.cs | 21 ++++-- .../Buckle/Components/BuckleComponent.cs | 19 ++---- .../Buckle/Components/StrapComponent.cs | 8 +-- .../Buckle/SharedBuckleSystem.Buckle.cs | 7 +- .../Buckle/SharedBuckleSystem.Interaction.cs | 1 + .../Buckle/SharedBuckleSystem.Strap.cs | 2 +- .../Interaction/SharedInteractionSystem.cs | 12 ++-- .../MagicMirror/MagicMirrorComponent.cs | 2 +- .../MagicMirror/SharedMagicMirrorSystem.cs | 51 +++++++++++++++ .../Standing/StandingStateSystem.cs | 2 +- .../EntitySystems/SharedStorageSystem.cs | 4 -- .../Structures/Furniture/rollerbeds.yml | 1 - .../Entities/Structures/Wallmounts/mirror.yml | 7 +- 18 files changed, 145 insertions(+), 125 deletions(-) diff --git a/Content.Client/Buckle/BuckleSystem.cs b/Content.Client/Buckle/BuckleSystem.cs index 4429996aca3..c26976ffbe4 100644 --- a/Content.Client/Buckle/BuckleSystem.cs +++ b/Content.Client/Buckle/BuckleSystem.cs @@ -15,9 +15,41 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnHandleState); SubscribeLocalEvent(OnAppearanceChange); SubscribeLocalEvent(OnStrapMoveEvent); + SubscribeLocalEvent(OnBuckledEvent); + SubscribeLocalEvent(OnUnbuckledEvent); + } + + /// + /// Is the strap entity already rotated north? Lower the draw depth of the buckled entity. + /// + private void OnBuckledEvent(Entity ent, ref BuckledEvent args) + { + if (!TryComp(args.Strap, out var strapSprite) || + !TryComp(ent.Owner, out var buckledSprite)) + return; + + if (Transform(args.Strap.Owner).LocalRotation.GetCardinalDir() == Direction.North) + { + ent.Comp.OriginalDrawDepth ??= buckledSprite.DrawDepth; + buckledSprite.DrawDepth = strapSprite.DrawDepth - 1; + } + } + + /// + /// Was the draw depth of the buckled entity lowered? Reset it upon unbuckling. + /// + private void OnUnbuckledEvent(Entity ent, ref UnbuckledEvent args) + { + if (!TryComp(ent.Owner, out var buckledSprite)) + return; + + if (ent.Comp.OriginalDrawDepth.HasValue) + { + buckledSprite.DrawDepth = ent.Comp.OriginalDrawDepth.Value; + ent.Comp.OriginalDrawDepth = null; + } } private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveEvent args) @@ -57,21 +89,6 @@ private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveE } } - private void OnHandleState(Entity ent, ref ComponentHandleState args) - { - if (args.Current is not BuckleState state) - return; - - ent.Comp.DontCollide = state.DontCollide; - ent.Comp.BuckleTime = state.BuckleTime; - var strapUid = EnsureEntity(state.BuckledTo, ent); - - SetBuckledTo(ent, strapUid == null ? null : new (strapUid.Value, null)); - - var (uid, component) = ent; - - } - private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args) { if (!TryComp(uid, out var rotVisuals) diff --git a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs index 5a800d5c0eb..8e47d2ef267 100644 --- a/Content.Server/Disposal/Tube/DisposalTubeSystem.cs +++ b/Content.Server/Disposal/Tube/DisposalTubeSystem.cs @@ -340,6 +340,7 @@ private void UpdateAnchored(EntityUid uid, DisposalTubeComponent component, bool { if (!Resolve(target, ref targetTube)) return null; + var oppositeDirection = nextDirection.GetOpposite(); var xform = Transform(target); @@ -347,7 +348,7 @@ private void UpdateAnchored(EntityUid uid, DisposalTubeComponent component, bool return null; var position = xform.Coordinates; - var entities = _mapSystem.GetInDir(target, grid, position, nextDirection); + var entities = _mapSystem.GetInDir((EntityUid) xform.GridUid, grid, position, nextDirection); foreach (var entity in entities) { diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs index 38e39238039..e7c83c8ac6a 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs @@ -88,11 +88,13 @@ public void ExitDisposals(EntityUid uid, DisposalHolderComponent? holder = null, if (!Resolve(uid, ref holder, ref holderTransform)) return; + if (holder.IsExitingDisposals) { Log.Error("Tried exiting disposals twice. This should never happen."); return; } + holder.IsExitingDisposals = true; // Check for a disposal unit to throw them into and then eject them from it. @@ -164,11 +166,13 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon { if (!Resolve(holderUid, ref holder, ref holderTransform)) return false; + if (holder.IsExitingDisposals) { Log.Error("Tried entering tube after exiting disposals. This should never happen."); return false; } + if (!Resolve(toUid, ref to, ref toTransform)) { ExitDisposals(holderUid, holder, holderTransform); @@ -193,6 +197,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon holder.PreviousTube = holder.CurrentTube; holder.PreviousDirection = holder.CurrentDirection; } + holder.CurrentTube = toUid; var ev = new GetDisposalsNextDirectionEvent(holder); RaiseLocalEvent(toUid, ref ev); @@ -212,9 +217,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon if (holder.CurrentDirection != holder.PreviousDirection) { foreach (var ent in holder.Container.ContainedEntities) - { _damageable.TryChangeDamage(ent, to.DamageOnTurn); - } _audio.PlayPvs(to.ClangSound, toUid); } @@ -225,9 +228,7 @@ public override void Update(float frameTime) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var holder)) - { UpdateComp(uid, holder, frameTime); - } } private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float frameTime) @@ -236,9 +237,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra { var time = frameTime; if (time > holder.TimeLeft) - { time = holder.TimeLeft; - } holder.TimeLeft -= time; frameTime -= time; @@ -268,7 +267,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra // Find next tube var nextTube = _disposalTubeSystem.NextTubeFor(currentTube, holder.CurrentDirection); - if (!EntityManager.EntityExists(nextTube)) + if (!EntityManager.EntityExists(nextTube)) { ExitDisposals(uid, holder); break; @@ -276,9 +275,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra // Perform remainder of entry process if (!EnterTube(uid, nextTube!.Value, holder)) - { break; - } } } } diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index 3c7636cfd07..842463140e4 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -517,7 +517,7 @@ public bool TryFlush(EntityUid uid, SharedDisposalUnitComponent component) return false; var coords = xform.Coordinates; - var entry = _sharedMapSystem.GetLocal(uid, grid, coords) + var entry = _sharedMapSystem.GetLocal((EntityUid) xform.GridUid, grid, coords) .FirstOrDefault(HasComp); if (entry == default || component is not DisposalUnitComponent sDisposals) diff --git a/Content.Server/MagicMirror/MagicMirrorSystem.cs b/Content.Server/MagicMirror/MagicMirrorSystem.cs index 6cbfc55cac0..b11e8ca707c 100644 --- a/Content.Server/MagicMirror/MagicMirrorSystem.cs +++ b/Content.Server/MagicMirror/MagicMirrorSystem.cs @@ -1,15 +1,12 @@ using System.Linq; using Content.Server.DoAfter; using Content.Server.Humanoid; -using Content.Shared.UserInterface; using Content.Shared.DoAfter; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Interaction; using Content.Shared.MagicMirror; -using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; namespace Content.Server.MagicMirror; @@ -22,14 +19,13 @@ public sealed class MagicMirrorSystem : SharedMagicMirrorSystem [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly MarkingManager _markings = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnOpenUIAttempt); - Subs.BuiEvents(MagicMirrorUiKey.Key, subs => + Subs.BuiEvents(MagicMirrorUiKey.Key, + subs => { subs.Event(OnUiClosed); subs.Event(OnMagicMirrorSelect); @@ -38,7 +34,6 @@ public override void Initialize() subs.Event(OnTryMagicMirrorRemoveSlot); }); - SubscribeLocalEvent(OnMagicMirrorInteract); SubscribeLocalEvent(OnSelectSlotDoAfter); SubscribeLocalEvent(OnChangeColorDoAfter); @@ -46,23 +41,6 @@ public override void Initialize() SubscribeLocalEvent(OnAddSlotDoAfter); } - private void OnMagicMirrorInteract(Entity mirror, ref AfterInteractEvent args) - { - if (!args.CanReach || args.Target == null) - return; - - if (!_uiSystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User)) - return; - - UpdateInterface(mirror.Owner, args.Target.Value, mirror.Comp); - } - - private void OnOpenUIAttempt(EntityUid uid, MagicMirrorComponent mirror, ActivatableUIOpenAttemptEvent args) - { - if (!HasComp(args.User)) - args.Cancel(); - } - private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, MagicMirrorSelectMessage message) { if (component.Target is not { } target) @@ -87,7 +65,8 @@ private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -143,7 +122,8 @@ private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent com BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; } @@ -198,7 +178,8 @@ private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent comp BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -252,7 +233,8 @@ private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent compone BreakOnUserMove = true, BreakOnWeightlessMove = false, NeedHand = true - }, out var doAfterId); + }, + out var doAfterId); component.DoAfter = doAfterId; _audio.PlayPvs(component.ChangeHairSound, uid); @@ -287,32 +269,6 @@ private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, Mag } - private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component) - { - if (!TryComp(targetUid, out var humanoid)) - return; - - var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings) - ? new List(hairMarkings) - : new(); - - var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings) - ? new List(facialHairMarkings) - : new(); - - var state = new MagicMirrorUiState( - humanoid.Species, - hair, - humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count, - facialHair, - humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); - - // TODO: Component states - component.Target = targetUid; - _uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); - Dirty(mirrorUid, component); - } - private void OnUiClosed(Entity ent, ref BoundUIClosedEvent args) { ent.Comp.Target = null; diff --git a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs index 60bf29b8f01..518d6409bf5 100644 --- a/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs +++ b/Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs @@ -25,7 +25,7 @@ public sealed class PirateRadioSpawnRule : StationEventSystem().ToList()); + var salvPrototypes = _prototypeManager.EnumeratePrototypes().ToList(); + var salvageProto = _random.Pick(salvPrototypes); + + if (!_mapSystem.MapExists(GameTicker.DefaultMap)) + return; + + // Round didn't start before running this, leading to a null-space test fail. + if (GameTicker.DefaultMap == MapId.Nullspace) + return; + if (!_map.TryLoad(GameTicker.DefaultMap, salvageProto.MapPath.ToString(), out _, debrisOptions)) return; diff --git a/Content.Shared/Buckle/Components/BuckleComponent.cs b/Content.Shared/Buckle/Components/BuckleComponent.cs index ee86e6d4de0..55831515ede 100644 --- a/Content.Shared/Buckle/Components/BuckleComponent.cs +++ b/Content.Shared/Buckle/Components/BuckleComponent.cs @@ -9,7 +9,7 @@ namespace Content.Shared.Buckle.Components; /// /// This component allows an entity to be buckled to an entity with a . /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] [Access(typeof(SharedBuckleSystem))] public sealed partial class BuckleComponent : Component { @@ -19,7 +19,7 @@ public sealed partial class BuckleComponent : Component /// across a table two tiles away" problem. ///
[DataField] - public float Range = SharedInteractionSystem.InteractionRange / 1.4f; + public float Range = SharedInteractionSystem.InteractionRange; /// /// True if the entity is buckled, false otherwise. @@ -30,7 +30,7 @@ public sealed partial class BuckleComponent : Component /// /// Whether or not collisions should be possible with the entity we are strapped to /// - [DataField] + [DataField, AutoNetworkedField] public bool DontCollide; /// @@ -49,13 +49,13 @@ public sealed partial class BuckleComponent : Component /// /// The time that this entity buckled at. /// - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField, AutoNetworkedField] public TimeSpan? BuckleTime; /// /// The strap that this component is buckled to. /// - [DataField] + [DataField, AutoNetworkedField] public EntityUid? BuckledTo; /// @@ -71,15 +71,6 @@ public sealed partial class BuckleComponent : Component [ViewVariables] public int? OriginalDrawDepth; } -[Serializable, NetSerializable] -public sealed class BuckleState(NetEntity? buckledTo, bool dontCollide, TimeSpan? buckleTime) : ComponentState -{ - public readonly NetEntity? BuckledTo = buckledTo; - public readonly bool DontCollide = dontCollide; - public readonly TimeSpan? BuckleTime = buckleTime; -} - - /// /// Event raised directed at a strap entity before some entity gets buckled to it. /// diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index 0fbdae693de..79dc686c7d8 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -15,7 +15,7 @@ public sealed partial class StrapComponent : Component /// /// The entities that are currently buckled to this strap. /// - [ViewVariables] + [ViewVariables, AutoNetworkedField] public HashSet BuckledEntities = new(); /// @@ -61,12 +61,6 @@ public sealed partial class StrapComponent : Component [DataField, AutoNetworkedField] public bool Enabled = true; - /// - /// You can specify the offset the entity will have after unbuckling. - /// - [DataField] - public Vector2 UnbuckleOffset = Vector2.Zero; - /// /// The sound to be played when a mob is buckled /// diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index ed1b3c19906..59241499a11 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -54,9 +54,7 @@ private void InitializeBuckle() } private void OnBuckleComponentShutdown(Entity ent, ref ComponentShutdown args) - { - Unbuckle(ent!, null); - } + => Unbuckle(ent!, null); #region Pulling @@ -351,13 +349,12 @@ private void Buckle(Entity buckle, Entity strap SetBuckledTo(buckle, strap!); Appearance.SetData(strap, StrapVisuals.State, true); Appearance.SetData(buckle, BuckleVisuals.Buckled, true); - _rotationVisuals.SetHorizontalAngle(buckle.Owner, strap.Comp.Rotation); var xform = Transform(buckle); var coords = new EntityCoordinates(strap, strap.Comp.BuckleOffset); - _transform.SetCoordinates(buckle, xform, coords, rotation: Angle.Zero); + _transform.SetCoordinates(buckle, xform, coords, rotation: Angle.Zero); _joints.SetRelay(buckle, strap); switch (strap.Comp.Position) diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs index 59eff1f8c87..d4fd8eb3af8 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs @@ -19,6 +19,7 @@ private void InitializeInteraction() SubscribeLocalEvent(OnStrapDragDropTarget); SubscribeLocalEvent(OnCanDropTarget); + SubscribeLocalEvent(OnBuckleInteractHand); SubscribeLocalEvent>(AddUnbuckleVerb); } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs index eb23aa973b4..bfb0cd9cd6f 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Strap.cs @@ -57,7 +57,7 @@ private void StrapRemoveAll(EntityUid uid, StrapComponent strapComp) { foreach (var entity in strapComp.BuckledEntities.ToArray()) { - TryUnbuckle(entity, entity, true); + Unbuckle(entity, entity); } } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 1c4a697cc4e..2bc256fd6ad 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -110,13 +110,17 @@ public override void Initialize() SubscribeLocalEvent(OnDropped); CommandBinds.Builder - .Bind(ContentKeyFunctions.AltActivateItemInWorld, + .Bind( + ContentKeyFunctions.AltActivateItemInWorld, new PointerInputCmdHandler(HandleAltUseInteraction)) - .Bind(EngineKeyFunctions.Use, + .Bind( + EngineKeyFunctions.Use, new PointerInputCmdHandler(HandleUseInteraction)) - .Bind(ContentKeyFunctions.ActivateItemInWorld, + .Bind( + ContentKeyFunctions.ActivateItemInWorld, new PointerInputCmdHandler(HandleActivateItemInWorld)) - .Bind(ContentKeyFunctions.TryPullObject, + .Bind( + ContentKeyFunctions.TryPullObject, new PointerInputCmdHandler(HandleTryPullObject)) .Register(); diff --git a/Content.Shared/MagicMirror/MagicMirrorComponent.cs b/Content.Shared/MagicMirror/MagicMirrorComponent.cs index 63575439052..95b17369795 100644 --- a/Content.Shared/MagicMirror/MagicMirrorComponent.cs +++ b/Content.Shared/MagicMirror/MagicMirrorComponent.cs @@ -47,5 +47,5 @@ public sealed partial class MagicMirrorComponent : Component /// Sound emitted when slots are changed /// [DataField, ViewVariables(VVAccess.ReadWrite)] - public SoundSpecifier ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg"); + public SoundSpecifier? ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg"); } diff --git a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs index ea5838a723e..ea96d504c6e 100644 --- a/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs +++ b/Content.Shared/MagicMirror/SharedMagicMirrorSystem.cs @@ -1,6 +1,8 @@ using Content.Shared.DoAfter; +using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Interaction; +using Content.Shared.UserInterface; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -9,13 +11,27 @@ namespace Content.Shared.MagicMirror; public abstract class SharedMagicMirrorSystem : EntitySystem { [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] protected readonly SharedUserInterfaceSystem UISystem = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMagicMirrorInteract); + SubscribeLocalEvent(OnBeforeUIOpen); SubscribeLocalEvent(OnMirrorRangeCheck); } + private void OnMagicMirrorInteract(Entity mirror, ref AfterInteractEvent args) + { + if (!args.CanReach || args.Target == null) + return; + + if (!UISystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User)) + return; + + UpdateInterface(mirror, args.Target.Value, mirror); + } + private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args) { if (args.Result == BoundUserInterfaceRangeResult.Fail) @@ -26,6 +42,41 @@ private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, r if (!_interaction.InRangeUnobstructed(uid, component.Target.Value)) args.Result = BoundUserInterfaceRangeResult.Fail; } + + private void OnBeforeUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + if (args.User != ent.Comp.Target && ent.Comp.Target != null) + return; + + UpdateInterface(ent, args.User, ent); + } + + protected void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component) + { + if (!TryComp(targetUid, out var humanoid)) + return; + component.Target ??= targetUid; + + var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings) + ? new List(hairMarkings) + : new(); + + var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings) + ? new List(facialHairMarkings) + : new(); + + var state = new MagicMirrorUiState( + humanoid.Species, + hair, + humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count, + facialHair, + humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); + + // TODO: Component states + component.Target = targetUid; + UISystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); + Dirty(mirrorUid, component); + } } [Serializable, NetSerializable] diff --git a/Content.Shared/Standing/StandingStateSystem.cs b/Content.Shared/Standing/StandingStateSystem.cs index a1b5418941a..562d9fe82b7 100644 --- a/Content.Shared/Standing/StandingStateSystem.cs +++ b/Content.Shared/Standing/StandingStateSystem.cs @@ -24,7 +24,7 @@ public sealed class StandingStateSystem : EntitySystem [Dependency] private readonly ClimbSystem _climb = default!; // If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited. - private const int StandingCollisionLayer = (int)CollisionGroup.MidImpassable; + private const int StandingCollisionLayer = (int) CollisionGroup.MidImpassable; public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null) { diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 2e800c386b9..771eaf023fd 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -374,13 +374,9 @@ private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInW // Toggle if (_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, args.User)) - { _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, args.User); - } else - { OpenStorageUI(uid, args.User, storageComp); - } args.Handled = true; } diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index 1cfe98f0f65..e09997720d2 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -54,7 +54,6 @@ position: Down rotation: -90 buckleOffset: "0,0.15" - unbuckleOffset: "0,0.15" buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml index d02bce020da..1fe3318ef55 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/mirror.yml @@ -11,7 +11,12 @@ - type: Clickable - type: Transform anchored: true - - type: MagicMirror + - type: MagicMirror #instant and silent + changeHairSound: null + addSlotTime: 0 + removeSlotTime: 0 + selectSlotTime: 0 + changeSlotTime: 0 - type: ActivatableUI key: enum.MagicMirrorUiKey.Key - type: UserInterface From 9798f5363135cbe71479d0a14cf3215d01ed28f0 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 01:03:52 +0000 Subject: [PATCH 045/182] Automatic Changelog Update (#1256) --- Resources/Changelog/Changelog.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6c12172e141..55ef63ce3f0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8081,3 +8081,22 @@ Entries: id: 6535 time: '2024-11-22T01:02:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1250 +- author: sleepyyapril + changes: + - type: Fix + message: >- + Fixed chair visuals drawing depth wrongly if you sat in a north-facing + chair. + - type: Fix + message: Fixed buckling doing several buckles each time you did one. + - type: Fix + message: Fixed the magic mirror. + - type: Fix + message: Fixed beds re-positioning you every few seconds. + - type: Fix + message: Fixed E not opening containers that are in another container. + - type: Fix + message: Fixed disposal systems not flushing or ejecting properly. + id: 6536 + time: '2024-11-22T01:03:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1256 From 992b2e486855cea6646cf5d4af51ca8cbf61b29d Mon Sep 17 00:00:00 2001 From: Skubman Date: Sat, 23 Nov 2024 04:08:11 +0800 Subject: [PATCH 046/182] Rename "Pierce" Typo to "Piercing" (#1267) # Description Oops. Some files refer to the non-existent **Pierce** damage type when the proper name is **Piercing**. # Changelog :cl: Skubman - fix: Piercing damage can now dismember body parts, just like Blunt and Slash damage. --- Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs | 2 +- .../Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml | 2 +- Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs index 9a7c9bc889e..45495896bcb 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs @@ -31,7 +31,7 @@ public partial class SharedBodySystem [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - private readonly string[] _severingDamageTypes = { "Slash", "Pierce", "Blunt" }; + private readonly string[] _severingDamageTypes = { "Slash", "Piercing", "Blunt" }; private const double IntegrityJobTime = 0.005; private readonly JobQueue _integrityJobQueue = new(IntegrityJobTime); public sealed class IntegrityJob : Job diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index c43cce1f8b1..75129601168 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -43,7 +43,7 @@ attackRate: 0.8 damage: types: - Pierce: 7 + Piercing: 7 heavyRateModifier: 0.9 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index fb1eb3d7fe9..92bb33d1773 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -21,7 +21,7 @@ damage: types: Blunt: 6 - Pierce: 3 + Piercing: 3 bluntStaminaDamageFactor: 2.0 heavyDamageBaseModifier: 1.75 maxTargets: 5 From b431d24f86f94433ea0c53982db83e40ef1d3f2c Mon Sep 17 00:00:00 2001 From: Tmanzxd <164098915+Tmanzxd@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:09:21 -0600 Subject: [PATCH 047/182] Buff Medical Due to Shitmed Changes Cherry-Pick (#1259) # Description + Buffed applicable medication heal values. + Buffed applicable medication stack sizes. + Slightly buffed dylovene, burn, and brute chems. + Buffed applicable medication doAfter delay from 3s to 2s. --- ## Why / Balance This change was made with the advent of the new Limb Damage system. This PR seeks to achieve making SS14 Medical more equivalent to SS13 Medical when it comes to healing damage values. This was done as Bruise Packs and Ointment only heal 5 Brute or 5 Burn respectively when applied to a limb. When each limb has a 100 Crit threshold, this can make it extremely hard even with surgery to heal limbs in the absence of Chemicals. Furthermore on higher pop, this will lead to people burning through applicable meds even faster than before Limb Damage was implemented. It would take 34 bruise packs to heal someone with 170 Blunt spread out across their limbs, with this change it would reduce that to 12 bruise packs. Full list of numerical val changes: - Healing component doAfter Delay reduced. was 3s, now its 2s. - Applicable medical items now have a max stack size of 15 (was 10). - Ointment heals 15 of each burn type, 10 caustic (was 5 of each burn type, 1.5 caustic) - Mesh now heals 20 of each burn type (was 10 of each burn type). - Bruise Packs now heal 15 of each brute type (was 5 of each brute type) - Sutures now heal 20 of each brute type (was 10 of each brute type) - Bloodpacks now heal 2.5 Bloodloss & restore 10% bloodlevel (was .5 Bloodloss and 5%) - Gauzes now heal 15 Slash and 20 Pierce (was 5 Slash and 10 Pierce) - Dylovene now heals 1.5 Poison per .5u (was 1 Poison per .5u) - Bicaridine now heals 2.5 Brute per .5u (Was 2 Brute per .5u) - Dermaline now heals 2 Burn per .5u (was 1.5 Burn per .5u) - Epinephrine now heals 1 Burn & 1 Brute per .5u (was .5 for each per .5u) - Kelotane now heals .5 Burn per .5u (was .33 Burn per .5u) - Omnizine now heals 3 Burn, Toxin, Airloss, and Brute per .5u (was 2 per .5u) - Lacerinol now heals 4 Slash per .5u (was 3 per .5u) - Bruizine now heals 4 Blunt per .5u (was 3.5 per .5u) # TODO - [x] Cherry-pick Medical changes merged in Goobstation --- --- ## Breaking changes Should values be overtuned, they can be reduced in a future PR or before this PR is merged. **Changelog** :cl: - tweak: Increased applicable medication heal values. - tweak: Increased stack size of applicable medications. - tweak: Slightly increased dylovene, burn, and brute chemicals heal values. - tweak: Decreased Medical item application time from 3s to 2s --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Signed-off-by: Tmanzxd <164098915+Tmanzxd@users.noreply.github.com> Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Medical/Components/HealingComponent.cs | 4 +- .../Catalog/Cargo/cargo_medical.yml | 4 +- .../Catalog/Cargo/cargo_vending.yml | 2 +- .../Objects/Specific/Medical/healing.yml | 56 +++++++++---------- Resources/Prototypes/Reagents/medicine.yml | 38 ++++++------- 5 files changed, 52 insertions(+), 52 deletions(-) diff --git a/Content.Server/Medical/Components/HealingComponent.cs b/Content.Server/Medical/Components/HealingComponent.cs index a56bc171432..94ad4b57c2d 100644 --- a/Content.Server/Medical/Components/HealingComponent.cs +++ b/Content.Server/Medical/Components/HealingComponent.cs @@ -43,13 +43,13 @@ public sealed partial class HealingComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] [DataField("delay")] - public float Delay = 3f; + public float Delay = 2f; //Was 3f, changed due to Surgery Changes /// /// Delay multiplier when healing yourself. /// [DataField("selfHealPenaltyMultiplier")] - public float SelfHealPenaltyMultiplier = 3f; + public float SelfHealPenaltyMultiplier = 2f; //Was 3f, changed due to Surgery Changes /// /// Sound played on healing begin diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml index 1addf523e4b..1b8f3547555 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml @@ -4,7 +4,7 @@ sprite: Objects/Specific/Medical/firstaidkits.rsi state: firstaid product: CrateMedicalSupplies - cost: 2400 + cost: 3000 category: cargoproduct-category-name-medical group: market @@ -74,7 +74,7 @@ sprite: Objects/Specific/Medical/firstaidkits.rsi state: advkit product: CrateEmergencyAdvancedKit - cost: 1200 + cost: 2000 category: cargoproduct-category-name-medical group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml index f7191df9ab4..8e2e1b4df58 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml @@ -104,7 +104,7 @@ sprite: Objects/Specific/Service/vending_machine_restock.rsi state: base product: CrateVendingMachineRestockMedicalFilled - cost: 1750 + cost: 3500 category: cargoproduct-category-name-medical group: market diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index 4c43596f870..6a0f0a3c23d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -32,19 +32,19 @@ - Biological damage: types: - Heat: -5 - Cold: -5 - Shock: -5 - Caustic: -1.5 + Heat: -10 + Cold: -10 + Shock: -10 + Caustic: -5 #Was 5 per type & 1.5 caustic, Buffed due to limb damage changes healingBeginSound: path: "/Audio/Items/Medical/ointment_begin.ogg" healingEndSound: path: "/Audio/Items/Medical/ointment_end.ogg" - type: Stack stackType: Ointment - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: StackPrice - price: 5 + price: 10 #Was 5, Buffed due to surgery changes - type: entity id: Ointment1 @@ -83,19 +83,19 @@ - Biological damage: types: - Heat: -10 - Cold: -10 - Shock: -10 - Caustic: -10 + Heat: -15 + Cold: -15 + Shock: -15 + Caustic: -15 #Was 10 per type, Buffed due to limb damage changes healingBeginSound: path: "/Audio/Items/Medical/ointment_begin.ogg" healingEndSound: path: "/Audio/Items/Medical/ointment_end.ogg" - type: Stack stackType: RegenerativeMesh - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: StackPrice - price: 20 + price: 40 #Was 20, Buffed due to limb damage changes - type: entity id: OintmentAdvanced1 @@ -123,16 +123,16 @@ - Biological damage: groups: - Brute: -15 # 5 for each type in the group + Brute: -30 # was 5 (-15 Brute) for each, Buffed due to limb damage changes healingBeginSound: path: "/Audio/Items/Medical/brutepack_begin.ogg" healingEndSound: path: "/Audio/Items/Medical/brutepack_end.ogg" - type: Stack stackType: Brutepack - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: StackPrice - price: 5 + price: 10 #Was 5, Buffed due to limb damage changes - type: entity id: Brutepack1 @@ -172,7 +172,7 @@ - Biological damage: groups: - Brute: -30 # 10 for each type in the group + Brute: -45 # was 10 for each, now 20 for each type in the group, Buffed due to Limb Damage Changes bloodlossModifier: -10 # a suture should stop ongoing bleeding healingBeginSound: path: "/Audio/Items/Medical/brutepack_begin.ogg" @@ -180,9 +180,9 @@ path: "/Audio/Items/Medical/brutepack_end.ogg" - type: Stack stackType: MedicatedSuture - count: 10 + count: 15 #Was 10, Buffed due to surgery changes - type: StackPrice - price: 20 + price: 40 #Was 20, Buffed due to limb damage changes - type: entity id: BrutepackAdvanced1 @@ -210,17 +210,17 @@ - Biological damage: types: - Bloodloss: -0.5 #lowers bloodloss damage - ModifyBloodLevel: 15 #restores about 5% blood per use on standard humanoids. + Bloodloss: -2.5 #lowers bloodloss damage, was .5, buffed due to Limb Damage Changes + ModifyBloodLevel: 30 #used to restore 5% blood per use, now restores about 10% blood per use on standard Buffed due to Limb Damage Changes healingBeginSound: path: "/Audio/Items/Medical/brutepack_begin.ogg" healingEndSound: path: "/Audio/Items/Medical/brutepack_end.ogg" - type: Stack stackType: Bloodpack - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: StackPrice - price: 10 + price: 20 #Was 10, Buffed due to limb damage changes - type: entity parent: Bloodpack @@ -276,8 +276,8 @@ - Biological damage: types: - Slash: -5 - Piercing: -10 + Slash: -10 # Was 5 + Piercing: -15 # Was 10, Buffed due to limb damage changes bloodlossModifier: -10 healingBeginSound: path: "/Audio/Items/Medical/brutepack_begin.ogg" @@ -285,9 +285,9 @@ path: "/Audio/Items/Medical/brutepack_end.ogg" - type: Stack stackType: Gauze - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: StackPrice - price: 10 + price: 20 #Was 10, Buffed due to limb damage changes - type: entity id: Gauze1 @@ -304,7 +304,7 @@ components: - type: Stack lingering: true - count: 10 + count: 1 - type: entity name: aloe cream @@ -317,7 +317,7 @@ state: cream - type: Stack stackType: AloeCream - count: 10 + count: 15 #Was 10, Buffed due to limb damage changes - type: entity parent: BaseHealingItem diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index 6b441711e1b..f5edc342166 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -43,7 +43,7 @@ - !type:HealthChange damage: types: - Poison: -1 + Poison: -1.5 # Was 1, Slight Buff as it should heal for half the amount as Dip or Stelli - !type:HealthChange conditions: - !type:ReagentThreshold @@ -153,7 +153,7 @@ - !type:HealthChange damage: groups: - Brute: -2 + Brute: -2.5 # Was 2, Buffed due to limb damage changes - !type:HealthChange conditions: - !type:ReagentThreshold @@ -236,9 +236,9 @@ - !type:HealthChange damage: types: - Heat: -1.5 - Shock: -1.5 - Cold: -1.5 + Heat: -2 + Shock: -2 + Cold: -2 # Was 1.5, Buffed due to limb damage changes - !type:HealthChange conditions: - !type:ReagentThreshold @@ -336,8 +336,8 @@ Asphyxiation: -3 Poison: -0.5 groups: - Brute: -0.5 - Burn: -0.5 + Brute: -1 + Burn: -1 # Was .5, Buffed due to limb damage changes - !type:HealthChange conditions: - !type:ReagentThreshold @@ -455,9 +455,9 @@ - !type:HealthChange damage: types: - Heat: -0.33 - Shock: -0.33 - Cold: -0.33 + Heat: -0.5 + Shock: -0.5 + Cold: -0.5 # Was .33, Buffed due to limb damage changes - !type:SatiateThirst factor: -10 conditions: @@ -778,9 +778,9 @@ Brute: -1 types: Poison: -0.5 ##Should be about what it was when it healed the toxin group - Heat: -0.33 - Shock: -0.33 - Cold: -0.33 + Heat: -0.5 + Shock: -0.5 + Cold: -0.5 # Was .33, Buffed due to limb damage changes - type: reagent id: Lipozine @@ -812,10 +812,10 @@ - !type:HealthChange damage: groups: - Burn: -2 - Toxin: -2 - Airloss: -2 - Brute: -2 + Burn: -3 + Toxin: -3 + Airloss: -3 + Brute: -3 # Was 2, Buffed due to limb damage changes - type: reagent id: Ultravasculine @@ -989,7 +989,7 @@ - !type:HealthChange damage: types: - Slash: -3 + Slash: -4 # Was 3, Buffed due to limb damage changes - !type:HealthChange conditions: - !type:ReagentThreshold @@ -1036,7 +1036,7 @@ - !type:HealthChange damage: types: - Blunt: -3.5 + Blunt: -4 # Was 3, Buffed due to limb damage changes(GoobStation) - !type:HealthChange conditions: - !type:ReagentThreshold From 02dd8ab06333a5b2dabe03845bfd6719ca09ef48 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 20:09:29 +0000 Subject: [PATCH 048/182] Automatic Changelog Update (#1267) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 55ef63ce3f0..daa10940853 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8100,3 +8100,12 @@ Entries: id: 6536 time: '2024-11-22T01:03:22.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1256 +- author: Skubman + changes: + - type: Fix + message: >- + Piercing damage can now dismember body parts, just like Blunt and Slash + damage. + id: 6537 + time: '2024-11-22T20:08:11.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1267 From 09d59007d4c55ee9f7daa0f56cae672c51951843 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 20:09:58 +0000 Subject: [PATCH 049/182] Automatic Changelog Update (#1259) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index daa10940853..1261aa5e002 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8109,3 +8109,16 @@ Entries: id: 6537 time: '2024-11-22T20:08:11.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1267 +- author: Tmanzxd + changes: + - type: Tweak + message: Increased applicable medication heal values. + - type: Tweak + message: Increased stack size of applicable medications. + - type: Tweak + message: Slightly increased dylovene, burn, and brute chemicals heal values. + - type: Tweak + message: Decreased Medical item application time from 3s to 2s + id: 6538 + time: '2024-11-22T20:09:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1259 From 150020866ddd383f297dfccd7717017c23222d82 Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Sat, 23 Nov 2024 04:54:10 +0700 Subject: [PATCH 050/182] The Blood Cult (#1001) # Description Adds a new game mode - The Blood Cult. Hail to Nar'Sie! --- # TODO - [x] Gamemode - [x] Roles - [x] Runes - [x] Constructs - [x] Structures - [x] Forge - [x] Archives - [x] Altar - [x] Pylon - [x] Structure - [x] Placement System - [x] Airlocks - [x] Repulsor system - [x] Construction system - [x] Items - [x] Eldritch Whetstone - [x] Construct Shell - [x] Mirror Shield - [x] True Nar'sian Hardened Armor - [x] Flagellant's Robe - [x] Eldritch Longsword - [x] Zealot's Blindfold - [ ] Night vision system - [x] Shuttle Curse - [x] Veil Shifter - [x] Void Torch - [x] Reagents - [x] Holy Water - [ ] Actions - [x] Cult Magic - [x] Stun - [x] Teleport - [x] Electromagnetic Pulse - [x] Shadow Shackles - [x] Twisted Construction - [x] Summon Combat Equipment - [x] Summon Ritual Dagger - [x] Blood Rites - [ ] Cult Leader Magic - [ ] Final Reckoning - [ ] Mark Target - [ ] Eldritch Pulse - [ ] Construct's Magic - [ ] Artificer - [ ] Summon Cult Floor - [ ] Summon Cult Wall - [ ] Greater Conjuration - [ ] Summon Soulstone - [ ] Wraith - [ ] Phase Shift - [ ] Juggernaut - [ ] Shield - [ ] Gauntlet Echo - [x] Cult leader selection system - [ ] Rending/Apocalypse rune placement markers EXTRA: - [ ] Spirit Realm rune - [x] Eldritch language - [ ] Conceal magic - [ ] Ru locale ---

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: - add: Added Blood Cult Gamemode. --------- Signed-off-by: VMSolidus Signed-off-by: Remuchi Co-authored-by: VMSolidus --- Content.Client/Antag/AntagStatusIconSystem.cs | 15 +- .../ListViewSelector/ListViewSelectorBUI.cs | 111 +++++ .../ShortConstructionSystem.cs | 5 +- .../BloodCult/BloodCultistSystem.cs | 73 +++ .../Items/VoidTorch/VoidTorchSystem.cs | 23 + .../BloodCult/NameSelector/NameSelectorBUI.cs | 67 +++ .../BloodCult/Runes/UI/RuneDrawerBUI.cs | 108 +++++ .../BloodCult/UI/AlignPylonConstruction.cs | 33 ++ .../WhiteDream/BloodCult/UI/BloodRitesUi.cs | 133 ++++++ .../Systems/AdminVerbSystem.Antags.cs | 18 + .../Body/Systems/BloodstreamSystem.cs | 5 +- .../Chemistry/ReagentEffects/PurifyEvil.cs | 49 ++ .../Ensnaring/EnsnareableSystem.Ensnaring.cs | 7 +- Content.Server/Magic/MagicSystem.cs | 2 +- Content.Server/RoundEnd/RoundEndSystem.cs | 16 + .../Components/StunOnCollideComponent.cs | 56 ++- .../Stunnable/Systems/StunOnCollideSystem.cs | 81 ++-- .../Whetstone/WhetstoneComponent.cs | 34 ++ Content.Server/Whetstone/WhetstoneSystem.cs | 52 +++ .../BloodBoilProjectileComponent.cs | 7 + .../BloodBoilProjectileSystem.cs | 19 + .../BloodCult/BloodCultChatSystem.cs | 70 +++ .../BloodRites/BloodRitesAuraComponent.cs | 66 +++ .../BloodCult/BloodRites/BloodRitesSystem.cs | 237 ++++++++++ .../BloodCult/Constructs/ConstructSystem.cs | 59 +++ .../Shell/ConstructShellComponent.cs | 29 ++ .../Constructs/Shell/ConstructShellSystem.cs | 116 +++++ .../SoulShard/SoulShardComponent.cs | 21 + .../Constructs/SoulShard/SoulShardSystem.cs | 108 +++++ .../CultBarrier/BloodCultBarrierComponent.cs | 4 + .../CultBarrier/BloodCultBarrierSystem.cs | 25 ++ .../Empower/BloodCultEmpoweredComponent.cs | 44 ++ .../Empower/BloodCultEmpoweredSystem.cs | 88 ++++ .../Gamerule/BloodCultRuleComponent.cs | 65 +++ .../BloodCult/Gamerule/BloodCultRuleSystem.cs | 382 ++++++++++++++++ .../Items/BloodSpear/BloodSpearComponent.cs | 25 ++ .../Items/BloodSpear/BloodSpearSystem.cs | 84 ++++ .../ShuttleCurse/ShuttleCurseComponent.cs | 29 ++ .../ShuttleCurseProviderComponent.cs | 11 + .../Items/ShuttleCurse/ShuttleCurseSystem.cs | 81 ++++ .../Items/VeilShifter/VeilShifterComponent.cs | 35 ++ .../Items/VeilShifter/VeilShifterSystem.cs | 91 ++++ .../Items/VoidTorch/VoidTorchSystem.cs | 85 ++++ .../Objectives/KillTargetCultComponent.cs | 11 + .../Objectives/KillTargetCultSystem.cs | 50 +++ .../WhiteDream/BloodCult/Pylon/PylonSystem.cs | 136 ++++++ .../Apocalypse/CultRuneApocalypseComponent.cs | 61 +++ .../Apocalypse/CultRuneApocalypseSystem.cs | 78 ++++ .../Runes/Barrier/CultRuneBarrierComponent.cs | 10 + .../Runes/Barrier/CultRuneBarrierSystem.cs | 15 + .../BloodBoil/CultRuneBloodBoilComponent.cs | 26 ++ .../BloodBoil/CultRuneBloodBoilSystem.cs | 86 ++++ .../BloodCult/Runes/CultRuneBaseComponent.cs | 41 ++ .../Runes/CultRuneBaseSystem.Helpers.cs | 54 +++ .../BloodCult/Runes/CultRuneBaseSystem.cs | 221 +++++++++ .../Runes/Empower/CultRuneEmpowerComponent.cs | 8 + .../Runes/Empower/CultRuneEmpowerSystem.cs | 33 ++ .../Offering/CultRuneOfferingComponent.cs | 42 ++ .../Runes/Offering/CultRuneOfferingSystem.cs | 125 ++++++ .../Runes/Rending/CultRuneRendingComponent.cs | 33 ++ .../Runes/Rending/CultRuneRendingSystem.cs | 109 +++++ .../Runes/Revive/CultRuneReviveComponent.cs | 26 ++ .../Runes/Revive/CultRuneReviveSystem.cs | 113 +++++ .../ReviveRuneChargesProviderComponent.cs | 8 + .../Runes/Summon/CultRuneSummonComponent.cs | 10 + .../Runes/Summon/CultRuneSummonSystem.cs | 89 ++++ .../Teleport/CultRuneTeleportComponent.cs | 19 + .../Runes/Teleport/CultRuneTeleportSystem.cs | 93 ++++ .../Spells/BaseCultSpellComponent.cs | 11 + .../Spells/BloodCultSpellsHolderComponent.cs | 31 ++ .../BloodCult/Spells/BloodCultSpellsSystem.cs | 294 ++++++++++++ .../Spells/BloodCultTeleportSpellSystem.cs | 67 +++ .../TwistedConstructionSystem.cs | 51 +++ .../TimedFactory/TimedFactoryComponent.cs | 16 + .../TimedFactory/TimedFactorySystem.cs | 61 +++ .../Events/ActionGettingDisabledEvent.cs | 8 + Content.Shared/Actions/SharedActionsSystem.cs | 4 + .../Blocking/BlockingSystem.User.cs | 46 +- .../Blocking/Components/BlockingComponent.cs | 9 + Content.Shared/Cuffs/SharedCuffableSystem.cs | 7 +- Content.Shared/Doors/DoorEvents.cs | 1 + .../Doors/Systems/SharedDoorSystem.cs | 6 +- .../Components/EnsnaringComponent.cs | 9 +- .../ListViewSelector/ListViewSelectorEntry.cs | 33 ++ .../Magic/Events/ChangeComponentSpellEvent.cs | 3 + .../Magic/Events/ChargeSpellEvent.cs | 3 + .../Magic/Events/InstantSpawnSpellEvent.cs | 3 + .../Magic/Events/KnockSpellEvent.cs | 3 + .../Magic/Events/ProjectileSpellEvent.cs | 3 + .../Magic/Events/SmiteSpellEvent.cs | 3 + .../Magic/Events/SpeakSpellEvent.cs | 7 +- .../Magic/Events/TeleportSpellEvent.cs | 3 + .../Magic/Events/WorldSpawnSpellEvent.cs | 3 + Content.Shared/Magic/ISpeakSpell.cs | 6 +- Content.Shared/Magic/SharedMagicSystem.cs | 2 +- .../Movement/Pulling/Systems/PullingSystem.cs | 17 +- .../Psionics/PsionicPowerPoolPrototype.cs | 15 + Content.Shared/Repulsor/RepulseComponent.cs | 19 + .../Repulsor/RepulseOnTouchComponent.cs | 4 + Content.Shared/Repulsor/RepulseSystem.cs | 50 +++ Content.Shared/Stunnable/SharedStunSystem.cs | 3 +- .../UserInterface/ActivatableUIComponent.cs | 6 + .../UserInterface/ActivatableUISystem.cs | 12 +- Content.Shared/Verbs/VerbCategory.cs | 51 ++- .../Weapons/Melee/Events/AttemptMeleeEvent.cs | 2 +- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 7 +- .../Weapons/Reflect/ReflectSystem.cs | 17 +- .../BloodCultist/BloodCultLeaderComponent.cs | 16 + .../BloodCultist/BloodCultistComponent.cs | 42 ++ .../BloodCultist/BloodCultistRoleComponent.cs | 6 + .../Components/PentagramComponent.cs | 20 + .../BloodCult/Components/PylonComponent.cs | 58 +++ .../TwistedConstructionTargetComponent.cs | 14 + .../Constructs/ConstructComponent.cs | 29 ++ .../BloodCult/Items/CultItemComponent.cs | 16 + .../BloodCult/Items/CultItemSystem.cs | 82 ++++ .../Items/VoidTorch/VoidTorchComponent.cs | 21 + .../BloodCult/RunedDoor/RunedDoorComponent.cs | 4 + .../BloodCult/RunedDoor/RunedDoorSystem.cs | 54 +++ .../BloodCult/Runes/ApocalypseRune.cs | 14 + .../WhiteDream/BloodCult/Runes/RendingRune.cs | 14 + .../BloodCult/Runes/RuneDrawerComponent.cs | 41 ++ .../BloodCult/Runes/RuneSelectorPrototype.cs | 30 ++ .../WhiteDream/BloodCult/Spells/Events.cs | 112 +++++ .../WhiteDream/BloodCult/UI/BloodRites.cs | 25 ++ .../WhiteDream/BloodCult/UI/NameSelector.cs | 16 + .../WhiteDream/BloodCult/Visuals.cs | 40 ++ .../Audio/WhiteDream/BloodCult/blood.ogg | Bin 0 -> 13657 bytes .../BloodCult/blood_cult_greeting.ogg | Bin 0 -> 155160 bytes .../Audio/WhiteDream/BloodCult/butcher.ogg | Bin 0 -> 9666 bytes .../Audio/WhiteDream/BloodCult/curse.ogg | Bin 0 -> 8992 bytes .../WhiteDream/BloodCult/enter_blood.ogg | Bin 0 -> 20837 bytes .../Audio/WhiteDream/BloodCult/magic.ogg | Bin 0 -> 24183 bytes .../WhiteDream/BloodCult/narsie_summoned.ogg | Bin 0 -> 49654 bytes .../BloodCult/rending_draw_finished.ogg | Bin 0 -> 31013 bytes .../WhiteDream/BloodCult/rending_ritual.ogg | Bin 0 -> 350868 bytes .../Audio/WhiteDream/BloodCult/rites.ogg | Bin 0 -> 20637 bytes .../Audio/WhiteDream/BloodCult/smoke.ogg | Bin 0 -> 25399 bytes .../Audio/WhiteDream/BloodCult/startdraw.ogg | Bin 0 -> 25351 bytes .../Audio/WhiteDream/BloodCult/veilin.ogg | Bin 0 -> 11239 bytes .../Audio/WhiteDream/BloodCult/veilout.ogg | Bin 0 -> 11211 bytes .../WhiteDream/BloodCult/wand_teleport.ogg | Bin 0 -> 18966 bytes .../WhiteDream/BloodCult/wraith_phase.ogg | Bin 0 -> 11078 bytes .../en-US/chat/managers/chat-manager.ftl | 3 + .../en-US/guidebook/chemistry/effects.ftl | 4 +- Resources/Locale/en-US/language/languages.ftl | 5 + Resources/Locale/en-US/verbs/verb-system.ftl | 1 + .../white-dream/administration/antag.ftl | 2 + Resources/Locale/en-US/white-dream/alerts.ftl | 5 + .../en-US/white-dream/cult/gamerule.ftl | 18 + .../white-dream/cult/items/blood-rites.ftl | 5 + .../en-US/white-dream/cult/items/general.ftl | 22 + .../en-US/white-dream/cult/materials.ftl | 1 + .../Locale/en-US/white-dream/cult/runes.ftl | 18 + .../en-US/white-dream/cult/shuttle-curse.ftl | 11 + .../Locale/en-US/white-dream/cult/spells.ftl | 5 + .../white-dream/cult/structures/pylon.ftl | 1 + .../cult/structures/timed-factory.ftl | 1 + .../en-US/white-dream/name-selector.ftl | 2 + .../Mobs/Cyborgs/base_borg_chassis.yml | 2 + .../Prototypes/Entities/Mobs/Player/ipc.yml | 2 + .../Entities/Mobs/Player/narsie.yml | 7 - .../Entities/Mobs/Player/silicon_base.yml | 4 + .../Prototypes/Entities/Mobs/Species/base.yml | 4 + .../Objects/Materials/Sheets/metal.yml | 2 + .../Entities/Objects/Shields/shields.yml | 49 -- .../Specific/Robotics/endoskeleton.yml | 3 + .../Entities/Objects/Weapons/Melee/cult.yml | 57 --- .../Doors/Airlocks/base_structureairlocks.yml | 3 + .../Storage/Tanks/base_structuretanks.yml | 2 +- .../Entities/Structures/Walls/walls.yml | 4 + .../Language/FactionSpecific/blood_cult.yml | 159 +++++++ .../Reagents/Consumable/Drink/drinks.yml | 39 -- .../Nyanotrasen/Recipes/Reactions/drink.yml | 12 - .../Recipes/Reactions/single_reagent.yml | 1 + Resources/Prototypes/Reagents/medicine.yml | 44 ++ .../Entities/Actions/cult_constructs.yml | 0 .../Entities/Actions/cult_items.yml | 16 + .../Entities/Actions/cult_leader.yml | 0 .../WhiteDream/Entities/Actions/cultists.yml | 195 ++++++++ .../Entities/Clothing/Cult/armor.yml | 123 +++++ .../WhiteDream/Entities/Effects/cult.yml | 58 +++ .../Entities/Objects/Cult/constructs.yml | 343 ++++++++++++++ .../Entities/Objects/Cult/souls_shards.yml | 49 ++ .../Entities/Objects/Items/cult.yml | 200 +++++++++ .../Entities/Objects/Materials/cult.yml | 78 ++++ .../Entities/Objects/Runes/cult.yml | 166 +++++++ .../Objects/Structures/Cult/airlock.yml | 54 +++ .../Objects/Structures/Cult/barrier.yml | 71 +++ .../Objects/Structures/Cult/factories.yml | 109 +++++ .../Objects/Structures/Cult/pylon.yml | 71 +++ .../Objects/Structures/Cult/walls.yml | 34 ++ .../Weapons/Guns/Projectiles/magic.yml | 21 + .../Entities/Objects/Weapons/Melee/cult.yml | 158 +++++++ .../Objects/Weapons/Throwable/cult.yml | 22 + .../WhiteDream/GameRules/roundstart.yml | 25 ++ .../Prototypes/WhiteDream/Objectives/cult.yml | 19 + .../WhiteDream/Pool/cult_powers_pool.yml | 11 + .../WhiteDream/Reagents/Materials/cult.yml | 7 + .../WhiteDream/Recipes/Construction/cult.yml | 107 +++++ .../Recipes/Construction/cult_graphs.yml | 114 +++++ .../WhiteDream/Roles/Antags/blood-cultist.yml | 16 + .../WhiteDream/Stacks/Materials/cult.yml | 6 + .../WhiteDream/StatusIcon/antag.yml | 15 + .../Prototypes/WhiteDream/ai_factions.yml | 8 + Resources/Prototypes/WhiteDream/alerts.yml | 5 + .../Prototypes/WhiteDream/game_presets.yml | 12 + .../Prototypes/WhiteDream/runeSelectors.yml | 43 ++ Resources/Prototypes/WhiteDream/tiles.yml | 29 ++ Resources/Prototypes/ai_factions.yml | 1 + Resources/Prototypes/secret_weights.yml | 5 +- .../WhiteDream/BloodCult/Alerts/empowered.png | Bin 0 -> 891 bytes .../Effects/airlock_glow.rsi/doorglow.png | Bin 0 -> 3191 bytes .../Effects/airlock_glow.rsi/meta.json | 28 ++ .../Effects/blood_boil.rsi/bullet.png | Bin 0 -> 919 bytes .../Effects/blood_boil.rsi/meta.json | 21 + .../Effects/cult_in_out.rsi/cult_in.png | Bin 0 -> 5277 bytes .../Effects/cult_in_out.rsi/cult_out.png | Bin 0 -> 4490 bytes .../Effects/cult_in_out.rsi/meta.json | 103 +++++ .../BloodCult/Effects/pentagram.rsi/halo1.png | Bin 0 -> 8253 bytes .../BloodCult/Effects/pentagram.rsi/halo2.png | Bin 0 -> 8179 bytes .../BloodCult/Effects/pentagram.rsi/halo3.png | Bin 0 -> 8275 bytes .../BloodCult/Effects/pentagram.rsi/halo4.png | Bin 0 -> 8199 bytes .../BloodCult/Effects/pentagram.rsi/halo5.png | Bin 0 -> 8201 bytes .../BloodCult/Effects/pentagram.rsi/halo6.png | Bin 0 -> 8275 bytes .../BloodCult/Effects/pentagram.rsi/meta.json | 419 ++++++++++++++++++ .../Effects/tiles_spawn.rsi/floorglow.png | Bin 0 -> 1181 bytes .../Effects/tiles_spawn.rsi/meta.json | 28 ++ .../BloodCult/Effects/wall_glow.rsi/meta.json | 28 ++ .../Effects/wall_glow.rsi/wallglow.png | Bin 0 -> 3360 bytes .../cult_helmet.rsi/equipped-HELMET.png | Bin 0 -> 866 bytes .../Clothes/Helmet/cult_helmet.rsi/icon.png | Bin 0 -> 361 bytes .../Clothes/Helmet/cult_helmet.rsi/meta.json | 18 + .../Helmet/cult_hood.rsi/equipped-HELMET.png | Bin 0 -> 762 bytes .../Clothes/Helmet/cult_hood.rsi/icon.png | Bin 0 -> 329 bytes .../Clothes/Helmet/cult_hood.rsi/meta.json | 18 + .../cult_armor.rsi/equipped-OUTERCLOTHING.png | Bin 0 -> 1816 bytes .../Clothes/Outer/cult_armor.rsi/icon.png | Bin 0 -> 754 bytes .../Clothes/Outer/cult_armor.rsi/meta.json | 18 + .../cult_robe.rsi/equipped-OUTERCLOTHING.png | Bin 0 -> 1467 bytes .../Clothes/Outer/cult_robe.rsi/icon.png | Bin 0 -> 695 bytes .../Clothes/Outer/cult_robe.rsi/meta.json | 18 + .../Items/Weapons/cult_blade.rsi/icon.png | Bin 0 -> 2380 bytes .../Weapons/cult_blade.rsi/inhand-left.png | Bin 0 -> 1239 bytes .../Weapons/cult_blade.rsi/inhand-right.png | Bin 0 -> 1250 bytes .../Items/Weapons/cult_blade.rsi/meta.json | 72 +++ .../Items/Weapons/cult_spear.rsi/icon.png | Bin 0 -> 532 bytes .../Weapons/cult_spear.rsi/inhand-left.png | Bin 0 -> 763 bytes .../Weapons/cult_spear.rsi/inhand-right.png | Bin 0 -> 781 bytes .../Items/Weapons/cult_spear.rsi/meta.json | 30 ++ .../cult_spear.rsi/wielded-inhand-left.png | Bin 0 -> 538 bytes .../cult_spear.rsi/wielded-inhand-right.png | Bin 0 -> 538 bytes .../Items/arcane_barrage.rsi/bullet.png | Bin 0 -> 489 bytes .../Items/arcane_barrage.rsi/icon.png | Bin 0 -> 588 bytes .../Items/arcane_barrage.rsi/inhand-left.png | Bin 0 -> 491 bytes .../Items/arcane_barrage.rsi/inhand-right.png | Bin 0 -> 455 bytes .../Items/arcane_barrage.rsi/meta.json | 77 ++++ .../Entities/Items/bola.rsi/icon.png | Bin 0 -> 616 bytes .../Entities/Items/bola.rsi/meta.json | 14 + .../Items/construct_shell.rsi/icon.png | Bin 0 -> 1009 bytes .../Items/construct_shell.rsi/meta.json | 22 + .../Entities/Items/mirror_shield.rsi/icon.png | Bin 0 -> 1104 bytes .../Items/mirror_shield.rsi/meta.json | 82 ++++ .../mirror_shield.rsi/mirror-inhand-left.png | Bin 0 -> 2435 bytes .../mirror_shield.rsi/mirror-inhand-right.png | Bin 0 -> 2543 bytes .../Entities/Items/rites.rsi/icon.png | Bin 0 -> 665 bytes .../Entities/Items/rites.rsi/inhand-left.png | Bin 0 -> 543 bytes .../Entities/Items/rites.rsi/inhand-right.png | Bin 0 -> 554 bytes .../Entities/Items/rites.rsi/meta.json | 66 +++ .../Entities/Items/shuttle_curse.rsi/icon.png | Bin 0 -> 979 bytes .../Items/shuttle_curse.rsi/meta.json | 25 ++ .../Entities/Items/soul_stone.rsi/meta.json | 27 ++ .../Items/soul_stone.rsi/soul_stone.png | Bin 0 -> 298 bytes .../soul_stone.rsi/soul_stone_blessed.png | Bin 0 -> 305 bytes .../Items/soul_stone.rsi/soul_stone_glow.png | Bin 0 -> 592 bytes .../Entities/Items/veil_shifter.rsi/icon.png | Bin 0 -> 1144 bytes .../Items/veil_shifter.rsi/icon_off.png | Bin 0 -> 375 bytes .../Entities/Items/veil_shifter.rsi/meta.json | 29 ++ .../Entities/Items/void_torch.rsi/icon.png | Bin 0 -> 1338 bytes .../Items/void_torch.rsi/icon_off.png | Bin 0 -> 246 bytes .../Items/void_torch.rsi/lit-inhand-left.png | Bin 0 -> 1610 bytes .../Items/void_torch.rsi/lit-inhand-right.png | Bin 0 -> 1555 bytes .../Entities/Items/void_torch.rsi/meta.json | 95 ++++ .../void_torch.rsi/unlit-inhand-left.png | Bin 0 -> 376 bytes .../void_torch.rsi/unlit-inhand-right.png | Bin 0 -> 380 bytes .../Items/whetstone_cult.rsi/icon.png | Bin 0 -> 718 bytes .../Items/whetstone_cult.rsi/icon_off.png | Bin 0 -> 498 bytes .../Items/whetstone_cult.rsi/meta.json | 17 + .../Entities/Runes/apocalypse.rsi/icon.png | Bin 0 -> 5310 bytes .../Entities/Runes/apocalypse.rsi/meta.json | 14 + .../Runes/dimensional_rending.rsi/meta.json | 29 ++ .../Runes/dimensional_rending.rsi/rune.png | Bin 0 -> 6020 bytes .../dimensional_rending.rsi/rune_animated.png | Bin 0 -> 39701 bytes .../Entities/Runes/regular.rsi/barrier.png | Bin 0 -> 1302 bytes .../Entities/Runes/regular.rsi/blood_boil.png | Bin 0 -> 1159 bytes .../Entities/Runes/regular.rsi/empower.png | Bin 0 -> 1212 bytes .../Entities/Runes/regular.rsi/meta.json | 38 ++ .../Entities/Runes/regular.rsi/offering.png | Bin 0 -> 1197 bytes .../Entities/Runes/regular.rsi/revive.png | Bin 0 -> 1188 bytes .../Runes/regular.rsi/spirit_realm.png | Bin 0 -> 1299 bytes .../Entities/Runes/regular.rsi/strength.png | Bin 0 -> 1183 bytes .../Entities/Runes/regular.rsi/summon.png | Bin 0 -> 1232 bytes .../Entities/Runes/regular.rsi/teleport.png | Bin 0 -> 1303 bytes .../Structures/Concealed/cult.rsi/cult0.png | Bin 0 -> 391 bytes .../Structures/Concealed/cult.rsi/cult1.png | Bin 0 -> 274 bytes .../Structures/Concealed/cult.rsi/cult2.png | Bin 0 -> 391 bytes .../Structures/Concealed/cult.rsi/cult3.png | Bin 0 -> 274 bytes .../Structures/Concealed/cult.rsi/cult4.png | Bin 0 -> 280 bytes .../Structures/Concealed/cult.rsi/cult5.png | Bin 0 -> 352 bytes .../Structures/Concealed/cult.rsi/cult6.png | Bin 0 -> 280 bytes .../Structures/Concealed/cult.rsi/cult7.png | Bin 0 -> 204 bytes .../Structures/Concealed/cult.rsi/full.png | Bin 0 -> 168 bytes .../Structures/Concealed/cult.rsi/meta.json | 46 ++ .../Concealed/cult_airlock.rsi/assembly.png | Bin 0 -> 178 bytes .../Concealed/cult_airlock.rsi/closed.png | Bin 0 -> 117 bytes .../Concealed/cult_airlock.rsi/closing.png | Bin 0 -> 563 bytes .../Concealed/cult_airlock.rsi/meta.json | 60 +++ .../Concealed/cult_airlock.rsi/open.png | Bin 0 -> 170 bytes .../Concealed/cult_airlock.rsi/opening.png | Bin 0 -> 582 bytes .../Concealed/cult_girder.rsi/cultgirder.png | Bin 0 -> 302 bytes .../Concealed/cult_girder.rsi/meta.json | 14 + .../Entities/Structures/altar.rsi/icon.png | Bin 0 -> 2215 bytes .../Structures/altar.rsi/icon_off.png | Bin 0 -> 608 bytes .../Entities/Structures/altar.rsi/meta.json | 29 ++ .../Entities/Structures/archives.rsi/icon.png | Bin 0 -> 1516 bytes .../Structures/archives.rsi/icon_off.png | Bin 0 -> 683 bytes .../Structures/archives.rsi/meta.json | 29 ++ .../Structures/barrier.rsi/barrier.png | Bin 0 -> 2271 bytes .../Entities/Structures/barrier.rsi/meta.json | 25 ++ .../Structures/cult_airlock.rsi/assembly.png | Bin 0 -> 1294 bytes .../Structures/cult_airlock.rsi/closed.png | Bin 0 -> 1326 bytes .../Structures/cult_airlock.rsi/closing.png | Bin 0 -> 3568 bytes .../Structures/cult_airlock.rsi/meta.json | 46 ++ .../Structures/cult_airlock.rsi/open.png | Bin 0 -> 442 bytes .../Structures/cult_airlock.rsi/opening.png | Bin 0 -> 3099 bytes .../Structures/cult_girder.rsi/icon.png | Bin 0 -> 657 bytes .../Structures/cult_girder.rsi/meta.json | 14 + .../Structures/cult_shield.rsi/icon.png | Bin 0 -> 3181 bytes .../Structures/cult_shield.rsi/meta.json | 26 ++ .../Entities/Structures/forge.rsi/icon.png | Bin 0 -> 1453 bytes .../Structures/forge.rsi/icon_off.png | Bin 0 -> 763 bytes .../Entities/Structures/forge.rsi/meta.json | 24 + .../Entities/Structures/pylon.rsi/icon.png | Bin 0 -> 1694 bytes .../Structures/pylon.rsi/icon_off.png | Bin 0 -> 1720 bytes .../Entities/Structures/pylon.rsi/meta.json | 53 +++ .../Entities/runic_metal.rsi/meta.json | 65 +++ .../Entities/runic_metal.rsi/runic.png | Bin 0 -> 1777 bytes .../Entities/runic_metal.rsi/runic_2.png | Bin 0 -> 1777 bytes .../Entities/runic_metal.rsi/runic_3.png | Bin 0 -> 1777 bytes .../Tiles/cult_tile/attributions.yml | 9 + .../BloodCult/Tiles/cult_tile/concealed.png | Bin 0 -> 591 bytes .../BloodCult/Tiles/cult_tile/cult.png | Bin 0 -> 1786 bytes .../WhiteDream/BloodCult/actions.rsi/back.png | Bin 0 -> 2177 bytes .../BloodCult/actions.rsi/barrier.png | Bin 0 -> 619 bytes .../BloodCult/actions.rsi/blood_barrage.png | Bin 0 -> 284 bytes .../BloodCult/actions.rsi/blood_rites.png | Bin 0 -> 819 bytes .../BloodCult/actions.rsi/blood_spells.png | Bin 0 -> 883 bytes .../actions.rsi/create_cult_floor.png | Bin 0 -> 1546 bytes .../BloodCult/actions.rsi/create_emp.png | Bin 0 -> 350 bytes .../actions.rsi/create_soul_stone.png | Bin 0 -> 410 bytes .../WhiteDream/BloodCult/actions.rsi/cuff.png | Bin 0 -> 425 bytes .../BloodCult/actions.rsi/cult_mark.png | Bin 0 -> 352 bytes .../BloodCult/actions.rsi/final_reckoning.png | Bin 0 -> 874 bytes .../WhiteDream/BloodCult/actions.rsi/gone.png | Bin 0 -> 2025 bytes .../actions.rsi/lesser_construct.png | Bin 0 -> 559 bytes .../BloodCult/actions.rsi/meta.json | 83 ++++ .../BloodCult/actions.rsi/phase_shift.png | Bin 0 -> 1378 bytes .../BloodCult/actions.rsi/revealing.png | Bin 0 -> 400 bytes .../BloodCult/actions.rsi/shackles.png | Bin 0 -> 643 bytes .../WhiteDream/BloodCult/actions.rsi/stun.png | Bin 0 -> 1428 bytes .../actions.rsi/summon_blood_spear.png | Bin 0 -> 756 bytes .../actions.rsi/summon_combat_equipment.png | Bin 0 -> 854 bytes .../BloodCult/actions.rsi/summon_dagger.png | Bin 0 -> 531 bytes .../actions.rsi/summon_force_wall.png | Bin 0 -> 856 bytes .../BloodCult/actions.rsi/teleport.png | Bin 0 -> 405 bytes .../BloodCult/actions.rsi/transmute.png | Bin 0 -> 641 bytes .../BloodCult/actions.rsi/veiling.png | Bin 0 -> 417 bytes .../BloodCult/cult_hud.rsi/cult_leader.png | Bin 0 -> 343 bytes .../BloodCult/cult_hud.rsi/cult_member.png | Bin 0 -> 322 bytes .../BloodCult/cult_hud.rsi/meta.json | 23 + .../BloodCult/mobs.rsi/artificer.png | Bin 0 -> 1380 bytes .../mobs.rsi/glow_artificer_cult.png | Bin 0 -> 644 bytes .../mobs.rsi/glow_artificer_holy.png | Bin 0 -> 654 bytes .../mobs.rsi/glow_harvester_cult.png | Bin 0 -> 1259 bytes .../mobs.rsi/glow_harvester_holy.png | Bin 0 -> 1283 bytes .../mobs.rsi/glow_juggernaut_cult.png | Bin 0 -> 794 bytes .../mobs.rsi/glow_juggernaut_holy.png | Bin 0 -> 804 bytes .../BloodCult/mobs.rsi/glow_wraith_cult.png | Bin 0 -> 777 bytes .../BloodCult/mobs.rsi/glow_wraith_holy.png | Bin 0 -> 782 bytes .../BloodCult/mobs.rsi/harvester.png | Bin 0 -> 2584 bytes .../BloodCult/mobs.rsi/juggernaut.png | Bin 0 -> 2489 bytes .../mobs.rsi/make_artificer_cult.png | Bin 0 -> 2889 bytes .../mobs.rsi/make_artificer_holy.png | Bin 0 -> 2904 bytes .../mobs.rsi/make_juggernaut_cult.png | Bin 0 -> 3258 bytes .../mobs.rsi/make_juggernaut_holy.png | Bin 0 -> 3278 bytes .../BloodCult/mobs.rsi/make_wraith_cult.png | Bin 0 -> 2678 bytes .../BloodCult/mobs.rsi/make_wraith_holy.png | Bin 0 -> 2685 bytes .../WhiteDream/BloodCult/mobs.rsi/meta.json | 401 +++++++++++++++++ .../BloodCult/mobs.rsi/phase_shift2_cult.png | Bin 0 -> 12974 bytes .../BloodCult/mobs.rsi/phase_shift2_holy.png | Bin 0 -> 13359 bytes .../BloodCult/mobs.rsi/phase_shift_cult.png | Bin 0 -> 12769 bytes .../BloodCult/mobs.rsi/phase_shift_holy.png | Bin 0 -> 13063 bytes .../BloodCult/mobs.rsi/shade_cult.png | Bin 0 -> 679 bytes .../BloodCult/mobs.rsi/shade_holy.png | Bin 0 -> 677 bytes .../WhiteDream/BloodCult/mobs.rsi/wraith.png | Bin 0 -> 1416 bytes .../WhiteDream/BloodCult/narsie.rsi/meta.json | 57 +++ .../BloodCult/narsie.rsi/narsie.png | Bin 0 -> 114966 bytes .../narsie.rsi/narsie_spawn_anim.png | Bin 0 -> 274429 bytes 408 files changed, 10442 insertions(+), 303 deletions(-) create mode 100644 Content.Client/ListViewSelector/ListViewSelectorBUI.cs create mode 100644 Content.Client/WhiteDream/BloodCult/BloodCultistSystem.cs create mode 100644 Content.Client/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs create mode 100644 Content.Client/WhiteDream/BloodCult/NameSelector/NameSelectorBUI.cs create mode 100644 Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs create mode 100644 Content.Client/WhiteDream/BloodCult/UI/AlignPylonConstruction.cs create mode 100644 Content.Client/WhiteDream/BloodCult/UI/BloodRitesUi.cs create mode 100644 Content.Server/Chemistry/ReagentEffects/PurifyEvil.cs create mode 100644 Content.Server/Whetstone/WhetstoneComponent.cs create mode 100644 Content.Server/Whetstone/WhetstoneSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/BloodCultChatSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseProviderComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Pylon/PylonSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Revive/ReviveRuneChargesProviderComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Spells/BaseCultSpellComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsHolderComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Spells/TwistedConstruction/TwistedConstructionSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactoryComponent.cs create mode 100644 Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs create mode 100644 Content.Shared/Actions/Events/ActionGettingDisabledEvent.cs create mode 100644 Content.Shared/ListViewSelector/ListViewSelectorEntry.cs create mode 100644 Content.Shared/Psionics/PsionicPowerPoolPrototype.cs create mode 100644 Content.Shared/Repulsor/RepulseComponent.cs create mode 100644 Content.Shared/Repulsor/RepulseOnTouchComponent.cs create mode 100644 Content.Shared/Repulsor/RepulseSystem.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultLeaderComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistRoleComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Components/PentagramComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Components/PylonComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Components/TwistedConstructionTargetComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Constructs/ConstructComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Items/CultItemComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorSystem.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Runes/ApocalypseRune.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Runes/RendingRune.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Spells/Events.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/UI/BloodRites.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/UI/NameSelector.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Visuals.cs create mode 100644 Resources/Audio/WhiteDream/BloodCult/blood.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/blood_cult_greeting.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/butcher.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/curse.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/enter_blood.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/magic.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/narsie_summoned.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/rending_draw_finished.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/rending_ritual.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/rites.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/smoke.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/startdraw.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/veilin.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/veilout.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/wand_teleport.ogg create mode 100644 Resources/Audio/WhiteDream/BloodCult/wraith_phase.ogg create mode 100644 Resources/Locale/en-US/white-dream/administration/antag.ftl create mode 100644 Resources/Locale/en-US/white-dream/alerts.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/gamerule.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/items/blood-rites.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/items/general.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/materials.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/runes.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/shuttle-curse.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/spells.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/structures/pylon.ftl create mode 100644 Resources/Locale/en-US/white-dream/cult/structures/timed-factory.ftl create mode 100644 Resources/Locale/en-US/white-dream/name-selector.ftl create mode 100644 Resources/Prototypes/Language/FactionSpecific/blood_cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Actions/cult_constructs.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Actions/cult_items.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Actions/cult_leader.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Clothing/Cult/armor.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Effects/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Items/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Materials/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/airlock.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/factories.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/pylon.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/walls.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Guns/Projectiles/magic.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Throwable/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/GameRules/roundstart.yml create mode 100644 Resources/Prototypes/WhiteDream/Objectives/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Pool/cult_powers_pool.yml create mode 100644 Resources/Prototypes/WhiteDream/Reagents/Materials/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Recipes/Construction/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Recipes/Construction/cult_graphs.yml create mode 100644 Resources/Prototypes/WhiteDream/Roles/Antags/blood-cultist.yml create mode 100644 Resources/Prototypes/WhiteDream/Stacks/Materials/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/StatusIcon/antag.yml create mode 100644 Resources/Prototypes/WhiteDream/ai_factions.yml create mode 100644 Resources/Prototypes/WhiteDream/alerts.yml create mode 100644 Resources/Prototypes/WhiteDream/game_presets.yml create mode 100644 Resources/Prototypes/WhiteDream/runeSelectors.yml create mode 100644 Resources/Prototypes/WhiteDream/tiles.yml create mode 100644 Resources/Textures/WhiteDream/BloodCult/Alerts/empowered.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/airlock_glow.rsi/doorglow.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/airlock_glow.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/bullet.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/cult_in.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/cult_out.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo1.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo2.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo3.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo4.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo5.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo6.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/tiles_spawn.rsi/floorglow.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/tiles_spawn.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/wallglow.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/bullet.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/bola.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/bola.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/construct_shell.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/construct_shell.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/mirror-inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/mirror-inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_blessed.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_glow.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/unlit-inhand-left.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/unlit-inhand-right.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/rune.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/rune_animated.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/barrier.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/blood_boil.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/empower.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/offering.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/revive.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/spirit_realm.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/strength.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/summon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/teleport.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult0.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult1.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult2.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult3.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult4.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult5.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult6.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult7.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/full.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/assembly.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/closed.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/closing.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/open.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/opening.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/cultgirder.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/barrier.rsi/barrier.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/barrier.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/assembly.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/closed.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/closing.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/open.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/opening.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/icon.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/icon_off.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_2.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_3.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/attributions.yml create mode 100644 Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/concealed.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/back.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/barrier.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_barrage.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_rites.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_spells.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/create_cult_floor.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/create_emp.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/create_soul_stone.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/cuff.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/cult_mark.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/final_reckoning.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/gone.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/lesser_construct.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/phase_shift.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/revealing.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/shackles.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/stun.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_blood_spear.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_combat_equipment.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_dagger.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_force_wall.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/teleport.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/transmute.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/veiling.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/cult_leader.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/cult_member.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/artificer.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_artificer_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_artificer_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_harvester_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_harvester_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_wraith_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_wraith_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/harvester.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/juggernaut.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_artificer_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_artificer_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_juggernaut_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_juggernaut_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/shade_cult.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/shade_holy.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/mobs.rsi/wraith.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/narsie.rsi/meta.json create mode 100644 Resources/Textures/WhiteDream/BloodCult/narsie.rsi/narsie.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/narsie.rsi/narsie_spawn_anim.png diff --git a/Content.Client/Antag/AntagStatusIconSystem.cs b/Content.Client/Antag/AntagStatusIconSystem.cs index 804ae21ad4a..3f0f391e48e 100644 --- a/Content.Client/Antag/AntagStatusIconSystem.cs +++ b/Content.Client/Antag/AntagStatusIconSystem.cs @@ -2,6 +2,9 @@ using Content.Shared.Revolutionary.Components; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Components; +using Content.Shared.WhiteDream.BloodCult.Constructs; using Content.Shared.Zombies; using Robust.Client.Player; using Robust.Shared.Prototypes; @@ -23,6 +26,10 @@ public override void Initialize() SubscribeLocalEvent(GetIcon); SubscribeLocalEvent(GetIcon); SubscribeLocalEvent(GetIcon); + + SubscribeLocalEvent(GetIcon); + SubscribeLocalEvent(GetBloodCultIcon); + SubscribeLocalEvent(GetIcon); } /// @@ -39,7 +46,6 @@ private void GetIcon(EntityUid uid, T comp, ref GetStatusIconsEvent ev) where ev.StatusIcons.Add(_prototype.Index(comp.StatusIcon)); } - /// /// Adds the Rev Icon on an entity if the player is supposed to see it. This additional function is needed to deal /// with a special case where if someone is a head rev we only want to display the headrev icon. @@ -50,6 +56,13 @@ private void GetRevIcon(EntityUid uid, RevolutionaryComponent comp, ref GetStatu return; GetIcon(uid, comp, ref ev); + } + private void GetBloodCultIcon(EntityUid uid, BloodCultistComponent comp, ref GetStatusIconsEvent ev) + { + if (HasComp(uid)) + return; + + GetIcon(uid, comp, ref ev); } } diff --git a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs new file mode 100644 index 00000000000..f02bab512e8 --- /dev/null +++ b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs @@ -0,0 +1,111 @@ +using Content.Client.Lathe.UI; +using Content.Client.UserInterface.Controls; +using Content.Shared.ListViewSelector; +using JetBrains.Annotations; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Prototypes; + +// ReSharper disable InconsistentNaming + +namespace Content.Client.ListViewSelector; + +[UsedImplicitly] +public sealed class ListViewSelectorBUI(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey) +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private FancyWindow _window = new(); + private BoxContainer? _itemsContainer; + private Dictionary _metaData = new(); + + protected override void Open() + { + _window = FormWindow(); + _window.OnClose += Close; + _window.OpenCentered(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + if (state is not ListViewSelectorState listViewSelectorState) + return; + + PopulateWindow(listViewSelectorState.Items); + _metaData = listViewSelectorState.MetaData; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + _window.Close(); + } + + private FancyWindow FormWindow() + { + var window = new FancyWindow + { + HorizontalExpand = true, + VerticalExpand = true, + MinWidth = 350, + MinHeight = 400, + Title = Loc.GetString("list-view-window-default-title") + }; + + var scrollContainer = new ScrollContainer + { + HorizontalExpand = true, + VerticalExpand = true + }; + + var itemsContainer = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Vertical + }; + + scrollContainer.AddChild(itemsContainer); + window.AddChild(scrollContainer); + + _itemsContainer = itemsContainer; + + return window; + } + + private void PopulateWindow(List items) + { + if (_itemsContainer is null) + return; + + _itemsContainer.Children.Clear(); + + foreach (var item in items) + { + var itemName = item.Name; + var itemDesc = item.Description; + if (_prototypeManager.TryIndex(item.Id, out var itemPrototype)) + { + itemName = itemPrototype.Name; + itemDesc = itemPrototype.Description; + } + + var button = new Button + { + Text = itemName, + }; + + if (!string.IsNullOrEmpty(itemDesc)) + button.TooltipSupplier = _ => new RecipeTooltip(itemDesc); + + button.OnButtonUp += _ => + { + var msg = new ListViewItemSelectedMessage(item, items.IndexOf(item), _metaData); + SendMessage(msg); + Close(); + }; + + _itemsContainer.AddChild(button); + } + } +} diff --git a/Content.Client/ShortConstruction/ShortConstructionSystem.cs b/Content.Client/ShortConstruction/ShortConstructionSystem.cs index 492411977b7..1b4b324add4 100644 --- a/Content.Client/ShortConstruction/ShortConstructionSystem.cs +++ b/Content.Client/ShortConstruction/ShortConstructionSystem.cs @@ -1,4 +1,5 @@ using Content.Client.Construction; +// using Content.Client.WhiteDream.BloodCult.UI; using Content.Shared.Construction.Prototypes; using Content.Shared.RadialSelector; using Content.Shared.ShortConstruction; @@ -36,11 +37,13 @@ private void OnItemRecieved(Entity ent, ref RadialSe return; } + var hijack = new ConstructionPlacementHijack(_construction, prototype); + _placement.BeginPlacing(new PlacementInformation { IsTile = false, PlacementOption = prototype.PlacementMode }, - new ConstructionPlacementHijack(_construction, prototype)); + hijack); } } diff --git a/Content.Client/WhiteDream/BloodCult/BloodCultistSystem.cs b/Content.Client/WhiteDream/BloodCult/BloodCultistSystem.cs new file mode 100644 index 00000000000..b732df9801c --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/BloodCultistSystem.cs @@ -0,0 +1,73 @@ +using System.Numerics; +using Content.Shared.Antag; +using Content.Shared.Ghost; +using Content.Shared.StatusIcon.Components; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Components; +using Content.Shared.WhiteDream.BloodCult.Constructs; +using Robust.Client.GameObjects; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Client.WhiteDream.BloodCult; + +public sealed class BloodCultistSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnPentagramAdded); + SubscribeLocalEvent(OnPentagramRemoved); + + SubscribeLocalEvent(OnCanShowCultIcon); + SubscribeLocalEvent(OnCanShowCultIcon); + SubscribeLocalEvent(OnCanShowCultIcon); + } + + private void OnPentagramAdded(EntityUid uid, PentagramComponent component, ComponentStartup args) + { + if (!TryComp(uid, out var sprite) || sprite.LayerMapTryGet(PentagramKey.Key, out _)) + return; + + var adj = sprite.Bounds.Height / 2 + 1.0f / 32 * 10.0f; + + var randomState = _random.Pick(component.States); + + var layer = sprite.AddLayer(new SpriteSpecifier.Rsi(component.RsiPath, randomState)); + + sprite.LayerMapSet(PentagramKey.Key, layer); + sprite.LayerSetOffset(layer, new Vector2(0.0f, adj)); + } + + private void OnPentagramRemoved(EntityUid uid, PentagramComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var sprite) || !sprite.LayerMapTryGet(PentagramKey.Key, out var layer)) + return; + + sprite.RemoveLayer(layer); + } + + /// + /// Determine whether a client should display the cult icon. + /// + private void OnCanShowCultIcon(EntityUid uid, T comp, ref CanDisplayStatusIconsEvent args) + where T : IAntagStatusIconComponent + { + if (!CanDisplayIcon(args.User, comp.IconVisibleToGhost)) + args.Cancelled = true; + } + + /// + /// The criteria that determine whether a client should see Cult/Cult leader icons. + /// + private bool CanDisplayIcon(EntityUid? uid, bool visibleToGhost) + { + if (HasComp(uid) || HasComp(uid) || + HasComp(uid)) + return true; + + return visibleToGhost && HasComp(uid); + } +} diff --git a/Content.Client/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs b/Content.Client/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs new file mode 100644 index 00000000000..8b92fb7da89 --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs @@ -0,0 +1,23 @@ +using Content.Client.Light.Components; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.Items.VoidTorch; +using Robust.Client.GameObjects; + +namespace Content.Client.WhiteDream.BloodCult.Items.VoidTorch; + +public sealed class VoidTorchSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, + VoidTorchComponent component, + ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + if (!AppearanceSystem.TryGetData(uid, GenericCultVisuals.State, out var state) + || !TryComp(uid, out var lightBehaviour)) + return; + + lightBehaviour.StopLightBehaviour(); + lightBehaviour.StartLightBehaviour(state ? component.TurnOnLightBehaviour : component.TurnOffLightBehaviour); + } +} diff --git a/Content.Client/WhiteDream/BloodCult/NameSelector/NameSelectorBUI.cs b/Content.Client/WhiteDream/BloodCult/NameSelector/NameSelectorBUI.cs new file mode 100644 index 00000000000..6d3788f775c --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/NameSelector/NameSelectorBUI.cs @@ -0,0 +1,67 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.WhiteDream.BloodCult.UI; +using JetBrains.Annotations; +using Robust.Client.UserInterface.Controls; + +// ReSharper disable InconsistentNaming + +namespace Content.Client.WhiteDream.BloodCult.NameSelector; + +[UsedImplicitly] +public sealed class NameSelectorBUI(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey) +{ + private readonly FancyWindow _window = new(); + + protected override void Open() + { + base.Open(); + + FormWindow(); + _window.OpenCentered(); + _window.OnClose += Close; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + _window.Close(); + } + + private void FormWindow() + { + var container = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Vertical + }; + + var label = new Label + { + Text = Loc.GetString("name-selector-title") + }; + + var lineEdit = new LineEdit + { + HorizontalExpand = true + }; + + var button = new Button + { + Text = Loc.GetString("name-selector-accept-button") + }; + + button.OnButtonUp += _ => + { + var msg = new NameSelectedMessage(lineEdit.Text); + SendMessage(msg); + Close(); + }; + + container.AddChild(label); + container.AddChild(lineEdit); + container.AddChild(button); + + _window.AddChild(container); + } +} diff --git a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs new file mode 100644 index 00000000000..ed0f27bc5da --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs @@ -0,0 +1,108 @@ +using System.Linq; +using System.Numerics; +using Content.Client.UserInterface.Controls; +using Content.Shared.WhiteDream.BloodCult.Runes; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Prototypes; + +// ReSharper disable InconsistentNaming + +namespace Content.Client.WhiteDream.BloodCult.Runes.UI; + +[UsedImplicitly] +public sealed class RuneDrawerBUI : BoundUserInterface +{ + [Dependency] private readonly EntityManager _entManager = default!; + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + + private readonly SpriteSystem _spriteSystem; + + private RadialMenu? _menu; + + public RuneDrawerBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + _spriteSystem = _entManager.System(); + } + + protected override void Open() + { + _menu = FormMenu(); + _menu.OnClose += Close; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (disposing) + _menu?.Dispose(); + } + + private RadialMenu FormMenu() + { + var menu = new RadialMenu + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; + + if (!_entManager.HasComponent(Owner)) + return menu; + + var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + + var mainContainer = new RadialContainer + { + Radius = 36f / (runeSelectorArray.Length == 1 + ? 1 + : MathF.Sin(MathF.PI / runeSelectorArray.Length)) + }; + + foreach (var runeSelector in runeSelectorArray) + { + if (!_protoManager.TryIndex(runeSelector.Prototype, out var proto)) + continue; + + var itemSize = new Vector2(64f, 64f); + var button = new RadialMenuTextureButton + { + ToolTip = Loc.GetString(proto.Name), + StyleClasses = { "RadialMenuButton" }, + SetSize = itemSize + }; + + var runeIcon = _spriteSystem.Frame0(proto); + var runeScale = itemSize / runeIcon.Size; + + var texture = new TextureRect + { + VerticalAlignment = Control.VAlignment.Center, + HorizontalAlignment = Control.HAlignment.Center, + Texture = _spriteSystem.Frame0(proto), + TextureScale = runeScale + }; + + button.AddChild(texture); + + button.OnButtonUp += _ => + { + SendMessage(new RuneDrawerSelectedMessage(runeSelector)); + Close(); + }; + + mainContainer.AddChild(button); + } + + menu.AddChild(mainContainer); + return menu; + } +} diff --git a/Content.Client/WhiteDream/BloodCult/UI/AlignPylonConstruction.cs b/Content.Client/WhiteDream/BloodCult/UI/AlignPylonConstruction.cs new file mode 100644 index 00000000000..6749b3f0952 --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/UI/AlignPylonConstruction.cs @@ -0,0 +1,33 @@ +using System.Linq; +using Content.Shared.WhiteDream.BloodCult.Components; +using Robust.Client.Placement; +using Robust.Client.Placement.Modes; +using Robust.Shared.Map; + +namespace Content.Client.WhiteDream.BloodCult.UI; + +public sealed class AlignPylonConstruction : SnapgridCenter +{ + [Dependency] private readonly IEntityManager _entityManager = default!; + + private readonly EntityLookupSystem _lookup; + + private const float PylonLookupRange = 10; + + public AlignPylonConstruction(PlacementManager pMan) : base(pMan) + { + IoCManager.InjectDependencies(this); + _lookup = _entityManager.System(); + } + + public override bool IsValidPosition(EntityCoordinates position) + { + return base.IsValidPosition(position) && !CheckForOtherPylons(position, PylonLookupRange); + } + + private bool CheckForOtherPylons(EntityCoordinates coordinates, float range) + { + var entities = _lookup.GetEntitiesInRange(coordinates, range); + return entities.Any(_entityManager.HasComponent); + } +} diff --git a/Content.Client/WhiteDream/BloodCult/UI/BloodRitesUi.cs b/Content.Client/WhiteDream/BloodCult/UI/BloodRitesUi.cs new file mode 100644 index 00000000000..9a221b025a5 --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/UI/BloodRitesUi.cs @@ -0,0 +1,133 @@ +using System.Numerics; +using Content.Client.Popups; +using Content.Client.UserInterface.Controls; +using Content.Shared.FixedPoint; +using Content.Shared.WhiteDream.BloodCult.UI; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Prototypes; + +namespace Content.Client.WhiteDream.BloodCult.UI; + +[UsedImplicitly] +public sealed class BloodRitesUi : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + + private readonly PopupSystem _popup; + private readonly SpriteSystem _sprite; + private readonly Vector2 _itemSize = Vector2.One * 64; + + private RadialMenu? _menu; + private FixedPoint2 _storedBlood; + + public BloodRitesUi(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + _sprite = _entManager.System(); + _popup = _entManager.System(); + } + + protected override void Open() + { + base.Open(); + _menu = new RadialMenu + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; + + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); + _menu.OnClose += Close; + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is not BloodRitesUiState ritesState) + return; + + CreateMenu(ritesState.Crafts); + _storedBlood = ritesState.StoredBlood; + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (disposing && _menu is not null) + _menu.Dispose(); + } + + private void CreateMenu(Dictionary crafts) + { + if (_menu is null) + return; + + var container = new RadialContainer + { + Name = "Blood Rites", + Radius = 64f + 32f * MathF.Log(crafts.Count), + }; + + _menu.AddChild(container); + + foreach (var (protoId, cost) in crafts) + { + if (!_protoManager.TryIndex(protoId, out var proto)) + return; + + var name = $"{cost}: {proto.Name}"; + var button = CreateButton(name, _sprite.Frame0(proto)); + button.OnButtonUp += _ => + { + TryCraft(protoId, cost); + }; + + container.AddChild(button); + } + } + + private RadialMenuTextureButton CreateButton(string name, Texture icon) + { + var button = new RadialMenuTextureButton + { + ToolTip = Loc.GetString(name), + StyleClasses = { "RadialMenuButton" }, + SetSize = _itemSize + }; + + var iconScale = _itemSize / icon.Size; + var texture = new TextureRect + { + VerticalAlignment = Control.VAlignment.Center, + HorizontalAlignment = Control.HAlignment.Center, + Texture = icon, + TextureScale = iconScale + }; + + button.AddChild(texture); + return button; + } + + private void TryCraft(EntProtoId protId, FixedPoint2 cost) + { + if (cost > _storedBlood) + { + _popup.PopupEntity(Loc.GetString("blood-rites-not-enough-blood"), Owner); + return; + } + + _storedBlood -= cost; + var msg = new BloodRitesMessage(protId); + SendPredictedMessage(msg); + } +} diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs index 4103b8a8aa7..d9d7943c45c 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs @@ -1,6 +1,7 @@ using Content.Server.Administration.Commands; using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Server.Zombies; using Content.Shared.Administration; using Content.Shared.Database; @@ -30,6 +31,9 @@ public sealed partial class AdminVerbSystem [ValidatePrototypeId] private const string DefaultThiefRule = "Thief"; + [ValidatePrototypeId] + private const string DefaultBloodCultRule = "BloodCult"; + [ValidatePrototypeId] private const string PirateGearId = "PirateGear"; @@ -134,5 +138,19 @@ private void AddAntagVerbs(GetVerbsEvent args) Message = Loc.GetString("admin-verb-make-thief"), }; args.Verbs.Add(thief); + + Verb cultist = new() + { + Text = Loc.GetString("admin-verb-text-make-blood-cultist"), + Category = VerbCategory.Antag, + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Weapons/Melee/cult_dagger.rsi"), "icon"), + Act = () => + { + _antag.ForceMakeAntag(player, DefaultBloodCultRule); + }, + Impact = LogImpact.High, + Message = Loc.GetString("admin-verb-make-blood-cultist"), + }; + args.Verbs.Add(cultist); } } diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 095018f9b9a..54e51d7e35e 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -360,7 +360,8 @@ public void SetBloodMaxVolume(EntityUid uid, FixedPoint2 volume, BloodstreamComp /// /// Attempts to modify the blood level of this entity directly. /// - public bool TryModifyBloodLevel(EntityUid uid, FixedPoint2 amount, BloodstreamComponent? component = null) + public bool TryModifyBloodLevel(EntityUid uid, FixedPoint2 amount, BloodstreamComponent? component = null, + bool createPuddle = true) { if (!Resolve(uid, ref component, logMissing: false) || !_solutionContainerSystem.ResolveSolution(uid, component.BloodSolutionName, ref component.BloodSolution)) @@ -381,7 +382,7 @@ public bool TryModifyBloodLevel(EntityUid uid, FixedPoint2 amount, BloodstreamCo tempSolution.AddSolution(newSol, _prototypeManager); - if (tempSolution.Volume > component.BleedPuddleThreshold) + if (tempSolution.Volume > component.BleedPuddleThreshold && createPuddle) { // Pass some of the chemstream into the spilled blood. if (_solutionContainerSystem.ResolveSolution(uid, component.ChemicalSolutionName, ref component.ChemicalSolution)) diff --git a/Content.Server/Chemistry/ReagentEffects/PurifyEvil.cs b/Content.Server/Chemistry/ReagentEffects/PurifyEvil.cs new file mode 100644 index 00000000000..896ecf2eac5 --- /dev/null +++ b/Content.Server/Chemistry/ReagentEffects/PurifyEvil.cs @@ -0,0 +1,49 @@ +using System.Threading; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Jittering; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; + +namespace Content.Server.Chemistry.ReagentEffects; + +[UsedImplicitly] +public sealed partial class PurifyEvil : ReagentEffect +{ + [DataField] + public float Amplitude = 10.0f; + + [DataField] + public float Frequency = 4.0f; + + [DataField] + public TimeSpan Time = TimeSpan.FromSeconds(30.0f); + + protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + return Loc.GetString("reagent-effect-guidebook-purify-evil"); + } + + public override void Effect(ReagentEffectArgs args) + { + var entityManager = args.EntityManager; + var uid = args.SolutionEntity; + if (!entityManager.TryGetComponent(uid, out BloodCultistComponent? bloodCultist) || + bloodCultist.DeconvertToken is not null) + { + return; + } + + entityManager.System().DoJitter(uid, Time, true, Amplitude, Frequency); + + bloodCultist.DeconvertToken = new CancellationTokenSource(); + Robust.Shared.Timing.Timer.Spawn(Time, () => DeconvertCultist(uid, entityManager), + bloodCultist.DeconvertToken.Token); + } + + private void DeconvertCultist(EntityUid uid, IEntityManager entityManager) + { + if (entityManager.HasComponent(uid)) + entityManager.RemoveComponent(uid); + } +} diff --git a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs b/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs index 5117d67e944..8dd3d56a1ee 100644 --- a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs +++ b/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs @@ -11,6 +11,7 @@ using Content.Shared.IdentityManagement; using Content.Shared.StepTrigger.Systems; using Content.Shared.Throwing; +using Content.Shared.Whitelist; namespace Content.Server.Ensnaring; @@ -20,6 +21,7 @@ public sealed partial class EnsnareableSystem [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; public void InitializeEnsnaring() { @@ -70,8 +72,9 @@ private void OnThrowHit(EntityUid uid, EnsnaringComponent component, ThrowDoHitE /// The ensnaring component public void TryEnsnare(EntityUid target, EntityUid ensnare, EnsnaringComponent component) { - //Don't do anything if they don't have the ensnareable component. - if (!TryComp(target, out var ensnareable)) + //Don't do anything if they don't have the ensnareable component or should be ignored. + if (!TryComp(target, out var ensnareable) || + component.IgnoredTargets is not null && _entityWhitelist.IsValid(component.IgnoredTargets, target)) return; var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count(); diff --git a/Content.Server/Magic/MagicSystem.cs b/Content.Server/Magic/MagicSystem.cs index c25aada3a07..5997c56e240 100644 --- a/Content.Server/Magic/MagicSystem.cs +++ b/Content.Server/Magic/MagicSystem.cs @@ -18,6 +18,6 @@ public override void Initialize() private void OnSpellSpoken(ref SpeakSpellEvent args) { - _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), InGameICChatType.Speak, false); + _chat.TrySendInGameICMessage(args.Performer, Loc.GetString(args.Speech), args.ChatType, false); } } diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs index 0866b975c2b..fe05f69d4ab 100644 --- a/Content.Server/RoundEnd/RoundEndSystem.cs +++ b/Content.Server/RoundEnd/RoundEndSystem.cs @@ -359,6 +359,22 @@ private void ActivateCooldown() }, _cooldownTokenSource.Token); } + public void DelayShuttle(TimeSpan delay) + { + if (_countdownTokenSource == null || !ExpectedCountdownEnd.HasValue) + return; + + var countdown = ExpectedCountdownEnd.Value - _gameTiming.CurTime + delay; + if (countdown.TotalSeconds < 0) + return; + + ExpectedCountdownEnd = _gameTiming.CurTime + countdown; + _countdownTokenSource.Cancel(); + _countdownTokenSource = new CancellationTokenSource(); + + Timer.Spawn(countdown, _shuttle.CallEmergencyShuttle, _countdownTokenSource.Token); + } + public override void Update(float frameTime) { // Check if we should auto-call. diff --git a/Content.Server/Stunnable/Components/StunOnCollideComponent.cs b/Content.Server/Stunnable/Components/StunOnCollideComponent.cs index 1ce1cbea575..cec99f0df72 100644 --- a/Content.Server/Stunnable/Components/StunOnCollideComponent.cs +++ b/Content.Server/Stunnable/Components/StunOnCollideComponent.cs @@ -1,32 +1,40 @@ -namespace Content.Server.Stunnable.Components +using Content.Server.Stunnable.Systems; +using Content.Shared.Whitelist; + +namespace Content.Server.Stunnable.Components; + +/// +/// Adds stun when it collides with an entity +/// +[RegisterComponent, Access(typeof(StunOnCollideSystem))] +public sealed partial class StunOnCollideComponent : Component { - /// - /// Adds stun when it collides with an entity - /// - [RegisterComponent, Access(typeof(StunOnCollideSystem))] - public sealed partial class StunOnCollideComponent : Component - { - // TODO: Can probably predict this. + // TODO: Can probably predict this. - // See stunsystem for what these do - [DataField("stunAmount")] - public int StunAmount; + [DataField] + public TimeSpan StunAmount = TimeSpan.FromSeconds(5); - [DataField("knockdownAmount")] - public int KnockdownAmount; + [DataField] + public TimeSpan KnockdownAmount = TimeSpan.FromSeconds(5); - [DataField("slowdownAmount")] - public int SlowdownAmount; + [DataField] + public TimeSpan SlowdownAmount = TimeSpan.FromSeconds(10); - [DataField("walkSpeedMultiplier")] - public float WalkSpeedMultiplier = 1f; + [DataField] + public float WalkSpeedMultiplier = 1f; - [DataField("runSpeedMultiplier")] - public float RunSpeedMultiplier = 1f; + [DataField] + public float RunSpeedMultiplier = 1f; - /// - /// Fixture we track for the collision. - /// - [DataField("fixture")] public string FixtureID = "projectile"; - } + /// + /// Fixture we track for the collision. + /// + [DataField] + public string FixtureId = "projectile"; + + /// + /// Entities excluded from collision check. + /// + [DataField] + public EntityWhitelist? Blacklist; } diff --git a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs index 52e3cab79c5..b7c23477074 100644 --- a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs +++ b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs @@ -1,50 +1,51 @@ using Content.Server.Stunnable.Components; -using Content.Shared.Standing; using Content.Shared.StatusEffect; using JetBrains.Annotations; -using Robust.Shared.Physics.Dynamics; using Content.Shared.Throwing; +using Content.Shared.Whitelist; using Robust.Shared.Physics.Events; -namespace Content.Server.Stunnable +namespace Content.Server.Stunnable.Systems; + +[UsedImplicitly] +internal sealed class StunOnCollideSystem : EntitySystem { - [UsedImplicitly] - internal sealed class StunOnCollideSystem : EntitySystem + [Dependency] private readonly StunSystem _stunSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(HandleCollide); + SubscribeLocalEvent(HandleThrow); + } + + private void TryDoCollideStun(Entity ent, EntityUid target) { - [Dependency] private readonly StunSystem _stunSystem = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(HandleCollide); - SubscribeLocalEvent(HandleThrow); - } - - private void TryDoCollideStun(EntityUid uid, StunOnCollideComponent component, EntityUid target) - { - - if (EntityManager.TryGetComponent(target, out var status)) - { - _stunSystem.TryStun(target, TimeSpan.FromSeconds(component.StunAmount), true, status); - - _stunSystem.TryKnockdown(target, TimeSpan.FromSeconds(component.KnockdownAmount), true, - status); - - _stunSystem.TrySlowdown(target, TimeSpan.FromSeconds(component.SlowdownAmount), true, - component.WalkSpeedMultiplier, component.RunSpeedMultiplier, status); - } - } - private void HandleCollide(EntityUid uid, StunOnCollideComponent component, ref StartCollideEvent args) - { - if (args.OurFixtureId != component.FixtureID) - return; - - TryDoCollideStun(uid, component, args.OtherEntity); - } - - private void HandleThrow(EntityUid uid, StunOnCollideComponent component, ThrowDoHitEvent args) - { - TryDoCollideStun(uid, component, args.Target); - } + if (!EntityManager.TryGetComponent(target, out var status) || + ent.Comp.Blacklist is { } blacklist && _entityWhitelist.IsValid(blacklist, target)) + return; + + _stunSystem.TryStun(target, ent.Comp.StunAmount, true, status); + _stunSystem.TryKnockdown(target, ent.Comp.KnockdownAmount, true, status); + + _stunSystem.TrySlowdown( + target, + ent.Comp.SlowdownAmount, + true, + ent.Comp.WalkSpeedMultiplier, + ent.Comp.RunSpeedMultiplier, + status); } + + private void HandleCollide(Entity ent, ref StartCollideEvent args) + { + if (args.OurFixtureId != ent.Comp.FixtureId) + return; + + TryDoCollideStun(ent, args.OtherEntity); + } + + private void HandleThrow(Entity ent, ref ThrowDoHitEvent args) => + TryDoCollideStun(ent, args.Target); } diff --git a/Content.Server/Whetstone/WhetstoneComponent.cs b/Content.Server/Whetstone/WhetstoneComponent.cs new file mode 100644 index 00000000000..59fab2e04bf --- /dev/null +++ b/Content.Server/Whetstone/WhetstoneComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Content.Shared.Whitelist; +using Robust.Shared.Audio; + +namespace Content.Server.Whetstone; + +[RegisterComponent] +public sealed partial class WhetstoneComponent : Component +{ + [DataField] + public int Uses = 1; + + [DataField] + public DamageSpecifier DamageIncrease = new() + { + DamageDict = new Dictionary + { + ["Slash"] = 4 + } + }; + + [DataField] + public float MaximumIncrease = 25; + + [DataField] + public EntityWhitelist Whitelist = new(); + + [DataField] + public EntityWhitelist Blacklist = new(); + + [DataField] + public SoundSpecifier SharpenAudio = new SoundPathSpecifier("/Audio/SimpleStation14/Items/Handling/sword_sheath.ogg"); +} diff --git a/Content.Server/Whetstone/WhetstoneSystem.cs b/Content.Server/Whetstone/WhetstoneSystem.cs new file mode 100644 index 00000000000..e0d55a8a6a9 --- /dev/null +++ b/Content.Server/Whetstone/WhetstoneSystem.cs @@ -0,0 +1,52 @@ +using Content.Shared.Interaction; +using Content.Shared.Item; +using Content.Shared.Weapons.Melee; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.Whitelist; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Player; + +namespace Content.Server.Whetstone; + +public sealed class WhetstoneSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterInteract); + } + + private void OnAfterInteract(Entity stone, ref AfterInteractEvent args) + { + if (args.Handled || args.Target is not { } target || stone.Comp.Uses <= 0 || + !TryComp(target, out MeleeWeaponComponent? meleeWeapon) || + !HasComp(target) || // We don't want to sharpen felinids or vulps + _entityWhitelist.IsValid(stone.Comp.Blacklist, target) || + !_entityWhitelist.IsValid(stone.Comp.Whitelist, target)) + return; + + foreach (var (damageTypeId, value) in stone.Comp.DamageIncrease.DamageDict) + { + if (!meleeWeapon.Damage.DamageDict.TryGetValue(damageTypeId, out var defaultDamage) || + defaultDamage > stone.Comp.MaximumIncrease) + continue; + + var newDamage = defaultDamage + value; + if (newDamage > stone.Comp.MaximumIncrease) + newDamage = stone.Comp.MaximumIncrease; + + meleeWeapon.Damage.DamageDict[damageTypeId] = newDamage; + } + + _audio.PlayEntity(stone.Comp.SharpenAudio, Filter.Pvs(target), target, true); + stone.Comp.Uses--; + if (stone.Comp.Uses <= 0) + _appearance.SetData(stone, GenericCultVisuals.State, false); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileComponent.cs b/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileComponent.cs new file mode 100644 index 00000000000..931eb247f2e --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.WhiteDream.BloodCult.BloodBoilProjectile; + +[RegisterComponent] +public sealed partial class BloodBoilProjectileComponent : Component +{ + public EntityUid Target; +} diff --git a/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileSystem.cs new file mode 100644 index 00000000000..7054416253b --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/BloodBoilProjectile/BloodBoilProjectileSystem.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Physics.Events; + +namespace Content.Server.WhiteDream.BloodCult.BloodBoilProjectile; + +public sealed class BloodBoilProjectileSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(CheckCollision); + } + + private void CheckCollision(Entity ent, ref PreventCollideEvent args) + { + if (args.OtherEntity != ent.Comp.Target) + args.Cancelled = true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/BloodCultChatSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodCultChatSystem.cs new file mode 100644 index 00000000000..5a9e2055c1f --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/BloodCultChatSystem.cs @@ -0,0 +1,70 @@ +using System.Linq; +using Content.Server.Administration.Managers; +using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; +using Content.Server.Language; +using Content.Shared.Chat; +using Content.Shared.Language; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Shared.Network; +using Robust.Shared.Player; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult; + +public sealed class BloodCultChatSystem : EntitySystem +{ + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + + [Dependency] private readonly LanguageSystem _language = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSpeak); + } + + private void OnSpeak(EntityUid uid, BloodCultistComponent component, EntitySpokeEvent args) + { + if (args.Source != uid || args.Language.ID != component.CultLanguageId || args.IsWhisper) + return; + + SendMessage(args.Source, args.Message, false, args.Language); + } + + private void SendMessage(EntityUid source, string message, bool hideChat, LanguagePrototype language) + { + var clients = GetClients(language.ID); + var playerName = Name(source); + var wrappedMessage = Loc.GetString("chat-manager-send-cult-chat-wrap-message", + ("channelName", Loc.GetString("chat-manager-cult-channel-name")), + ("player", playerName), + ("message", FormattedMessage.EscapeText(message))); + + _chatManager.ChatMessageToMany(ChatChannel.Telepathic, + message, + wrappedMessage, + source, + hideChat, + true, + clients.ToList(), + language.SpeechOverride.Color); + } + + private IEnumerable GetClients(string languageId) + { + return Filter.Empty() + .AddWhereAttachedEntity(entity => CanHearBloodCult(entity, languageId)) + .Recipients + .Union(_adminManager.ActiveAdmins) + .Select(p => p.Channel); + } + + private bool CanHearBloodCult(EntityUid entity, string languageId) + { + var understood = _language.GetUnderstoodLanguages(entity); + return understood.Any(language => language.Id == languageId); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs new file mode 100644 index 00000000000..09e92b31c5a --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs @@ -0,0 +1,66 @@ +using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult.BloodRites; + +[RegisterComponent] +public sealed partial class BloodRitesAuraComponent : Component +{ + /// + /// Total blood stored in the Aura. + /// + [DataField] + public FixedPoint2 StoredBlood; + + /// + /// Ratio which is applied to calculate the amount to regenerate blood in someone. + /// + [DataField] + public float BloodRegenerationRatio = 0.1f; + + /// + /// Ratio which is applied to calculate the amount to heal yourself. + /// + [DataField] + public float SelfHealRatio = 2f; + + /// + /// The amount of blood that is extracted from a person on using it on them. + /// + [DataField] + public FixedPoint2 BloodExtractionAmount = 30f; + + /// + /// Time required to extract blood of something with bloodstream. + /// + [DataField] + public TimeSpan BloodExtractionTime = TimeSpan.FromSeconds(5); + + /// + /// How much is consumed on healing. + /// + [DataField] + public FixedPoint2 HealingCost = 40; + + /// + /// How much damage each use of the hand will heal. Will heal literally anything. Nar'sien magic, you know. + /// + [DataField] + public FixedPoint2 TotalHealing = 20; + + [DataField] + public SoundSpecifier BloodRitesAudio = new SoundPathSpecifier( + new ResPath("/Audio/WhiteDream/BloodCult/rites.ogg"), + AudioParams.Default.WithVolume(-3)); + + [DataField] + public Dictionary Crafts = new() + { + ["BloodSpear"] = 300 + }; + + public DoAfterId? ExtractDoAfterId; +} diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs new file mode 100644 index 00000000000..76adc9bde89 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs @@ -0,0 +1,237 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.DoAfter; +using Content.Server.Hands.Systems; +using Content.Server.Popups; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Interaction; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.UserInterface; +using Content.Shared.Weapons.Melee.Events; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Content.Shared.WhiteDream.BloodCult.UI; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.BloodRites; + +public sealed class BloodRitesSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _protoManager = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly BloodstreamSystem _bloodstream = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + private readonly ProtoId _bloodProto = "Blood"; + + public override void Initialize() + { + SubscribeLocalEvent(OnExamining); + + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnDoAfter); + + SubscribeLocalEvent(OnCultistHit); + + SubscribeLocalEvent(BeforeUiOpen); + SubscribeLocalEvent(OnRitesMessage); + } + + private void OnExamining(Entity rites, ref ExaminedEvent args) => + args.PushMarkup(Loc.GetString("blood-rites-stored-blood", ("amount", rites.Comp.StoredBlood.ToString()))); + + private void OnAfterInteract(Entity rites, ref AfterInteractEvent args) + { + if (!args.Target.HasValue || args.Handled || args.Target == args.User || + HasComp(args.Target)) + return; + + if (HasComp(args.Target)) + { + if (rites.Comp.ExtractDoAfterId.HasValue) + return; + + var ev = new BloodRitesExtractDoAfterEvent(); + var time = rites.Comp.BloodExtractionTime; + var doAfterArgs = new DoAfterArgs(EntityManager, args.User, time, ev, rites, args.Target) + { + BreakOnUserMove = true, + BreakOnTargetMove = true, + BreakOnDamage = true + }; + if (_doAfter.TryStartDoAfter(doAfterArgs, out var doAfterId)) + rites.Comp.ExtractDoAfterId = doAfterId; + + args.Handled = true; + return; + } + + if (!TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) // please send help + return; + + foreach (var (_, solution) in _solutionContainer.EnumerateSolutions((args.Target.Value, solutionContainer))) + { + // I don't think something will ever have more than 1000 blood units in it's solution... + rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); + _solutionContainer.UpdateChemicals(solution); + break; + } + + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + args.Handled = true; + } + + private void OnDoAfter(Entity rites, ref BloodRitesExtractDoAfterEvent args) + { + rites.Comp.ExtractDoAfterId = null; + if (args.Cancelled || args.Handled || args.Target is not { } target || + !TryComp(target, out BloodstreamComponent? bloodstream) || bloodstream.BloodSolution is not { } solution) + return; + + var extracted = solution.Comp.Solution.RemoveReagent(_bloodProto, rites.Comp.BloodExtractionAmount); + rites.Comp.StoredBlood += extracted; + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + args.Handled = true; + } + + private void OnCultistHit(Entity rites, ref MeleeHitEvent args) + { + if (args.HitEntities.Count == 0) + return; + + var playSound = false; + + foreach (var target in args.HitEntities) + { + if (!HasComp(target) && !HasComp(target)) + return; + + if (TryComp(target, out BloodstreamComponent? bloodstream)) + { + if (RestoreBloodLevel(rites, args.User, (target, bloodstream))) + playSound = true; + } + + if (TryComp(target, out DamageableComponent? damageable)) + { + if (Heal(rites, args.User, (target, damageable))) + playSound = true; + } + } + + if (playSound) + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + } + + private void BeforeUiOpen(Entity rites, ref BeforeActivatableUIOpenEvent args) + { + var state = new BloodRitesUiState(rites.Comp.Crafts, rites.Comp.StoredBlood); + _ui.SetUiState(rites.Owner, BloodRitesUiKey.Key, state); + } + + private void OnRitesMessage(Entity rites, ref BloodRitesMessage args) + { + Del(rites); + + var ent = Spawn(args.SelectedProto, _transform.GetMapCoordinates(args.Actor)); + _handsSystem.TryPickup(args.Actor, ent); + } + + private bool Heal(Entity rites, EntityUid user, Entity target) + { + if (target.Comp.TotalDamage == 0) + return false; + + if (TryComp(target, out MobStateComponent? mobState) && mobState.CurrentState == MobState.Dead) + { + _popup.PopupEntity(Loc.GetString("blood-rites-heal-dead"), target, user); + return false; + } + + if (!HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("blood-rites-heal-no-bloodstream"), target, user); + return false; + } + + var bloodCost = rites.Comp.HealingCost; + if (target.Owner == user) + bloodCost *= rites.Comp.SelfHealRatio; + + if (bloodCost >= rites.Comp.StoredBlood) + { + _popup.PopupEntity(Loc.GetString("blood-rites-not-enough-blood"), rites, user); + return false; + } + + var healingLeft = rites.Comp.TotalHealing; + + foreach (var (type, value) in target.Comp.Damage.DamageDict) + { + // somehow? + if (!_protoManager.TryIndex(type, out DamageTypePrototype? damageType)) + continue; + + var toHeal = value; + if (toHeal > healingLeft) + toHeal = healingLeft; + + _damageable.TryChangeDamage(target, new DamageSpecifier(damageType, -toHeal)); + + healingLeft -= toHeal; + if (healingLeft == 0) + break; + } + + rites.Comp.StoredBlood -= bloodCost; + return true; + } + + private bool RestoreBloodLevel( + Entity rites, + EntityUid user, + Entity target + ) + { + if (target.Comp.BloodSolution is null) + return false; + + _bloodstream.FlushChemicals(target, "", 10); + var missingBlood = target.Comp.BloodSolution.Value.Comp.Solution.AvailableVolume; + if (missingBlood == 0) + return false; + + var bloodCost = missingBlood * rites.Comp.BloodRegenerationRatio; + if (target.Owner == user) + bloodCost *= rites.Comp.SelfHealRatio; + + if (bloodCost > rites.Comp.StoredBlood) + { + _popup.PopupEntity("blood-rites-no-blood-left", rites, user); + bloodCost = rites.Comp.StoredBlood; + } + + _bloodstream.TryModifyBleedAmount(target, -3); + _bloodstream.TryModifyBloodLevel(target, bloodCost / rites.Comp.BloodRegenerationRatio); + + rites.Comp.StoredBlood -= bloodCost; + return true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs new file mode 100644 index 00000000000..fbb800eb0ba --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs @@ -0,0 +1,59 @@ +using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.Constructs; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Constructs; + +public sealed class ConstructSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnComponentShutdown); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var construct)) + { + if (!construct.Transforming) + continue; + + construct.TransformAccumulator += frameTime; + if (construct.TransformAccumulator < construct.TransformDelay) + continue; + + construct.TransformAccumulator = 0f; + construct.Transforming = false; + _appearanceSystem.SetData(uid, ConstructVisualsState.Transforming, false); + } + } + + private void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + _appearanceSystem.SetData(ent, ConstructVisualsState.Transforming, true); + ent.Comp.Transforming = true; + var cultistRule = EntityManager.EntityQueryEnumerator(); + while (cultistRule.MoveNext(out _, out var rule)) + { + rule.Constructs.Add(ent); + } + } + + private void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + var cultistRule = EntityManager.EntityQueryEnumerator(); + while (cultistRule.MoveNext(out _, out var rule)) + { + rule.Constructs.Remove(ent); + } + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellComponent.cs b/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellComponent.cs new file mode 100644 index 00000000000..f004959384f --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellComponent.cs @@ -0,0 +1,29 @@ +using Content.Shared.Containers.ItemSlots; +using Content.Shared.RadialSelector; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.Shell; + +[RegisterComponent] +public sealed partial class ConstructShellComponent : Component +{ + [DataField(required: true)] + public ItemSlot ShardSlot = new(); + + public readonly string ShardSlotId = "Shard"; + + [DataField] + public List Constructs = new() + { + new() { Prototype = "ConstructJuggernaut", }, + new() { Prototype = "ConstructArtificer", }, + new() { Prototype = "ConstructWraith", } + }; + + [DataField] + public List PurifiedConstructs = new() + { + new() { Prototype = "ConstructJuggernautHoly", }, + new() { Prototype = "ConstructArtificerHoly", }, + new() { Prototype = "ConstructWraithHoly", } + }; +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellSystem.cs new file mode 100644 index 00000000000..1923f21f2a6 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/Shell/ConstructShellSystem.cs @@ -0,0 +1,116 @@ +using Content.Server.Mind; +using Content.Server.Popups; +using Content.Server.WhiteDream.BloodCult.Constructs.SoulShard; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Mind.Components; +using Content.Shared.RadialSelector; +using Content.Shared.Verbs; +using Robust.Server.GameObjects; +using Robust.Shared.Containers; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.Shell; + +public sealed class ConstructShellSystem : EntitySystem +{ + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnGetVerbs); + SubscribeLocalEvent(OnShellInit); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnConstructSelected); + SubscribeLocalEvent(OnShellRemove); + } + + private void OnGetVerbs(Entity shell, ref GetVerbsEvent args) + { + var shellUid = shell.Owner; + if (_ui.IsUiOpen(shellUid, RadialSelectorUiKey.Key)) + return; + + // Holy shitcode. + Action action; + if (args.User == shellUid) + { + action = () => + { + _ui.SetUiState(shellUid, RadialSelectorUiKey.Key, new RadialSelectorState(shell.Comp.Constructs, true)); + _ui.TryToggleUi(shellUid, RadialSelectorUiKey.Key, shell); + }; + } + else if (_slots.GetItemOrNull(shell, shell.Comp.ShardSlotId) is { } shard && args.User == shard && + TryComp(shard, out SoulShardComponent? soulShard)) + { + action = () => + { + _ui.SetUiState(shellUid, + RadialSelectorUiKey.Key, + new RadialSelectorState(soulShard.IsBlessed ? shell.Comp.PurifiedConstructs : shell.Comp.Constructs, + true)); + _ui.TryToggleUi(shellUid, RadialSelectorUiKey.Key, shard); + }; + } + else + return; + + args.Verbs.Add(new ExamineVerb + { + DoContactInteraction = true, + Text = Loc.GetString("soul-shard-selector-form"), + Icon = new SpriteSpecifier.Texture( + new ResPath("/Textures/WhiteDream/BloodCult/Entities/Items/construct_shell.rsi")), + Act = action + }); + } + + private void OnShellInit(Entity shell, ref ComponentInit args) + { + _slots.AddItemSlot(shell, shell.Comp.ShardSlotId, shell.Comp.ShardSlot); + } + + private void OnInteractUsing(Entity shell, ref ContainerIsInsertingAttemptEvent args) + { + var shellUid = shell.Owner; + if (!TryComp(args.EntityUid, out SoulShardComponent? soulShard) || + _ui.IsUiOpen(shellUid, RadialSelectorUiKey.Key)) + return; + + if (!TryComp(args.EntityUid, out var mindContainer) || !mindContainer.HasMind) + { + _popup.PopupEntity(Loc.GetString("soul-shard-try-insert-no-soul"), shell); + args.Cancel(); + return; + } + + _slots.SetLock(shell, shell.Comp.ShardSlotId, true); + _ui.SetUiState(shellUid, + RadialSelectorUiKey.Key, + new RadialSelectorState(soulShard.IsBlessed ? shell.Comp.PurifiedConstructs : shell.Comp.Constructs, true)); + + _ui.TryToggleUi(shellUid, RadialSelectorUiKey.Key, args.EntityUid); + } + + private void OnConstructSelected(Entity shell, ref RadialSelectorSelectedMessage args) + { + if (!_mind.TryGetMind(args.Actor, out var mindId, out _)) + return; + + _ui.CloseUi(shell.Owner, RadialSelectorUiKey.Key); + var construct = Spawn(args.SelectedItem, _transform.GetMapCoordinates(shell)); + _mind.TransferTo(mindId, construct); + Del(shell); + } + + private void OnShellRemove(Entity shell, ref ComponentRemove args) + { + _slots.RemoveItemSlot(shell, shell.Comp.ShardSlot); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardComponent.cs b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardComponent.cs new file mode 100644 index 00000000000..40340a9550b --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardComponent.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.SoulShard; + +[RegisterComponent] +public sealed partial class SoulShardComponent : Component +{ + [DataField] + public bool IsBlessed; + + [DataField] + public Color BlessedLightColor = Color.LightCyan; + + [DataField] + public EntProtoId ShadeProto = "ShadeCult"; + + [DataField] + public EntProtoId PurifiedShadeProto = "ShadeHoly"; + + public EntityUid? ShadeUid; +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs new file mode 100644 index 00000000000..50e92bf2770 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs @@ -0,0 +1,108 @@ +using Content.Server.Bible.Components; +using Content.Server.Mind; +using Content.Server.Popups; +using Content.Server.Roles; +using Content.Shared.Interaction; +using Content.Shared.Mind.Components; +using Content.Shared.Roles; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.SoulShard; + +public sealed class SoulShardSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly SharedPointLightSystem _lightSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly SharedRoleSystem _roleSystem = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnShardMindAdded); + SubscribeLocalEvent(OnShardMindRemoved); + } + + private void OnActivate(Entity shard, ref ActivateInWorldEvent args) + { + if (!_mind.TryGetMind(shard, out var mindId, out _)) + return; + + if (!shard.Comp.IsBlessed) + { + if (!HasComp(args.User)) + return; + if (shard.Comp.ShadeUid.HasValue) + DespawnShade(shard); + else + SpawnShade(shard, shard.Comp.ShadeProto, mindId); + return; + } + + if (shard.Comp.ShadeUid.HasValue) + DespawnShade(shard); + else + SpawnShade(shard, shard.Comp.PurifiedShadeProto, mindId); + } + + private void OnInteractUsing(Entity shard, ref InteractUsingEvent args) + { + if (shard.Comp.IsBlessed || !TryComp(args.Used, out BibleComponent? bible)) + return; + + _popup.PopupEntity(Loc.GetString("bible-sizzle"), args.User, args.User); + _audio.PlayPvs(bible.HealSoundPath, args.User); + _appearanceSystem.SetData(shard, SoulShardVisualState.Blessed, true); + _lightSystem.SetColor(shard, shard.Comp.BlessedLightColor); + shard.Comp.IsBlessed = true; + } + + private void OnShardMindAdded(Entity shard, ref MindAddedMessage args) + { + if (!TryComp(shard, out var mindContainer) || !mindContainer.HasMind) + return; + + _roleSystem.MindTryRemoveRole(mindContainer.Mind.Value); + UpdateGlowVisuals(shard, true); + } + + private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) + { + UpdateGlowVisuals(shard, false); + } + + private void SpawnShade(Entity shard, EntProtoId proto, EntityUid mindId) + { + var position = _transform.GetMapCoordinates(shard); + var shadeUid = Spawn(proto, position); + _mind.TransferTo(mindId, shadeUid); + _mind.UnVisit(mindId); + } + + private void DespawnShade(Entity shard) + { + if (!_mind.TryGetMind(shard.Comp.ShadeUid!.Value, out var mindId, out _)) + { + _mind.TransferTo(mindId, shard); + _mind.UnVisit(mindId); + } + + Del(shard.Comp.ShadeUid); + } + + private void UpdateGlowVisuals(Entity shard, bool state) + { + _appearanceSystem.SetData(shard, SoulShardVisualState.HasMind, state); + _lightSystem.SetEnabled(shard, state); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierComponent.cs b/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierComponent.cs new file mode 100644 index 00000000000..89c8dcc0120 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Server.WhiteDream.BloodCult.CultBarrier; + +[RegisterComponent] +public sealed partial class BloodCultBarrierComponent : Component; diff --git a/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierSystem.cs b/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierSystem.cs new file mode 100644 index 00000000000..a6ac813245d --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/CultBarrier/BloodCultBarrierSystem.cs @@ -0,0 +1,25 @@ +using Content.Server.Popups; +using Content.Shared.Interaction; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Runes; + +namespace Content.Server.WhiteDream.BloodCult.CultBarrier; + +public sealed class BloodCultBarrierSystem : EntitySystem +{ + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnInteract); + } + + private void OnInteract(Entity ent, ref InteractUsingEvent args) + { + if (!HasComp(args.Used) || !HasComp(args.User)) + return; + + _popup.PopupEntity("cult-barrier-destroyed", args.User, args.User); + Del(args.Target); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredComponent.cs b/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredComponent.cs new file mode 100644 index 00000000000..dd94ecb1b3f --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredComponent.cs @@ -0,0 +1,44 @@ +using Content.Shared.Alert; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Empower; + +[RegisterComponent] +public sealed partial class BloodCultEmpoweredComponent : Component +{ + /// + /// Changes the damage from drawing/using runes. + /// + [DataField] + public float RuneDamageMultiplier = 0.5f; + + /// + /// Changes the drawing time of runes. + /// + [DataField] + public float RuneTimeMultiplier = 0.5f; + + /// + /// Increases the amount of spells cultists can create at once. + /// + [DataField] + public int ExtraSpells = 3; + + /// + /// The default duration of the empowering. + /// + [DataField] + public TimeSpan DefaultTime = TimeSpan.FromSeconds(20); + + [DataField] + public float NearbyCultTileRadius = 1f; + + [DataField] + public string CultTile = "CultFloor"; + + [DataField] + public ProtoId EmpoweredAlert = "CultEmpowered"; + + [ViewVariables(VVAccess.ReadOnly)] + public TimeSpan TimeRemaining = TimeSpan.Zero; +} diff --git a/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredSystem.cs b/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredSystem.cs new file mode 100644 index 00000000000..f7fbdd045e4 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Empower/BloodCultEmpoweredSystem.cs @@ -0,0 +1,88 @@ +using System.Linq; +using System.Numerics; +using Content.Server.WhiteDream.BloodCult.Spells; +using Content.Shared.Alert; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; + +namespace Content.Server.WhiteDream.BloodCult.Empower; + +public sealed class BloodCultEmpoweredSystem : EntitySystem +{ + [Dependency] private readonly ITileDefinitionManager _tileDefinition = default!; + + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly MapSystem _map = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmpowerStartup); + SubscribeLocalEvent(OnEmpowerShutdown); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + UpdateTimers(frameTime); + } + + private void OnEmpowerStartup(Entity cultist, ref ComponentStartup args) + { + _alerts.ShowAlert(cultist, cultist.Comp.EmpoweredAlert); + if (TryComp(cultist, out BloodCultSpellsHolderComponent? spellsHolder)) + spellsHolder.MaxSpells += cultist.Comp.ExtraSpells; + } + + private void OnEmpowerShutdown(Entity cultist, ref ComponentShutdown args) + { + _alerts.ClearAlert(cultist, cultist.Comp.EmpoweredAlert); + if (TryComp(cultist, out BloodCultSpellsHolderComponent? spellsHolder)) + spellsHolder.MaxSpells -= cultist.Comp.ExtraSpells; + } + + private void UpdateTimers(float frameTime) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var empowered)) + { + if (!HasComp(uid)) + { + RemComp(uid, empowered); + continue; + } + + if (AnyCultTilesNearby((uid, empowered))) + { + empowered.TimeRemaining = empowered.DefaultTime; + continue; + } + + empowered.TimeRemaining -= TimeSpan.FromSeconds(frameTime); + if (empowered.TimeRemaining <= TimeSpan.Zero) + RemComp(uid, empowered); + } + } + + private bool AnyCultTilesNearby(Entity ent) + { + var transform = Transform(ent); + var localpos = transform.Coordinates.Position; + var gridUid = transform.GridUid; + if (!gridUid.HasValue || !TryComp(gridUid, out MapGridComponent? grid)) + return false; + + var cultTile = _tileDefinition[ent.Comp.CultTile]; + + var radius = ent.Comp.NearbyCultTileRadius; + var tilesRefs = _map.GetLocalTilesIntersecting( + gridUid.Value, + grid, + new Box2(localpos + new Vector2(-radius, -radius), localpos + new Vector2(radius, radius))); + + return tilesRefs.Any(tileRef => tileRef.Tile.TypeId == cultTile.TileId); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs new file mode 100644 index 00000000000..09dc2b542fb --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs @@ -0,0 +1,65 @@ +using Content.Server.NPC.Components; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Gamerule; + +[RegisterComponent] +public sealed partial class BloodCultRuleComponent : Component +{ + [DataField] + public ProtoId NanoTrasenFaction = "NanoTrasen"; + + [DataField] + public ProtoId BloodCultFaction = "GeometerOfBlood"; + + [DataField] + public EntProtoId HarvesterPrototype = "ConstructHarvester"; + + [DataField] + public Color EyeColor = Color.FromHex("#f80000"); + + [DataField] + public int ReadEyeThreshold = 5; + + [DataField] + public int PentagramThreshold = 8; + + [ViewVariables(VVAccess.ReadOnly)] + public bool LeaderSelected; + + /// + /// The entityUid of body which should be sacrificed. + /// + [ViewVariables(VVAccess.ReadOnly)] + public EntityUid? OfferingTarget; + + [ViewVariables(VVAccess.ReadOnly)] + public EntityUid? CultLeader; + + [ViewVariables(VVAccess.ReadOnly)] + public CultStage Stage = CultStage.Start; + + public CultWinCondition WinCondition = CultWinCondition.Draw; + + public List> Cultists = new(); + + public List> Constructs = new(); +} + +public enum CultWinCondition : byte +{ + Draw, + Win, + Failure +} + +public enum CultStage : byte +{ + Start, + RedEyes, + Pentagram +} + +public sealed class BloodCultNarsieSummoned : EntityEventArgs; diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs new file mode 100644 index 00000000000..c753d929134 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs @@ -0,0 +1,382 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Server.Actions; +using Content.Server.Antag; +using Content.Server.Antag.Components; +using Content.Server.GameTicking; +using Content.Server.GameTicking.Rules; +using Content.Server.Hands.Systems; +using Content.Server.Language; +using Content.Server.NPC.Systems; +using Content.Server.Roles; +using Content.Server.RoundEnd; +using Content.Server.StationEvents.Components; +using Content.Server.WhiteDream.BloodCult.Items.BloodSpear; +using Content.Server.WhiteDream.BloodCult.Objectives; +using Content.Server.WhiteDream.BloodCult.Spells; +using Content.Shared.Body.Systems; +using Content.Shared.Cloning; +using Content.Shared.Cuffs.Components; +using Content.Shared.GameTicking.Components; +using Content.Shared.Humanoid; +using Content.Shared.Inventory; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; +using Content.Shared.Mood; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Roles; +using Content.Shared.WhiteDream.BloodCult.Components; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Items; +using Robust.Server.Containers; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Gamerule; + +public sealed class BloodCultRuleSystem : GameRuleSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly AntagSelectionSystem _antagSelection = default!; + [Dependency] private readonly BloodSpearSystem _bloodSpear = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly LanguageSystem _languageSystem = default!; + [Dependency] private readonly NpcFactionSystem _factionSystem = default!; + [Dependency] private readonly MobStateSystem _mobStateSystem = default!; + [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; + [Dependency] private readonly SharedBodySystem _bodySystem = default!; + [Dependency] private readonly SharedRoleSystem _roleSystem = default!; + [Dependency] private readonly SharedMindSystem _mindSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(AfterEntitySelected); + + SubscribeLocalEvent(OnNarsieSummon); + + SubscribeLocalEvent(OnCultistComponentInit); + SubscribeLocalEvent(OnCultistComponentRemoved); + SubscribeLocalEvent(OnCultistsStateChanged); + SubscribeLocalEvent(OnClone); + + SubscribeLocalEvent(OnGetBriefing); + } + + protected override void Started( + EntityUid uid, + BloodCultRuleComponent component, + GameRuleComponent gameRule, + GameRuleStartedEvent args + ) + { + base.Started(uid, component, gameRule, args); + + component.OfferingTarget = FindTarget(); + } + + protected override void AppendRoundEndText( + EntityUid uid, + BloodCultRuleComponent component, + GameRuleComponent gameRule, + ref RoundEndTextAppendEvent args + ) + { + base.AppendRoundEndText(uid, component, gameRule, ref args); + var winText = Loc.GetString($"blood-cult-condition-{component.WinCondition.ToString().ToLower()}"); + args.AddLine(winText); + + args.AddLine(Loc.GetString("blood-cultists-list-start")); + + var sessionData = _antagSelection.GetAntagIdentifiers(uid); + foreach (var (_, data, name) in sessionData) + { + var lising = Loc.GetString("blood-cultists-list-name", ("name", name), ("user", data.UserName)); + args.AddLine(lising); + } + } + + private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) => + MakeCultist(args.EntityUid, ent); + + private void OnNarsieSummon(BloodCultNarsieSummoned ev) + { + var rulesQuery = QueryActiveRules(); + while (rulesQuery.MoveNext(out _, out var cult, out _)) + { + cult.WinCondition = CultWinCondition.Win; + _roundEndSystem.EndRound(); + + foreach (var ent in cult.Cultists) + { + if (Deleted(ent.Owner) || !TryComp(ent.Owner, out MindContainerComponent? mindContainer) || + !mindContainer.Mind.HasValue) + continue; + + var harvester = Spawn(cult.HarvesterPrototype, Transform(ent.Owner).Coordinates); + _mindSystem.TransferTo(mindContainer.Mind.Value, harvester); + _bodySystem.GibBody(ent); + } + + return; + } + } + + private void OnCultistComponentInit(Entity cultist, ref ComponentInit args) + { + RaiseLocalEvent(cultist, new MoodEffectEvent("CultFocused")); + _languageSystem.AddLanguage(cultist, cultist.Comp.CultLanguageId); + + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var cult, out _)) + { + cult.Cultists.Add(cultist); + UpdateCultStage(cult); + } + } + + private void OnCultistComponentRemoved(Entity cultist, ref ComponentRemove args) + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var cult, out _)) + cult.Cultists.Remove(cultist); + + CheckRoundShouldEnd(); + + if (TerminatingOrDeleted(cultist.Owner)) + return; + + RemoveAllCultItems(cultist); + RemoveCultistAppearance(cultist); + RemoveObjectiveAndRole(cultist.Owner); + RaiseLocalEvent(cultist.Owner, new MoodRemoveEffectEvent("CultFocused")); + _languageSystem.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); + + if (!TryComp(cultist, out BloodCultSpellsHolderComponent? powersHolder)) + return; + + foreach (var power in powersHolder.SelectedSpells) + _actions.RemoveAction(cultist.Owner, power); + } + + private void OnCultistsStateChanged(Entity ent, ref MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Dead) + CheckRoundShouldEnd(); + } + + private void OnClone(Entity ent, ref CloningEvent args) => RemoveObjectiveAndRole(ent); + + private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) => + args.Append(Loc.GetString("blood-cult-role-briefing-short")); + + public void Convert(EntityUid target) + { + if (!TryComp(target, out ActorComponent? actor)) + return; + + var query = QueryActiveRules(); + while (query.MoveNext(out var ruleUid, out _, out _, out _)) + { + if (!TryComp(ruleUid, out AntagSelectionComponent? antagSelection)) + continue; + + var antagSelectionEnt = (ruleUid, antagSelection); + if (!_antagSelection.TryGetNextAvailableDefinition(antagSelectionEnt, out var def)) + continue; + + _antagSelection.MakeAntag(antagSelectionEnt, actor.PlayerSession, def.Value); + } + } + + public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) + { + target = GetTarget(); + return target is not null; + } + + public EntityUid? GetTarget() + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var bloodCultRule, out _)) + if (bloodCultRule.OfferingTarget.HasValue) + return bloodCultRule.OfferingTarget.Value; + + return null; + } + + public bool IsTarget(EntityUid entityUid) + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var bloodCultRule, out _)) + return entityUid == bloodCultRule.OfferingTarget; + + return false; + } + + public void RemoveObjectiveAndRole(EntityUid uid) + { + if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) + return; + + var objectives = mind.Objectives.FindAll(HasComp); + foreach (var obj in objectives) + _mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + + if (_roleSystem.MindHasRole(mindId)) + _roleSystem.MindRemoveRole(mindId); + } + + private void CheckRoundShouldEnd() + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var cult, out _)) + { + var aliveCultists = cult.Cultists.Count(cultist => !_mobStateSystem.IsDead(cultist)); + if (aliveCultists != 0) + return; + + cult.WinCondition = CultWinCondition.Failure; + + // Check for all at once gamemode + if (!GameTicker.GetActiveGameRules().Where(HasComp).Any()) + _roundEndSystem.EndRound(); + } + } + + private void MakeCultist(EntityUid cultist, Entity rule) + { + if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind)) + return; + + EnsureComp(cultist); + + _factionSystem.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); + _factionSystem.AddFaction(cultist, rule.Comp.BloodCultFaction); + + _mindSystem.TryAddObjective(mindId, mind, "KillTargetCultObjective"); + } + + private EntityUid? FindTarget(ICollection exclude = null!) + { + var querry = EntityManager + .EntityQueryEnumerator(); + + var potentialTargets = new List(); + + while (querry.MoveNext(out var uid, out var mind, out _, out _)) + { + var entity = mind.Mind; + if (entity == default || exclude?.Contains(uid) is true || HasComp(uid)) + continue; + + potentialTargets.Add(uid); + } + + return potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; + } + + private void RemoveAllCultItems(Entity cultist) + { + if (!_inventorySystem.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) + return; + + _bloodSpear.DetachSpearFromMaster(cultist); + while (enumerator.MoveNext(out var container)) + if (container.ContainedEntity != null && HasComp(container.ContainedEntity.Value)) + _container.Remove(container.ContainedEntity.Value, container, true, true); + + foreach (var item in _hands.EnumerateHeld(cultist)) + if (TryComp(item, out CultItemComponent? cultItem) && !cultItem.AllowUseToEveryone && + !_hands.TryDrop(cultist, item, null, false, false)) + QueueDel(item); + } + + private void RemoveCultistAppearance(Entity cultist) + { + if (TryComp(cultist, out var appearanceComponent)) + { + appearanceComponent.EyeColor = cultist.Comp.OriginalEyeColor; + Dirty(cultist, appearanceComponent); + } + + RemComp(cultist); + } + + private void UpdateCultStage(BloodCultRuleComponent cultRule) + { + var cultistsCount = cultRule.Cultists.Count; + var prevStage = cultRule.Stage; + + if (cultistsCount >= cultRule.PentagramThreshold) + { + cultRule.Stage = CultStage.Pentagram; + SelectRandomLeader(cultRule); + } + else if (cultistsCount >= cultRule.ReadEyeThreshold) + cultRule.Stage = CultStage.RedEyes; + else + cultRule.Stage = CultStage.Start; + + if (cultRule.Stage != prevStage) + UpdateCultistsAppearance(cultRule, prevStage); + } + + private void UpdateCultistsAppearance(BloodCultRuleComponent cultRule, CultStage prevStage) + { + switch (cultRule.Stage) + { + case CultStage.Start when prevStage == CultStage.RedEyes: + foreach (var cultist in cultRule.Cultists) + RemoveCultistAppearance(cultist); + + break; + case CultStage.RedEyes when prevStage == CultStage.Start: + foreach (var cultist in cultRule.Cultists) + { + if (!TryComp(cultist, out var appearanceComponent)) + continue; + cultist.Comp.OriginalEyeColor = appearanceComponent.EyeColor; + appearanceComponent.EyeColor = cultRule.EyeColor; + Dirty(cultist, appearanceComponent); + } + + break; + case CultStage.Pentagram: + foreach (var cultist in cultRule.Cultists) + EnsureComp(cultist); + + break; + } + } + + /// + /// A crutch while we have no NORMAL voting system. The DarkRP one fucking sucks. + /// + private void SelectRandomLeader(BloodCultRuleComponent cultRule) + { + if (cultRule.LeaderSelected) + return; + + var candidats = cultRule.Cultists; + candidats.RemoveAll( + entity => + TryComp(entity, out PullableComponent? pullable) && pullable.BeingPulled || + TryComp(entity, out CuffableComponent? cuffable) && cuffable.CuffedHandCount > 0); + + if (candidats.Count == 0) + return; + + var leader = _random.Pick(candidats); + AddComp(leader); + cultRule.LeaderSelected = true; + cultRule.CultLeader = leader; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearComponent.cs b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearComponent.cs new file mode 100644 index 00000000000..44eb83f05c0 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearComponent.cs @@ -0,0 +1,25 @@ +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult.Items.BloodSpear; + +[RegisterComponent] +public sealed partial class BloodSpearComponent : Component +{ + [DataField] + public EntityUid? Master; + + [DataField] + public TimeSpan ParalyzeTime = TimeSpan.FromSeconds(4); + + [DataField] + public EntProtoId RecallActionId = "ActionBloodSpearRecall"; + + public EntityUid? RecallAction; + + [DataField] + public SoundSpecifier RecallAudio = new SoundPathSpecifier( + new ResPath("/Audio/WhiteDream/BloodCult/rites.ogg"), + AudioParams.Default.WithVolume(-3)); +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs new file mode 100644 index 00000000000..fce72241a41 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/BloodSpear/BloodSpearSystem.cs @@ -0,0 +1,84 @@ +using Content.Server.Actions; +using Content.Server.Hands.Systems; +using Content.Server.Stunnable; +using Content.Shared.Humanoid; +using Content.Shared.Item; +using Content.Shared.Projectiles; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.Audio; + +namespace Content.Server.WhiteDream.BloodCult.Items.BloodSpear; + +public sealed class BloodSpearSystem : EntitySystem +{ + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly StunSystem _stun = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnEmbed); + + SubscribeLocalEvent(OnPickedUp); + SubscribeLocalEvent(OnSpearRecalled); + + SubscribeLocalEvent(OnComponentShutdown); + } + + private void OnComponentShutdown(Entity spear, ref ComponentShutdown args) + { + if (!spear.Comp.RecallAction.HasValue) + return; + + _actions.RemoveAction(spear.Comp.RecallAction); + } + + private void OnEmbed(Entity spear, ref EmbedEvent args) + { + if (!HasComp(args.Embedded)) + return; + + _stun.TryParalyze(args.Embedded, spear.Comp.ParalyzeTime, true); + QueueDel(spear); + } + + private void OnPickedUp(Entity spear, ref GettingPickedUpAttemptEvent args) + { + if (args.Cancelled || spear.Comp.Master.HasValue || + !TryComp(args.User, out BloodCultistComponent? bloodCultist)) + return; + + spear.Comp.Master = args.User; + + var action = _actions.AddAction(args.User, spear.Comp.RecallActionId); + spear.Comp.RecallAction = action; + bloodCultist.BloodSpear = spear; + } + + private void OnSpearRecalled(Entity cultist, ref BloodSpearRecalledEvent args) + { + if (args.Handled) + return; + + var spearUid = cultist.Comp.BloodSpear; + if (!spearUid.HasValue || !TryComp(spearUid, out BloodSpearComponent? spear)) + return; + + _hands.TryForcePickupAnyHand(cultist, spearUid.Value); + _audio.PlayPvs(spear.RecallAudio, spearUid.Value); + args.Handled = true; + } + + public void DetachSpearFromMaster(Entity cultist) + { + if (cultist.Comp.BloodSpear is not { } spearUid || !TryComp(spearUid, out BloodSpearComponent? spear)) + return; + + _actions.RemoveAction(spear.RecallAction); + spear.RecallAction = null; + spear.Master = null; + cultist.Comp.BloodSpear = null; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseComponent.cs b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseComponent.cs new file mode 100644 index 00000000000..1af76de1ffb --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.Audio; + +namespace Content.Server.WhiteDream.BloodCult.Items.ShuttleCurse; + +[RegisterComponent] +public sealed partial class ShuttleCurseComponent : Component +{ + [DataField] + public TimeSpan DelayTime = TimeSpan.FromMinutes(3); + + [DataField] + public SoundSpecifier ScatterSound = new SoundCollectionSpecifier("GlassBreak"); + + [DataField] + public List CurseMessages = new() + { + "shuttle-curse-message-1", + "shuttle-curse-message-2", + "shuttle-curse-message-3", + "shuttle-curse-message-4", + "shuttle-curse-message-5", + "shuttle-curse-message-6", + "shuttle-curse-message-7", + "shuttle-curse-message-8", + "shuttle-curse-message-9", + "shuttle-curse-message-10", + "shuttle-curse-message-11", + }; +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseProviderComponent.cs b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseProviderComponent.cs new file mode 100644 index 00000000000..9dd4b5d0dc2 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseProviderComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.Items.ShuttleCurse; + +[RegisterComponent] +public sealed partial class ShuttleCurseProviderComponent : Component +{ + [DataField] + public int MaxUses = 3; + + [ViewVariables(VVAccess.ReadOnly)] + public int CurrentUses = 0; +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseSystem.cs new file mode 100644 index 00000000000..7e23649f7b8 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/ShuttleCurse/ShuttleCurseSystem.cs @@ -0,0 +1,81 @@ +using Content.Server.Chat.Systems; +using Content.Server.Popups; +using Content.Server.RoundEnd; +using Content.Server.Shuttles.Systems; +using Content.Shared.Interaction; +using Robust.Server.Audio; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Items.ShuttleCurse; + +public sealed class ShuttleCurseSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnActivate); + } + + private void OnActivate(Entity orb, ref ActivateInWorldEvent args) + { + if (args.Handled) + return; + + var curseProvider = EnsureShuttleCurseProvider(orb); + if (curseProvider is null) + { + _popup.PopupEntity(Loc.GetString("shuttle-curse-cant-activate"), orb, args.User); + return; + } + + if (curseProvider.CurrentUses >= curseProvider.MaxUses) + { + _popup.PopupEntity(Loc.GetString("shuttle-curse-max-charges"), orb, args.User); + return; + } + + if (_emergencyShuttle.EmergencyShuttleArrived) + { + _popup.PopupEntity(Loc.GetString("shuttle-curse-shuttle-arrived"), orb, args.User); + return; + } + + if (_roundEnd.ExpectedCountdownEnd is null) + { + _popup.PopupEntity(Loc.GetString("shuttle-curse-shuttle-not-called"), orb, args.User); + return; + } + + _roundEnd.DelayShuttle(orb.Comp.DelayTime); + + var cursedMessage = string.Concat(Loc.GetString(_random.Pick(orb.Comp.CurseMessages)), + " ", + Loc.GetString("shuttle-curse-success-global", ("time", orb.Comp.DelayTime.TotalMinutes))); + + _chat.DispatchGlobalAnnouncement(cursedMessage, + Loc.GetString("shuttle-curse-system-failure"), + colorOverride: Color.Gold); + + _popup.PopupEntity(Loc.GetString("shuttle-curse-success"), args.User, args.User); + curseProvider.CurrentUses++; + + _audio.PlayEntity(orb.Comp.ScatterSound, Filter.Pvs(orb), orb, true); + Del(orb); + } + + private ShuttleCurseProviderComponent? EnsureShuttleCurseProvider(EntityUid orb) + { + var mapUid = Transform(orb).MapUid; + return !mapUid.HasValue ? null : EnsureComp(mapUid.Value); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterComponent.cs b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterComponent.cs new file mode 100644 index 00000000000..a2ec1c69570 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterComponent.cs @@ -0,0 +1,35 @@ +using Robust.Shared.Audio; + +namespace Content.Server.WhiteDream.BloodCult.Items.VeilShifter; + +[RegisterComponent] +public sealed partial class VeilShifterComponent : Component +{ + [DataField] + public int Charges = 4; + + [DataField] + public int TeleportDistanceMax = 10; + + [DataField] + public int TeleportDistanceMin = 5; + + [DataField] + public Vector2i Offset = Vector2i.One * 2; + + // How many times it will try to find safe location before aborting the operation? + [DataField] + public int Attempts = 10; + + [DataField] + public SoundPathSpecifier TeleportInSound = new("/Audio/WhiteDream/BloodCult/veilin.ogg"); + + [DataField] + public SoundPathSpecifier TeleportOutSound = new("/Audio/WhiteDream/BloodCult/veilout.ogg"); + + [ViewVariables(VVAccess.ReadOnly), DataField("teleportInEffect")] + public string? TeleportInEffect = "CultTeleportInEffect"; + + [ViewVariables(VVAccess.ReadOnly), DataField("teleportOutEffect")] + public string? TeleportOutEffect = "CultTeleportOutEffect"; +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs new file mode 100644 index 00000000000..188006e2196 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs @@ -0,0 +1,91 @@ +using Content.Server.Popups; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.Interaction.Events; +using Content.Shared.Maps; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Physics; +using Content.Shared.WhiteDream.BloodCult; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Items.VeilShifter; + +public sealed class VeilShifterSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly PullingSystem _pulling = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUseInHand); + } + + private void OnUseInHand(Entity veil, ref UseInHandEvent args) + { + if (veil.Comp.Charges == 0) + return; + + if (!Teleport(veil, args.User)) + return; + + veil.Comp.Charges--; + if (veil.Comp.Charges == 0) + _appearance.SetData(veil, GenericCultVisuals.State, false); + } + + private bool Teleport(Entity veil, EntityUid user) + { + var userTransform = Transform(user); + + EntityCoordinates coords = default; + var oldCoords = userTransform.Coordinates; + var direction = userTransform.LocalRotation.GetDir().ToVec(); + var offset = userTransform.LocalRotation.ToWorldVec().Normalized(); + + var foundPos = false; + + for (var i = 0; i < veil.Comp.Attempts; i++) + { + var distance = _random.Next(veil.Comp.TeleportDistanceMin, veil.Comp.TeleportDistanceMax); + coords = userTransform.Coordinates.Offset(offset + direction * distance).SnapToGrid(); + + if (!coords.TryGetTileRef(out var tileRef) || _turf.IsTileBlocked(tileRef.Value, CollisionGroup.MobMask)) + continue; + foundPos = true; + break; + } + + if (!foundPos) + { + _popup.PopupClient(Loc.GetString("veil-shifter-cant-teleport"), veil, user); + return false; + } + + if (_pulling.TryGetPulledEntity(user, out var pulledEntity)) + _pulling.TryStopPull(pulledEntity.Value); + + _transform.SetCoordinates(user, coords); + if (pulledEntity.HasValue) + { + _transform.SetCoordinates(pulledEntity.Value, coords); + _pulling.TryStartPull(user, pulledEntity.Value); + } + + _audio.PlayPvs(veil.Comp.TeleportInSound, coords); + _audio.PlayPvs(veil.Comp.TeleportOutSound, oldCoords); + + Spawn(veil.Comp.TeleportInEffect, coords); + Spawn(veil.Comp.TeleportOutEffect, oldCoords); + return true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs new file mode 100644 index 00000000000..7946999028f --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchSystem.cs @@ -0,0 +1,85 @@ +using Content.Server.Hands.Systems; +using Content.Server.Popups; +using Content.Shared.Interaction; +using Content.Shared.Item; +using Content.Shared.ListViewSelector; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Items.VoidTorch; +using Robust.Server.Audio; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Items.VoidTorch; + +public sealed class VoidTorchSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnCultistSelected); + } + + private void OnComponentStartup(Entity torch, ref ComponentStartup args) + { + _appearance.SetData(torch, GenericCultVisuals.State, true); + } + + private void OnAfterInteract(Entity torch, ref AfterInteractEvent args) + { + if (torch.Comp.Charges == 0 || args.Target is not { } target || !HasComp(target)) + return; + + var cultistsQuery = EntityQueryEnumerator(); + var cultist = new List(); + while (cultistsQuery.MoveNext(out var cultistUid, out _)) + { + if (cultistUid == args.User) + continue; + + var metaData = MetaData(cultistUid); + var entry = new ListViewSelectorEntry(cultistUid.ToString(), + metaData.EntityName, + metaData.EntityDescription); + + cultist.Add(entry); + } + + if (cultist.Count == 0) + { + _popup.PopupEntity(Loc.GetString("cult-rune-no-targets"), args.User, args.User); + args.Handled = true; + return; + } + + torch.Comp.TargetItem = target; + _ui.SetUiState(torch.Owner, ListViewSelectorUiKey.Key, new ListViewSelectorState(cultist)); + _ui.TryToggleUi(torch.Owner, ListViewSelectorUiKey.Key, args.User); + } + + private void OnCultistSelected(Entity torch, ref ListViewItemSelectedMessage args) + { + if (!EntityUid.TryParse(args.SelectedItem.Id, out var target) || torch.Comp.TargetItem is not { } item) + return; + + var targetTransform = Transform(target); + + _transform.SetCoordinates(item, targetTransform.Coordinates); + _hands.TryPickupAnyHand(target, item); + + _audio.PlayPvs(torch.Comp.TeleportSound, torch); + + torch.Comp.Charges--; + if (torch.Comp.Charges == 0) + _appearance.SetData(torch, GenericCultVisuals.State, false); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs new file mode 100644 index 00000000000..8c500a04328 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.Objectives; + +[RegisterComponent, Access(typeof(KillTargetCultSystem))] +public sealed partial class KillTargetCultComponent : Component +{ + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] + public string Title = string.Empty; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityUid Target; +} diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs new file mode 100644 index 00000000000..b2ef487790e --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs @@ -0,0 +1,50 @@ +using System.Linq; +using Content.Server.Roles.Jobs; +using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Objectives.Components; + +namespace Content.Server.WhiteDream.BloodCult.Objectives; + +public sealed class KillTargetCultSystem : EntitySystem +{ + [Dependency] private readonly JobSystem _job = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnObjectiveAssigned); + SubscribeLocalEvent(OnAfterAssign); + SubscribeLocalEvent(OnGetProgress); + } + + private void OnObjectiveAssigned(Entity ent, ref ObjectiveAssignedEvent args) + { + var cultistRule = EntityManager.EntityQuery().FirstOrDefault(); + if (cultistRule?.OfferingTarget is { } target) + ent.Comp.Target = target; + } + + private void OnAfterAssign(Entity ent, ref ObjectiveAfterAssignEvent args) + { + _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target, ent.Comp.Title), args.Meta); + } + + private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) + { + var target = ent.Comp.Target; + + args.Progress = !HasComp(target) || _mobState.IsDead(target) + ? args.Progress = 1f + : args.Progress = 0f; + } + + private string GetTitle(EntityUid target, string title) + { + var targetName = MetaData(target).EntityName; + var jobName = _job.MindTryGetJobName(target); + return Loc.GetString(title, ("targetName", targetName), ("job", jobName)); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Pylon/PylonSystem.cs b/Content.Server/WhiteDream/BloodCult/Pylon/PylonSystem.cs new file mode 100644 index 00000000000..84717d69437 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Pylon/PylonSystem.cs @@ -0,0 +1,136 @@ +using System.Linq; +using System.Numerics; +using Content.Server.Popups; +using Content.Shared.Damage; +using Content.Shared.Humanoid; +using Content.Shared.Interaction; +using Content.Shared.Maps; +using Content.Shared.Mobs.Systems; +using Content.Shared.WhiteDream.BloodCult; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Components; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Pylon; + +public sealed class PylonSystem : EntitySystem +{ + [Dependency] private readonly ITileDefinitionManager _tileDefinition = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly MapSystem _map = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly TileSystem _tile = default!; + [Dependency] private readonly TurfSystem _turfs = default!; + [Dependency] private readonly PointLightSystem _pointLight = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteract); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var pylonQuery = EntityQueryEnumerator(); + while (pylonQuery.MoveNext(out var uid, out var pylon)) + { + if (!pylon.IsActive) + continue; + + pylon.CorruptionAccumulator += frameTime; + pylon.HealingAccumulator += frameTime; + + if (pylon.CorruptionAccumulator >= pylon.CorruptionCooldown) + { + pylon.CorruptionAccumulator = 0; + CorruptTilesInRange((uid, pylon)); + } + + if (pylon.HealingAccumulator >= pylon.HealingCooldown) + { + pylon.HealingAccumulator = 0; + HealInRange((uid, pylon)); + } + } + } + + private void OnInteract(Entity pylon, ref InteractHandEvent args) + { + if (!HasComp(args.User)) + { + _audio.PlayEntity(pylon.Comp.BurnHandSound, Filter.Pvs(pylon), pylon, true); + _popup.PopupEntity(Loc.GetString("powered-light-component-burn-hand"), pylon, args.User); + _damageable.TryChangeDamage(args.User, pylon.Comp.DamageOnInteract, true); + return; + } + + ToggleActive(pylon); + var toggleMsg = Loc.GetString(pylon.Comp.IsActive ? "pylon-toggle-on" : "pylon-toggle-off"); + _popup.PopupEntity(toggleMsg, pylon); + } + + private void ToggleActive(Entity pylon) + { + var state = !pylon.Comp.IsActive; + pylon.Comp.IsActive = state; + _appearance.SetData(pylon, PylonVisuals.Activated, state); + _pointLight.SetEnabled(pylon, state); + } + + private void CorruptTilesInRange(Entity pylon) + { + var pylonTrans = Transform(pylon); + if (pylonTrans.GridUid is not { } gridUid || !TryComp(pylonTrans.GridUid, out MapGridComponent? mapGrid)) + return; + + var radius = pylon.Comp.CorruptionRadius; + var tilesRefs = _map.GetLocalTilesIntersecting(gridUid, + mapGrid, + new Box2(pylonTrans.Coordinates.Position + new Vector2(-radius, -radius), + pylonTrans.Coordinates.Position + new Vector2(radius, radius))) + .ToList(); + + _random.Shuffle(tilesRefs); + + var cultTileDefinition = (ContentTileDefinition) _tileDefinition[pylon.Comp.CultTile]; + foreach (var tile in tilesRefs) + { + if (tile.Tile.TypeId == cultTileDefinition.TileId) + continue; + + var tilePos = _turfs.GetTileCenter(tile); + _audio.PlayPvs(pylon.Comp.CorruptTileSound, tilePos, AudioParams.Default.WithVolume(-5)); + _tile.ReplaceTile(tile, cultTileDefinition); + Spawn(pylon.Comp.TileCorruptEffect, tilePos); + return; + } + } + + private void HealInRange(Entity pylon) + { + var pylonPosition = Transform(pylon).Coordinates; + var targets = + _lookup.GetEntitiesInRange(pylonPosition, pylon.Comp.HealingAuraRange); + + foreach (var target in targets) + { + if (HasComp(target) && !_mobState.IsDead(target)) + _damageable.TryChangeDamage(target, pylon.Comp.Healing, true); + } + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseComponent.cs new file mode 100644 index 00000000000..d7c25ae24d0 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseComponent.cs @@ -0,0 +1,61 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Apocalypse; + +[RegisterComponent] +public sealed partial class CultRuneApocalypseComponent : Component +{ + [DataField] + public float InvokeTime = 20; + + /// + /// If cult has less than this percent of current server population, + /// one of the possible events will be triggered. + /// + [DataField] + public float CultistsThreshold = 0.15f; + + [DataField] + public float EmpRange = 30f; + + [DataField] + public float EmpEnergyConsumption = 10000; + + [DataField] + public float EmpDuration = 180; + + /// + /// Was the rune already used or not. + /// + [DataField] + public bool Used; + + [DataField] + public Color UsedColor = Color.DimGray; + + /// + /// These events will be triggered on each rune activation. + /// + [DataField] + public List GuaranteedEvents = new() + { + "PowerGridCheck", + "SolarFlare" + }; + + /// + /// One of these events will be selected on each rune activation. + /// Stores the event and how many times it should be repeated. + /// + [DataField] + public Dictionary PossibleEvents = new() + { + ["ImmovableRodSpawn"] = 3, + ["MimicVendorRule"] = 2, + ["RatKingSpawn"] = 2, + ["MeteorSwarm"] = 2, + ["SpiderSpawn"] = 3, // more spiders + ["AnomalySpawn"] = 4, + ["KudzuGrowth"] = 2, + }; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs new file mode 100644 index 00000000000..60b889e7496 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs @@ -0,0 +1,78 @@ +using System.Linq; +using Content.Server.DoAfter; +using Content.Server.Emp; +using Content.Server.GameTicking; +using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Shared.DoAfter; +using Content.Shared.WhiteDream.BloodCult.Runes; +using Robust.Server.GameObjects; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Apocalypse; + +public sealed class CultRuneApocalypseSystem : EntitySystem +{ + [Dependency] private readonly ISharedPlayerManager _playerManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly EmpSystem _emp = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly TransformSystem _transform = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnApocalypseRuneInvoked); + SubscribeLocalEvent(OnDoAfter); + } + + private void OnApocalypseRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + if (ent.Comp.Used) + { + args.Cancel(); + return; + } + + var doAfter = new DoAfterArgs(EntityManager, args.User, ent.Comp.InvokeTime, new ApocalypseRuneDoAfter(), ent) + { + BreakOnUserMove = true + }; + + _doAfter.TryStartDoAfter(doAfter); + } + + private void OnDoAfter(Entity ent, ref ApocalypseRuneDoAfter args) + { + if (args.Cancelled || EntityManager.EntityQuery().FirstOrDefault() is not { } cultRule) + return; + + ent.Comp.Used = true; + _appearance.SetData(ent, ApocalypseRuneVisuals.Used, true); + + _emp.EmpPulse(_transform.GetMapCoordinates(ent), + ent.Comp.EmpRange, + ent.Comp.EmpEnergyConsumption, + ent.Comp.EmpDuration); + + foreach (var guaranteedEvent in ent.Comp.GuaranteedEvents) + { + _gameTicker.StartGameRule(guaranteedEvent); + } + + var requiredCultistsThreshold = MathF.Floor(_playerManager.PlayerCount * ent.Comp.CultistsThreshold); + var totalCultists = cultRule.Cultists.Count + cultRule.Constructs.Count; + if (totalCultists >= requiredCultistsThreshold) + return; + + var (randomEvent, repeatTimes) = _random.Pick(ent.Comp.PossibleEvents); + for (var i = 0; i < repeatTimes; i++) + { + _gameTicker.StartGameRule(randomEvent); + } + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierComponent.cs new file mode 100644 index 00000000000..64f8fba2e78 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Barrier; + +[RegisterComponent] +public sealed partial class CultRuneBarrierComponent : Component +{ + [DataField] + public EntProtoId SpawnPrototype = "BloodCultBarrier"; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierSystem.cs new file mode 100644 index 00000000000..e4062dce625 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Barrier/CultRuneBarrierSystem.cs @@ -0,0 +1,15 @@ +namespace Content.Server.WhiteDream.BloodCult.Runes.Barrier; + +public sealed class CultRuneBarrierSystem : EntitySystem +{ + public override void Initialize() + { + SubscribeLocalEvent(OnBarrierRuneInvoked); + } + + private void OnBarrierRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + Spawn(ent.Comp.SpawnPrototype, Transform(ent).Coordinates); + Del(ent); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilComponent.cs new file mode 100644 index 00000000000..1ec1397545d --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes.BloodBoil; + +[RegisterComponent] +public sealed partial class CultRuneBloodBoilComponent : Component +{ + [DataField] + public EntProtoId ProjectilePrototype = "BloodBoilProjectile"; + + [DataField] + public float ProjectileSpeed = 50; + + [DataField] + public float TargetsLookupRange = 15f; + + [DataField] + public float ProjectileCount = 3; + + [DataField] + public float FireStacksPerProjectile = 1; + + [DataField] + public SoundSpecifier ActivationSound = new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/magic.ogg"); +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilSystem.cs new file mode 100644 index 00000000000..1c3981a392a --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/BloodBoil/CultRuneBloodBoilSystem.cs @@ -0,0 +1,86 @@ +using System.Linq; +using System.Numerics; +using Content.Server.Atmos.Components; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Body.Components; +using Content.Server.Examine; +using Content.Server.Popups; +using Content.Server.Weapons.Ranged.Systems; +using Content.Server.WhiteDream.BloodCult.BloodBoilProjectile; +using Content.Shared.Projectiles; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Random; + +namespace Content.Server.WhiteDream.BloodCult.Runes.BloodBoil; + +public sealed class CultRuneBloodBoilSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly ExamineSystem _examine = default!; + [Dependency] private readonly FlammableSystem _flammable = default!; + [Dependency] private readonly GunSystem _gun = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBloodBoilRuneInvoked); + } + + private void OnBloodBoilRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + var targets = _cultRune.GetTargetsNearRune(ent, + ent.Comp.TargetsLookupRange, + entity => + HasComp(entity) || + !HasComp(entity) || + !_examine.InRangeUnOccluded(ent, entity, ent.Comp.TargetsLookupRange)) + .ToList(); + + if (targets.Count == 0) + { + _popup.PopupEntity(Loc.GetString("cult-blood-boil-rune-no-targets"), ent, args.User); + args.Cancel(); + return; + } + + for (var i = 0; i < ent.Comp.ProjectileCount; i++) + { + var target = _random.PickAndTake(targets); + if (HasComp(target)) + { + _flammable.AdjustFireStacks(target, ent.Comp.FireStacksPerProjectile); + _flammable.Ignite(target, ent); + } + + Shoot(ent, target); + } + + _audio.PlayPvs(ent.Comp.ActivationSound, ent, AudioParams.Default.WithMaxDistance(2f)); + } + + private void Shoot(Entity ent, EntityUid target) + { + var runeMapPos = _transform.GetMapCoordinates(ent); + var targetMapPos = _transform.GetMapCoordinates(target); + + var projectileEntity = Spawn(ent.Comp.ProjectilePrototype, runeMapPos); + var direction = targetMapPos.Position - runeMapPos.Position; + + if (!HasComp(projectileEntity)) + return; + + var bloodBoilProjectile = EnsureComp(projectileEntity); + bloodBoilProjectile.Target = target; + + _gun.ShootProjectile(projectileEntity, direction, Vector2.Zero, ent, ent, ent.Comp.ProjectileSpeed); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs new file mode 100644 index 00000000000..023112a6ef4 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs @@ -0,0 +1,41 @@ +using Content.Shared.Chat; +using Content.Shared.Damage; +using Content.Shared.Humanoid; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes; + +[RegisterComponent] +public sealed partial class CultRuneBaseComponent : Component +{ + [DataField(required: true)] + public string InvokePhrase = ""; + + [DataField] + public InGameICChatType InvokeChatType = InGameICChatType.Whisper; + + [DataField] + public int RequiredInvokers = 1; + + [DataField] + public float RuneActivationRange = 1f; + + /// + /// Damage dealt on the rune activation. + /// + [DataField] + public DamageSpecifier? ActivationDamage; + + public EntProtoId HolyWaterPrototype = "HolyWater"; +} + +public sealed class TryInvokeCultRuneEvent(EntityUid user, HashSet invokers) : CancellableEntityEventArgs +{ + public EntityUid User = user; + public HashSet Invokers = invokers; +} + +public sealed class AfterRunePlaced(EntityUid user) +{ + public EntityUid User = user; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs new file mode 100644 index 00000000000..ec81af67761 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs @@ -0,0 +1,54 @@ +using Content.Shared.Humanoid; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; + +namespace Content.Server.WhiteDream.BloodCult.Runes; + +public sealed partial class CultRuneBaseSystem +{ + [Dependency] private readonly PullingSystem _pulling = default!; + + /// + /// Gets all cultists/constructs near rune. + /// + public HashSet GatherCultists(EntityUid rune, float range) + { + var runeTransform = Transform(rune); + var entities = _lookup.GetEntitiesInRange(runeTransform.Coordinates, range); + entities.RemoveWhere(entity => !HasComp(entity) && !HasComp(entity)); + return entities; + } + + /// + /// Gets all the humanoids near rune. + /// + /// The rune itself. + /// Radius for a lookup. + /// Filter to exlude from return. + public HashSet> GetTargetsNearRune(EntityUid rune, + float range, + Predicate>? exlude = null) + { + var runeTransform = Transform(rune); + var possibleTargets = _lookup.GetEntitiesInRange(runeTransform.Coordinates, range); + if (exlude != null) + possibleTargets.RemoveWhere(exlude); + + return possibleTargets; + } + + /// + /// Is used to stop target from pulling/being pulled before teleporting them. + /// + public void StopPulling(EntityUid target) + { + if (TryComp(target, out PullableComponent? pullable) && pullable.BeingPulled) + _pulling.TryStopPull(target, pullable); + + // I wish there was a better way to do it + if (_pulling.TryGetPulledEntity(target, out var pulling)) + _pulling.TryStopPull(pulling.Value); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs new file mode 100644 index 00000000000..0ad21e63693 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs @@ -0,0 +1,221 @@ +using System.Linq; +using System.Numerics; +using Content.Server.Bible.Components; +using Content.Server.Chat.Systems; +using Content.Server.Chemistry.Components; +using Content.Server.DoAfter; +using Content.Server.Fluids.Components; +using Content.Server.Popups; +using Content.Server.WhiteDream.BloodCult.Empower; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Damage; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Maps; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Runes; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Physics.Events; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes; + +public sealed partial class CultRuneBaseSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + // Drawing rune + SubscribeLocalEvent(OnRuneSelected); + SubscribeLocalEvent(OnDrawRune); + + // Erasing rune + SubscribeLocalEvent(EraseOnInteractUsing); + SubscribeLocalEvent(OnRuneErase); + SubscribeLocalEvent(EraseOnCollding); + + // Rune invoking + SubscribeLocalEvent(OnRuneActivate); + } + + private void OnRuneSelected(Entity ent, ref RuneDrawerSelectedMessage args) + { + if (!_protoManager.TryIndex(args.SelectedRune, out var runeSelector) || !CanDrawRune(args.Actor)) + return; + + var timeToDraw = runeSelector.DrawTime; + if (TryComp(args.Actor, out BloodCultEmpoweredComponent? empowered)) + timeToDraw *= empowered.RuneTimeMultiplier; + + var ev = new DrawRuneDoAfter + { + Rune = args.SelectedRune, + EndDrawingSound = ent.Comp.EndDrawingSound + }; + + var argsDoAfterEvent = new DoAfterArgs(EntityManager, args.Actor, timeToDraw, ev, args.Actor) + { + BreakOnUserMove = true, + NeedHand = true + }; + + if (_doAfter.TryStartDoAfter(argsDoAfterEvent)) + _audio.PlayPvs(ent.Comp.StartDrawingSound, args.Actor, AudioParams.Default.WithMaxDistance(2f)); + } + + private void OnDrawRune(Entity ent, ref DrawRuneDoAfter args) + { + if (args.Cancelled || !_protoManager.TryIndex(args.Rune, out var runeSelector)) + return; + + DealDamage(args.User, runeSelector.DrawDamage); + + _audio.PlayPvs(args.EndDrawingSound, args.User, AudioParams.Default.WithMaxDistance(2f)); + var rune = SpawnRune(args.User, runeSelector.Prototype); + + var ev = new AfterRunePlaced(args.User); + RaiseLocalEvent(rune, ev); + } + + private void EraseOnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + // Logic for bible erasing + if (TryComp(args.Used, out var bible) && HasComp(args.User)) + { + _popup.PopupEntity(Loc.GetString("cult-rune-erased"), ent, args.User); + _audio.PlayPvs(bible.HealSoundPath, args.User); + EntityManager.DeleteEntity(args.Target); + return; + } + + if (!TryComp(args.Used, out RuneDrawerComponent? runeDrawer)) + return; + + var argsDoAfterEvent = + new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), ent) + { + BreakOnUserMove = true, + BreakOnDamage = true, + NeedHand = true + }; + + if (_doAfter.TryStartDoAfter(argsDoAfterEvent)) + _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), ent, args.User); + } + + private void OnRuneErase(Entity ent, ref RuneEraseDoAfterEvent args) + { + if (args.Cancelled) + return; + + _popup.PopupEntity(Loc.GetString("cult-rune-erased"), ent, args.User); + EntityManager.DeleteEntity(ent); + } + + private void EraseOnCollding(Entity ent, ref StartCollideEvent args) + { + if (!TryComp(args.OtherEntity, out var solutionContainer) || + !HasComp(args.OtherEntity) && !HasComp(args.OtherEntity)) + return; + + if (_solutionContainer.EnumerateSolutions((args.OtherEntity, solutionContainer)) + .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(ent.Comp.HolyWaterPrototype))) + EntityManager.DeleteEntity(ent); + } + + private void OnRuneActivate(Entity ent, ref ActivateInWorldEvent args) + { + var runeCoordinates = Transform(ent).Coordinates; + var userCoordinates = Transform(args.User).Coordinates; + if (args.Handled || !HasComp(args.User) || + !userCoordinates.TryDistance(EntityManager, runeCoordinates, out var distance) || + distance > ent.Comp.RuneActivationRange) + return; + + args.Handled = true; + + var cultists = GatherCultists(ent, ent.Comp.RuneActivationRange); + if (cultists.Count < ent.Comp.RequiredInvokers) + { + _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), ent, args.User); + return; + } + + var tryInvokeEv = new TryInvokeCultRuneEvent(args.User, cultists); + RaiseLocalEvent(ent, tryInvokeEv); + if (tryInvokeEv.Cancelled) + return; + + foreach (var cultist in cultists) + { + DealDamage(cultist, ent.Comp.ActivationDamage); + _chat.TrySendInGameICMessage(cultist, + ent.Comp.InvokePhrase, + ent.Comp.InvokeChatType, + false, + checkRadioPrefix: false); + } + } + + private EntityUid SpawnRune(EntityUid user, EntProtoId rune) + { + var transform = Transform(user); + var snappedLocalPosition = new Vector2(MathF.Floor(transform.LocalPosition.X) + 0.5f, + MathF.Floor(transform.LocalPosition.Y) + 0.5f); + var spawnPosition = _transform.GetMapCoordinates(user); + var runeEntity = EntityManager.Spawn(rune, spawnPosition); + _transform.SetLocalPosition(runeEntity, snappedLocalPosition); + + return runeEntity; + } + + private bool CanDrawRune(EntityUid uid) + { + var transform = Transform(uid); + var gridUid = transform.GridUid; + if (!gridUid.HasValue) + { + _popup.PopupEntity(Loc.GetString("cult-rune-cant-draw"), uid, uid); + return false; + } + + var tile = transform.Coordinates.GetTileRef(); + if (tile.HasValue) + return true; + + _popup.PopupEntity(Loc.GetString("cult-cant-draw-rune"), uid, uid); + return false; + } + + private void DealDamage(EntityUid user, DamageSpecifier? damage = null) + { + if (damage is null) + return; + + // So the original DamageSpecifier will not be changed. + var newDamage = new DamageSpecifier(damage); + if (TryComp(user, out BloodCultEmpoweredComponent? empowered)) + { + foreach (var (key, value) in damage.DamageDict) + { + damage.DamageDict[key] = value * empowered.RuneDamageMultiplier; + } + } + + _damageable.TryChangeDamage(user, newDamage, true); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerComponent.cs new file mode 100644 index 00000000000..880e3f897cf --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.WhiteDream.BloodCult.Runes.Empower; + +[RegisterComponent] +public sealed partial class CultRuneEmpowerComponent : Component +{ + [DataField] + public string ComponentToGive = "BloodCultEmpowered"; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerSystem.cs new file mode 100644 index 00000000000..3c015072199 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Empower/CultRuneEmpowerSystem.cs @@ -0,0 +1,33 @@ +using Content.Server.Popups; +using Content.Server.WhiteDream.BloodCult.Empower; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Empower; + +public sealed class CultRuneEmpowerSystem : EntitySystem +{ + [Dependency] private readonly IComponentFactory _factory = default!; + + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStrengthRuneInvoked); + } + + private void OnStrengthRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + var registration = _factory.GetRegistration(ent.Comp.ComponentToGive); + if (HasComp(args.User, registration.Type)) + { + _popup.PopupEntity(Loc.GetString("cult-buff-already-buffed"), args.User, args.User); + args.Cancel(); + return; + } + + var empowered = (BloodCultEmpoweredComponent) _factory.GetComponent(ent.Comp.ComponentToGive); + empowered.TimeRemaining = empowered.DefaultTime; + AddComp(args.User, empowered); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs new file mode 100644 index 00000000000..06d750bfc82 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs @@ -0,0 +1,42 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Offering; + +[RegisterComponent] +public sealed partial class CultRuneOfferingComponent : Component +{ + /// + /// The lookup range for offering targets + /// + [DataField] + public float OfferingRange = 0.5f; + + /// + /// The amount of cultists require to convert a living target. + /// + [DataField] + public int ConvertInvokersAmount = 2; + + /// + /// The amount of cultists required to sacrifice a living target. + /// + [DataField] + public int AliveSacrificeInvokersAmount = 3; + + /// + /// The amount of charges revive rune system should recieve on sacrifice/convert. + /// + [DataField] + public int ReviveChargesPerOffering = 1; + + [DataField] + public DamageSpecifier ConvertHealing = new() + { + DamageDict = new Dictionary + { + ["Brute"] = -40, + ["Burn"] = -40 + } + }; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs new file mode 100644 index 00000000000..19614e20bd9 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs @@ -0,0 +1,125 @@ +using System.Linq; +using Content.Server.Bible.Components; +using Content.Server.Body.Systems; +using Content.Server.Cuffs; +using Content.Server.Mind; +using Content.Server.Stunnable; +using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Server.WhiteDream.BloodCult.Runes.Revive; +using Content.Shared.Cuffs.Components; +using Content.Shared.Damage; +using Content.Shared.Humanoid; +using Content.Shared.Mindshield.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.StatusEffect; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Offering; + +public sealed class CultRuneOfferingSystem : EntitySystem +{ + [Dependency] private readonly BloodCultRuleSystem _bloodCultRule = default!; + [Dependency] private readonly BodySystem _body = default!; + [Dependency] private readonly CuffableSystem _cuffable = default!; + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly CultRuneReviveSystem _cultRuneRevive = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly StunSystem _stun = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnOfferingRuneInvoked); + } + + private void OnOfferingRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + var possibleTargets = _cultRune.GetTargetsNearRune(ent, + ent.Comp.OfferingRange, + entity => HasComp(entity)); + + if (possibleTargets.Count == 0) + { + args.Cancel(); + return; + } + + var target = possibleTargets.First(); + + // if the target is dead we should always sacrifice it. + if (_mobState.IsDead(target)) + { + Sacrifice(target); + return; + } + + if (!_mind.TryGetMind(target, out _, out _) || + _bloodCultRule.IsTarget(target) || + HasComp(target) || + HasComp(target)) + { + if (!TrySacrifice(target, ent, args.Invokers.Count)) + args.Cancel(); + + return; + } + + if (!TryConvert(target, ent, args.User, args.Invokers.Count)) + args.Cancel(); + } + + private bool TrySacrifice(Entity target, + Entity rune, + int invokersAmount) + { + if (invokersAmount < rune.Comp.AliveSacrificeInvokersAmount) + return false; + + _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); + Sacrifice(target); + return true; + } + + private void Sacrifice(EntityUid target) + { + var transform = Transform(target); + var shard = Spawn("SoulShard", transform.Coordinates); + _body.GibBody(target); + + if (!_mind.TryGetMind(target, out var mindId, out _)) + return; + + _mind.TransferTo(mindId, shard); + _mind.UnVisit(mindId); + } + + private bool TryConvert(EntityUid target, + Entity rune, + EntityUid user, + int invokersAmount) + { + if (invokersAmount < rune.Comp.ConvertInvokersAmount) + return false; + + _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); + Convert(rune, target, user); + return true; + } + + private void Convert(Entity rune, EntityUid target, EntityUid user) + { + _bloodCultRule.Convert(target); + _stun.TryStun(target, TimeSpan.FromSeconds(2f), false); + if (TryComp(target, out CuffableComponent? cuffs) && cuffs.Container.ContainedEntities.Count >= 1) + { + var lastAddedCuffs = cuffs.LastAddedCuffs; + _cuffable.Uncuff(target, user, lastAddedCuffs); + } + + _statusEffects.TryRemoveStatusEffect(target, "Muted"); + _damageable.TryChangeDamage(target, rune.Comp.ConvertHealing); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingComponent.cs new file mode 100644 index 00000000000..9c049a189d9 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingComponent.cs @@ -0,0 +1,33 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Components; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Rending; + +[RegisterComponent] +public sealed partial class CultRuneRendingComponent : Component +{ + [DataField] + public float SummonTime = 40; + + [DataField] + public SoundSpecifier FinishedDrawingAudio = + new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/rending_draw_finished.ogg"); + + [DataField] + public SoundSpecifier SummonAudio = new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/rending_ritual.ogg"); + + [DataField] + public EntProtoId NarsiePrototype = "MobNarsieSpawn"; + + /// + /// Used to track if the rune is being used right now. + /// + public DoAfterId? CurrentDoAfter; + + /// + /// Used to track the summon audio entity. + /// + public Entity? AudioEntity; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs new file mode 100644 index 00000000000..d051d07528f --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs @@ -0,0 +1,109 @@ +using Content.Server.Chat.Systems; +using Content.Server.DoAfter; +using Content.Server.Pinpointer; +using Content.Server.Popups; +using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Shared.DoAfter; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.WhiteDream.BloodCult.Runes; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Player; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Rending; + +public sealed class CultRuneRendingSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly NavMapSystem _navMap = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly TransformSystem _transform = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRendingRunePlaced); + SubscribeLocalEvent(OnRendingRuneInvoked); + SubscribeLocalEvent(SpawnNarSie); + } + + private void OnRendingRunePlaced(Entity rune, ref AfterRunePlaced args) + { + var position = _transform.GetMapCoordinates(rune); + var message = Loc.GetString("cult-rending-drawing-finished", + ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(position)))); + + _chat.DispatchGlobalAnnouncement(message, + Loc.GetString("blood-cult-title"), + true, + rune.Comp.FinishedDrawingAudio, + Color.DarkRed); + } + + private void OnRendingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) + { + if (!_cultRule.TryGetTarget(out var target) || + !TryComp(target.Value, out MobStateComponent? _) || + _mobState.IsAlive(target.Value)) + { + _popup.PopupEntity(Loc.GetString("cult-rending-target-alive"), rune, args.User); + args.Cancel(); + return; + } + + if (rune.Comp.CurrentDoAfter.HasValue) + { + _popup.PopupEntity(Loc.GetString("cult-rending-already-summoning"), rune, args.User); + args.Cancel(); + return; + } + + var ev = new RendingRuneDoAfter(); + var argsDoAfterEvent = new DoAfterArgs(EntityManager, args.User, rune.Comp.SummonTime, ev, rune) + { + BreakOnUserMove = true + }; + + if (!_doAfter.TryStartDoAfter(argsDoAfterEvent, out rune.Comp.CurrentDoAfter)) + { + args.Cancel(); + return; + } + + _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-started"), + Loc.GetString("blood-cult-title"), + false, + colorOverride: Color.DarkRed); + + _appearance.SetData(rune, RendingRuneVisuals.Active, true); + rune.Comp.AudioEntity = + _audio.PlayGlobal(rune.Comp.SummonAudio, Filter.Broadcast(), false, AudioParams.Default.WithLoop(true)); + } + + private void SpawnNarSie(Entity rune, ref RendingRuneDoAfter args) + { + rune.Comp.CurrentDoAfter = null; + _audio.Stop(rune.Comp.AudioEntity); + _appearance.SetData(rune, RendingRuneVisuals.Active, false); + if (args.Cancelled) + { + _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-prevented"), + Loc.GetString("blood-cult-title"), + false, + colorOverride: Color.DarkRed); + return; + } + + var ev = new BloodCultNarsieSummoned(); + RaiseLocalEvent(ev); + Spawn(rune.Comp.NarsiePrototype, _transform.GetMapCoordinates(rune)); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs new file mode 100644 index 00000000000..1cddaef0154 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs @@ -0,0 +1,26 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Revive; + +[RegisterComponent] +public sealed partial class CultRuneReviveComponent : Component +{ + [DataField] + public float ReviveRange = 0.5f; + + [DataField] + public DamageSpecifier Healing = new() + { + DamageDict = new Dictionary + { + ["Brute"] = -100, + ["Burn"] = -100, + ["Heat"] = -100, + ["Asphyxiation"] = -100, + ["Bloodloss"] = -100, + ["Poison"] = -50, + ["Cellular"] = -50 + } + }; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveSystem.cs new file mode 100644 index 00000000000..0842422b466 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveSystem.cs @@ -0,0 +1,113 @@ +using System.Linq; +using Content.Server.EUI; +using Content.Server.Ghost; +using Content.Server.Mind; +using Content.Server.Popups; +using Content.Shared.Damage; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Revive; + +public sealed class CultRuneReviveSystem : EntitySystem +{ + [Dependency] private readonly EuiManager _eui = default!; + + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly MobThresholdSystem _threshold = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnReviveRuneInvoked); + } + + private void OnReviveRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + { + var chargesProvider = EnsureReviveRuneChargesProvider(ent); + if (chargesProvider is null) + { + _popup.PopupEntity(Loc.GetString("cult-revive-rune-no-charges"), args.User, args.User); + args.Cancel(); + return; + } + + var possibleTargets = _cultRune.GetTargetsNearRune(ent, + ent.Comp.ReviveRange, + entity => + !HasComp(entity) || + !HasComp(entity) || + !HasComp(entity) || + _mobState.IsAlive(entity) + ); + + if (possibleTargets.Count == 0) + { + _popup.PopupEntity(Loc.GetString("cult-rune-no-targets"), args.User, args.User); + args.Cancel(); + return; + } + + var victim = possibleTargets.First(); + + if (chargesProvider.Charges == 0) + { + _popup.PopupEntity(Loc.GetString("cult-revive-rune-no-charges"), args.User, args.User); + args.Cancel(); + return; + } + + Revive(victim, args.User, ent); + } + + public void AddCharges(EntityUid ent, int charges) + { + var chargesProvider = EnsureReviveRuneChargesProvider(ent); + if (chargesProvider is null) + return; + + chargesProvider.Charges += charges; + } + + private void Revive(EntityUid target, EntityUid user, Entity rune) + { + var chargesProvider = EnsureReviveRuneChargesProvider(rune); + if (chargesProvider is null) + return; + + chargesProvider.Charges--; + + var deadThreshold = _threshold.GetThresholdForState(target, MobState.Dead); + _damageable.TryChangeDamage(target, rune.Comp.Healing); + + if (!TryComp(target, out var damageable) || damageable.TotalDamage > deadThreshold) + return; + + _mobState.ChangeMobState(target, MobState.Critical, origin: user); + if (!_mind.TryGetMind(target, out _, out var mind)) + { + // if the mind is not found in the body, try to find the original cultist mind + if (TryComp(target, out var cultist) && cultist.OriginalMind != null) + mind = cultist.OriginalMind.Value; + } + + if (mind?.Session is not { } playerSession || mind.CurrentEntity == target) + return; + + // notify them they're being revived. + _eui.OpenEui(new ReturnToBodyEui(mind, _mind), playerSession); + } + + private ReviveRuneChargesProviderComponent? EnsureReviveRuneChargesProvider(EntityUid ent) + { + var mapUid = Transform(ent).MapUid; + return !mapUid.HasValue ? null : EnsureComp(mapUid.Value); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Revive/ReviveRuneChargesProviderComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Revive/ReviveRuneChargesProviderComponent.cs new file mode 100644 index 00000000000..ab167aba889 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Revive/ReviveRuneChargesProviderComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.WhiteDream.BloodCult.Runes.Revive; + +[RegisterComponent] +public sealed partial class ReviveRuneChargesProviderComponent : Component +{ + [DataField] + public int Charges = 3; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonComponent.cs new file mode 100644 index 00000000000..a5c04b54873 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Audio; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Summon; + +[RegisterComponent] +public sealed partial class CultRuneSummonComponent : Component +{ + [DataField] + public SoundPathSpecifier TeleportSound = new("/Audio/WhiteDream/BloodCult/veilin.ogg"); +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonSystem.cs new file mode 100644 index 00000000000..0c0f228dafe --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Summon/CultRuneSummonSystem.cs @@ -0,0 +1,89 @@ +using System.Linq; +using Content.Server.Popups; +using Content.Shared.Cuffs.Components; +using Content.Shared.ListViewSelector; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Server.Audio; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Summon; + +public sealed class CultRuneSummonSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSummonRuneInvoked); + SubscribeLocalEvent(OnCultistSelected); + } + + private void OnSummonRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) + { + var runeUid = rune.Owner; + if (_ui.IsUiOpen(runeUid, ListViewSelectorUiKey.Key)) + { + args.Cancel(); + return; + } + + var cultistsQuery = EntityQueryEnumerator(); + var cultist = new List(); + var invokers = args.Invokers.ToArray(); + while (cultistsQuery.MoveNext(out var cultistUid, out _)) + { + if (invokers.Contains(cultistUid)) + continue; + + var metaData = MetaData(cultistUid); + var entry = new ListViewSelectorEntry(cultistUid.ToString(), + metaData.EntityName, + metaData.EntityDescription); + + cultist.Add(entry); + } + + if (cultist.Count == 0) + { + _popup.PopupEntity(Loc.GetString("cult-rune-no-targets"), args.User, args.User); + args.Cancel(); + return; + } + + _ui.SetUiState(runeUid, ListViewSelectorUiKey.Key, new ListViewSelectorState(cultist)); + _ui.TryToggleUi(runeUid, ListViewSelectorUiKey.Key, args.User); + } + + private void OnCultistSelected(Entity ent, ref ListViewItemSelectedMessage args) + { + if (!EntityUid.TryParse(args.SelectedItem.Id, out var target)) + return; + + if (TryComp(target, out PullableComponent? pullable) && pullable.BeingPulled) + { + _popup.PopupEntity(Loc.GetString("blood-cult-summon-being-pulled"), ent, args.Actor); + return; + } + + if (TryComp(target, out CuffableComponent? cuffable) && cuffable.CuffedHandCount > 0) + { + _popup.PopupEntity(Loc.GetString("blood-cult-summon-cuffed"), ent, args.Actor); + return; + } + + var runeTransform = Transform(ent); + + _cultRune.StopPulling(target); + + _transform.SetCoordinates(target, runeTransform.Coordinates); + + _audio.PlayPvs(ent.Comp.TeleportSound, ent); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportComponent.cs new file mode 100644 index 00000000000..7acc40f727d --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportComponent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Audio; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Teleport; + +[RegisterComponent] +public sealed partial class CultRuneTeleportComponent : Component +{ + [DataField] + public float TeleportGatherRange = 0.65f; + + [DataField] + public string Name = ""; + + [DataField] + public SoundPathSpecifier TeleportInSound = new("/Audio/WhiteDream/BloodCult/veilin.ogg"); + + [DataField] + public SoundPathSpecifier TeleportOutSound = new("/Audio/WhiteDream/BloodCult/veilout.ogg"); +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportSystem.cs new file mode 100644 index 00000000000..c2f40ca0dfd --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Runes/Teleport/CultRuneTeleportSystem.cs @@ -0,0 +1,93 @@ +using Content.Server.Popups; +using Content.Shared.ListViewSelector; +using Content.Shared.WhiteDream.BloodCult.UI; +using Robust.Server.Audio; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Runes.Teleport; + +public sealed class CultRuneTeleportSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterRunePlaced); + SubscribeLocalEvent(OnNameSelected); + SubscribeLocalEvent(OnTeleportRuneInvoked); + SubscribeLocalEvent(OnTeleportRuneSelected); + } + + private void OnAfterRunePlaced(Entity rune, ref AfterRunePlaced args) + { + _ui.OpenUi(rune.Owner, NameSelectorUiKey.Key, args.User); + } + + private void OnNameSelected(Entity rune, ref NameSelectedMessage args) + { + rune.Comp.Name = args.Name; + } + + private void OnTeleportRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) + { + var runeUid = rune.Owner; + if (_ui.IsUiOpen(runeUid, ListViewSelectorUiKey.Key)) + { + args.Cancel(); + return; + } + + if (!TryGetTeleportRunes(runeUid, out var runes, args.User)) + { + args.Cancel(); + return; + } + + _ui.SetUiState(runeUid, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes)); + _ui.TryToggleUi(runeUid, ListViewSelectorUiKey.Key, args.User); + } + + private void OnTeleportRuneSelected(Entity origin, ref ListViewItemSelectedMessage args) + { + if (!EntityUid.TryParse(args.SelectedItem.Id, out var destination)) + return; + + var teleportTargets = _cultRune.GetTargetsNearRune(origin, origin.Comp.TeleportGatherRange); + var destinationTransform = Transform(destination); + + foreach (var target in teleportTargets) + { + _cultRune.StopPulling(target); + _transform.SetCoordinates(target, destinationTransform.Coordinates); + } + + _audio.PlayPvs(origin.Comp.TeleportOutSound, origin); + _audio.PlayPvs(origin.Comp.TeleportInSound, destination); + } + + public bool TryGetTeleportRunes(EntityUid user, out List runes, EntityUid? runeUid = null) + { + var runeQuery = EntityQueryEnumerator(); + runes = new List(); + while (runeQuery.MoveNext(out var targetRune, out var teleportRune)) + { + if (targetRune == runeUid) + continue; + + var entry = new ListViewSelectorEntry(targetRune.ToString(), teleportRune.Name); + runes.Add(entry); + } + + if (runes.Count != 0) + return true; + + _popup.PopupEntity(Loc.GetString("cult-teleport-not-found"), user, user); + return false; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BaseCultSpellComponent.cs b/Content.Server/WhiteDream/BloodCult/Spells/BaseCultSpellComponent.cs new file mode 100644 index 00000000000..9ace43c4896 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Spells/BaseCultSpellComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.Spells; + +[RegisterComponent] +public sealed partial class BaseCultSpellComponent : Component +{ + /// + /// If true will ignore protection like mindshield of holy magic. + /// + [DataField] + public bool BypassProtection; +} diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsHolderComponent.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsHolderComponent.cs new file mode 100644 index 00000000000..5beb41e7dea --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsHolderComponent.cs @@ -0,0 +1,31 @@ +using Content.Shared.DoAfter; +using Content.Shared.Psionics; +using Robust.Shared.Prototypes; + +namespace Content.Server.WhiteDream.BloodCult.Spells; + +[RegisterComponent] +public sealed partial class BloodCultSpellsHolderComponent : Component +{ + [DataField] + public int DefaultMaxSpells = 1; + + [DataField] + public TimeSpan SpellCreationTime = TimeSpan.FromSeconds(2); + + [DataField] + public ProtoId PowersPoolPrototype = "BloodCultPowers"; + + [ViewVariables(VVAccess.ReadOnly)] + public List SelectedSpells = new(); + + public int MaxSpells; + + public DoAfterId? DoAfterId; + + /// + /// Since radial selector menu doesn't have metadata, we use this to toggle between remove and + /// add spells modes. + /// + public bool AddSpellsMode = true; +} diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs new file mode 100644 index 00000000000..76697c252a8 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs @@ -0,0 +1,294 @@ +using Content.Server.Actions; +using Content.Server.Cuffs; +using Content.Server.DoAfter; +using Content.Server.Emp; +using Content.Server.Hands.Systems; +using Content.Server.Popups; +using Content.Server.Stunnable; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Actions; +using Content.Shared.Actions.Events; +using Content.Shared.Clothing.Components; +using Content.Shared.DoAfter; +using Content.Shared.Inventory; +using Content.Shared.Mindshield.Components; +using Content.Shared.Popups; +using Content.Shared.RadialSelector; +using Content.Shared.Speech.Muting; +using Content.Shared.StatusEffect; +using Content.Shared.Verbs; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.GameObjects; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.WhiteDream.BloodCult.Spells; + +public sealed class BloodCultSpellsSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly CuffableSystem _cuffable = default!; + [Dependency] private readonly EmpSystem _empSystem = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly StunSystem _stun = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCultTargetEvent); + SubscribeLocalEvent(OnActionGettingDisabled); + + SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent>(OnGetVerbs); + SubscribeLocalEvent(OnSpellSelected); + SubscribeLocalEvent(OnSpellCreated); + + SubscribeLocalEvent(OnStun); + SubscribeLocalEvent(OnEmp); + SubscribeLocalEvent(OnShackles); + SubscribeLocalEvent(OnSummonEquipment); + } + + #region BaseHandlers + + private void OnCultTargetEvent(Entity spell, ref EntityTargetActionEvent args) + { + if (_statusEffects.HasStatusEffect(args.Performer, "Muted")) + { + args.Handled = true; + return; + } + + if (spell.Comp.BypassProtection) + return; + + if (HasComp(args.Target) || HasComp(args.Target)) + args.Handled = true; + } + + private void OnActionGettingDisabled(Entity spell, ref ActionGettingDisabledEvent args) + { + if (TryComp(args.Performer, out BloodCultSpellsHolderComponent? spellsHolder)) + spellsHolder.SelectedSpells.Remove(spell); + + _actions.RemoveAction(args.Performer, spell); + } + + private void OnComponentStartup(Entity cultist, ref ComponentStartup args) + { + cultist.Comp.MaxSpells = cultist.Comp.DefaultMaxSpells; + } + + private void OnGetVerbs(Entity cultist, ref GetVerbsEvent args) + { + if (args.User != args.Target) + return; + + var addVerb = new ExamineVerb + { + Category = VerbCategory.BloodSpells, + Text = Loc.GetString("blood-cult-select-spells-verb"), + Priority = 1, + Act = () => SelectBloodSpells(cultist) + }; + var removeVerb = new ExamineVerb + { + Category = VerbCategory.BloodSpells, + Text = Loc.GetString("blood-cult-remove-spells-verb"), + Priority = 0, + Act = () => RemoveBloodSpells(cultist) + }; + + args.Verbs.Add(removeVerb); + args.Verbs.Add(addVerb); + } + + private void OnSpellSelected(Entity cultist, ref RadialSelectorSelectedMessage args) + { + if (!cultist.Comp.AddSpellsMode) + { + if (EntityUid.TryParse(args.SelectedItem, out var actionUid)) + { + _actions.RemoveAction(cultist, actionUid); + cultist.Comp.SelectedSpells.Remove(actionUid); + } + + return; + } + + if (cultist.Comp.SelectedSpells.Count >= cultist.Comp.MaxSpells) + { + _popup.PopupEntity(Loc.GetString("blood-cult-spells-too-many"), cultist, cultist, PopupType.Medium); + return; + } + + var createSpellEvent = new CreateSpeellDoAfterEvent + { + ActionProtoId = args.SelectedItem + }; + + var doAfter = new DoAfterArgs(EntityManager, + cultist.Owner, + cultist.Comp.SpellCreationTime, + createSpellEvent, + cultist.Owner) + { + BreakOnUserMove = true + }; + + if (_doAfter.TryStartDoAfter(doAfter, out var doAfterId)) + cultist.Comp.DoAfterId = doAfterId; + } + + private void OnSpellCreated(Entity cultist, ref CreateSpeellDoAfterEvent args) + { + cultist.Comp.DoAfterId = null; + if (args.Handled || args.Cancelled) + return; + + var action = _actions.AddAction(cultist, args.ActionProtoId); + if (action.HasValue) + cultist.Comp.SelectedSpells.Add(action.Value); + } + + #endregion + + #region SpellsHandlers + + private void OnStun(BloodCultStunEvent ev) + { + if (ev.Handled) + return; + + _statusEffects.TryAddStatusEffect(ev.Target, "Muted", ev.MuteDuration, true); + _stun.TryParalyze(ev.Target, ev.ParalyzeDuration, true); + ev.Handled = true; + } + + private void OnEmp(BloodCultEmpEvent ev) + { + if (ev.Handled) + return; + + _empSystem.EmpPulse(_transform.GetMapCoordinates(ev.Performer), ev.Range, ev.EnergyConsumption, ev.Duration); + ev.Handled = true; + } + + private void OnShackles(BloodCultShacklesEvent ev) + { + if (ev.Handled) + return; + + var shuckles = Spawn(ev.ShacklesProto); + if (!_cuffable.TryAddNewCuffs(ev.Performer, ev.Target, shuckles)) + return; + + _stun.TryKnockdown(ev.Target, ev.KnockdownDuration, true); + _statusEffects.TryAddStatusEffect(ev.Target, "Muted", ev.MuteDuration, true); + ev.Handled = true; + } + + private void OnSummonEquipment(SummonEquipmentEvent ev) + { + if (ev.Handled) + return; + + foreach (var (slot, protoId) in ev.Prototypes) + { + var entity = Spawn(protoId, _transform.GetMapCoordinates(ev.Performer)); + _hands.TryPickupAnyHand(ev.Performer, entity); + if (!TryComp(entity, out ClothingComponent? _)) + continue; + + _inventory.TryUnequip(ev.Performer, slot); + _inventory.TryEquip(ev.Performer, entity, slot, force: true); + } + + ev.Handled = true; + } + + #endregion + + #region Helpers + + private void SelectBloodSpells(Entity cultist) + { + if (!_proto.TryIndex(cultist.Comp.PowersPoolPrototype, out var pool)) + return; + + if (cultist.Comp.SelectedSpells.Count >= cultist.Comp.MaxSpells) + { + _popup.PopupEntity(Loc.GetString("blood-cult-spells-too-many"), cultist, cultist, PopupType.Medium); + return; + } + + cultist.Comp.AddSpellsMode = true; + + var radialList = new List(); + foreach (var spellId in pool.Powers) + { + var entry = new RadialSelectorEntry + { + Prototype = spellId + }; + + radialList.Add(entry); + } + + var state = new RadialSelectorState(radialList, true); + + _ui.SetUiState(cultist.Owner, RadialSelectorUiKey.Key, state); + _ui.TryToggleUi(cultist.Owner, RadialSelectorUiKey.Key, cultist.Owner); + } + + private void RemoveBloodSpells(Entity cultist) + { + if (cultist.Comp.SelectedSpells.Count == 0) + { + _popup.PopupEntity(Loc.GetString("blood-cult-no-spells"), cultist, cultist, PopupType.Medium); + return; + } + + cultist.Comp.AddSpellsMode = false; + + var radialList = new List(); + foreach (var spell in cultist.Comp.SelectedSpells) + { + var entry = new RadialSelectorEntry + { + Prototype = spell.ToString(), + Icon = GetActionIcon(spell) + }; + + radialList.Add(entry); + } + + var state = new RadialSelectorState(radialList, true); + + _ui.SetUiState(cultist.Owner, RadialSelectorUiKey.Key, state); + _ui.TryToggleUi(cultist.Owner, RadialSelectorUiKey.Key, cultist.Owner); + } + + private SpriteSpecifier? GetActionIcon(EntityUid actionUid) + { + if (TryComp(actionUid, out EntityTargetActionComponent? targetAction)) + return targetAction.Icon; + if (TryComp(actionUid, out WorldTargetActionComponent? worldTargetAction)) + return worldTargetAction.Icon; + if (TryComp(actionUid, out InstantActionComponent? instantActionComponent)) + return instantActionComponent.Icon; + + return null; + } + + #endregion +} diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs new file mode 100644 index 00000000000..bd605475ede --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs @@ -0,0 +1,67 @@ +using Content.Server.DoAfter; +using Content.Server.WhiteDream.BloodCult.Runes; +using Content.Server.WhiteDream.BloodCult.Runes.Teleport; +using Content.Shared.DoAfter; +using Content.Shared.ListViewSelector; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.Audio; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Spells; + +public sealed class BloodCultTeleportSpellSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly CultRuneBaseSystem _cultRune = default!; + [Dependency] private readonly CultRuneTeleportSystem _runeTeleport = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnTeleport); + SubscribeLocalEvent(OnTeleportRuneSelected); + SubscribeLocalEvent(OnTeleportDoAfter); + } + + private void OnTeleport(BloodCultTeleportEvent ev) + { + if (ev.Handled || !_runeTeleport.TryGetTeleportRunes(ev.Performer, out var runes)) + return; + + _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes)); + _ui.TryToggleUi(ev.Performer, ListViewSelectorUiKey.Key, ev.Performer); + ev.Handled = true; + } + + private void OnTeleportRuneSelected(Entity ent, + ref ListViewItemSelectedMessage args) + { + if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not EntityUid target || + !args.MetaData.TryGetValue("duration", out var rawDuration) || rawDuration is not TimeSpan duration) + return; + + var teleportDoAfter = new TeleportActionDoAfterEvent + { + Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)), + }; + var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target); + + _doAfter.TryStartDoAfter(doAfterArgs); + } + + private void OnTeleportDoAfter(TeleportActionDoAfterEvent ev) + { + if (ev.Target is not { } target) + return; + + var rune = GetEntity(ev.Rune); + _audio.PlayPvs(ev.TeleportOutSound, target); + + _cultRune.StopPulling(target); + _transform.SetCoordinates(target, Transform(rune).Coordinates); + + _audio.PlayPvs(ev.TeleportInSound, rune); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Spells/TwistedConstruction/TwistedConstructionSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/TwistedConstruction/TwistedConstructionSystem.cs new file mode 100644 index 00000000000..3fe6cfa6847 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Spells/TwistedConstruction/TwistedConstructionSystem.cs @@ -0,0 +1,51 @@ +using Content.Server.DoAfter; +using Content.Server.Mind; +using Content.Server.Stack; +using Content.Shared.DoAfter; +using Content.Shared.Stacks; +using Content.Shared.WhiteDream.BloodCult.Components; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Spells.TwistedConstruction; + +public sealed class TwistedConstructionSystem : EntitySystem +{ + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly StackSystem _stack = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnTwistedConstruction); + SubscribeLocalEvent(OnDoAfter); + } + + private void OnTwistedConstruction(BloodCultTwistedConstructionEvent ev) + { + if (ev.Handled || !TryComp(ev.Target, out TwistedConstructionTargetComponent? twistedConstruction)) + return; + + var args = new DoAfterArgs(EntityManager, + ev.Performer, + twistedConstruction.DoAfterDelay, + new TwistedConstructionDoAfterEvent(), + ev.Target); + + if (_doAfter.TryStartDoAfter(args)) + ev.Handled = true; + } + + private void OnDoAfter(Entity target, ref TwistedConstructionDoAfterEvent args) + { + var replacement = Spawn(target.Comp.ReplacementProto, _transform.GetMapCoordinates(target)); + if (TryComp(target, out StackComponent? stack) && TryComp(replacement, out StackComponent? targetStack)) + _stack.SetCount(replacement, stack.Count, targetStack); + + if (_mind.TryGetMind(target, out var mindId, out _)) + _mind.TransferTo(mindId, replacement); + + QueueDel(target); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactoryComponent.cs b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactoryComponent.cs new file mode 100644 index 00000000000..5e41c7475a4 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactoryComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.RadialSelector; + +namespace Content.Server.WhiteDream.BloodCult.TimedFactory; + +[RegisterComponent] +public sealed partial class TimedFactoryComponent : Component +{ + [DataField(required: true)] + public List Entries = new(); + + [DataField] + public float Cooldown = 240; + + [ViewVariables(VVAccess.ReadOnly)] + public float CooldownRemaining = 0; +} diff --git a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs new file mode 100644 index 00000000000..5dc4ff3d653 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs @@ -0,0 +1,61 @@ +using Content.Server.Hands.Systems; +using Content.Server.Popups; +using Content.Shared.RadialSelector; +using Content.Shared.UserInterface; +using Content.Shared.WhiteDream.BloodCult; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.TimedFactory; + +public sealed class TimedFactorySystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly HandsSystem _hands = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTryOpenMenu); + SubscribeLocalEvent(OnPrototypeSelected); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var factoryQuery = EntityQueryEnumerator(); + while (factoryQuery.MoveNext(out var uid, out var factory)) + { + if (factory.CooldownRemaining > 0) + factory.CooldownRemaining -= frameTime; + else + _appearance.SetData(uid, GenericCultVisuals.State, true); + } + } + + private void OnTryOpenMenu(Entity factory, ref ActivatableUIOpenAttemptEvent args) + { + var cooldown = MathF.Ceiling(factory.Comp.CooldownRemaining); + if (cooldown > 0) + { + args.Cancel(); + _popup.PopupEntity(Loc.GetString("timed-factory-cooldown", ("cooldown", cooldown)), factory, args.User); + } + + if (_ui.IsUiOpen(factory.Owner, RadialSelectorUiKey.Key)) + return; + + _ui.SetUiState(factory.Owner, RadialSelectorUiKey.Key, new RadialSelectorState(factory.Comp.Entries)); + } + + private void OnPrototypeSelected(Entity factory, ref RadialSelectorSelectedMessage args) + { + var product = Spawn(args.SelectedItem, Transform(args.Actor).Coordinates); + _hands.TryPickupAnyHand(args.Actor, product); + factory.Comp.CooldownRemaining = factory.Comp.Cooldown; + _appearance.SetData(factory, GenericCultVisuals.State, false); + } +} diff --git a/Content.Shared/Actions/Events/ActionGettingDisabledEvent.cs b/Content.Shared/Actions/Events/ActionGettingDisabledEvent.cs new file mode 100644 index 00000000000..0cf3dd6d39e --- /dev/null +++ b/Content.Shared/Actions/Events/ActionGettingDisabledEvent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Actions.Events; + +/// +/// Raised on the action entity when it is getting disabled on performer. +/// +/// The entity that performed this action. +[ByRefEvent] +public readonly record struct ActionGettingDisabledEvent(EntityUid Performer); diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index 6445039b9cb..785a4478d56 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -580,7 +580,11 @@ public void PerformAction(EntityUid performer, ActionsComponent? component, Enti dirty = true; action.Charges--; if (action is { Charges: 0, RenewCharges: false }) + { + var disabledEv = new ActionGettingDisabledEvent(performer); + RaiseLocalEvent(actionId, ref disabledEv); action.Enabled = false; + } } action.Cooldown = null; diff --git a/Content.Shared/Blocking/BlockingSystem.User.cs b/Content.Shared/Blocking/BlockingSystem.User.cs index 2cd1db7f1fe..584df3a3ffc 100644 --- a/Content.Shared/Blocking/BlockingSystem.User.cs +++ b/Content.Shared/Blocking/BlockingSystem.User.cs @@ -27,7 +27,11 @@ private void OnParentChanged(EntityUid uid, BlockingUserComponent component, ref UserStopBlocking(uid, component); } - private void OnInsertAttempt(EntityUid uid, BlockingUserComponent component, ContainerGettingInsertedAttemptEvent args) + private void OnInsertAttempt( + EntityUid uid, + BlockingUserComponent component, + ContainerGettingInsertedAttemptEvent args + ) { UserStopBlocking(uid, component); } @@ -42,32 +46,27 @@ private void OnAnchorChanged(EntityUid uid, BlockingUserComponent component, ref private void OnUserDamageModified(EntityUid uid, BlockingUserComponent component, DamageModifyEvent args) { - if (TryComp(component.BlockingItem, out var blocking)) - { - if (args.Damage.GetTotal() <= 0) - return; - - // A shield should only block damage it can itself absorb. To determine that we need the Damageable component on it. - if (!TryComp(component.BlockingItem, out var dmgComp)) - return; + // A shield should only block damage it can itself absorb. To determine that we need the Damageable component on it. + if (!TryComp(component.BlockingItem, out var blocking) || args.Damage.GetTotal() <= 0 || + !TryComp(component.BlockingItem, out var dmgComp)) + return; - var blockFraction = blocking.IsBlocking ? blocking.ActiveBlockFraction : blocking.PassiveBlockFraction; - blockFraction = Math.Clamp(blockFraction, 0, 1); - _damageable.TryChangeDamage(component.BlockingItem, blockFraction * args.OriginalDamage); + var ev = new BeforeBlockingEvent(uid, args.Origin); + RaiseLocalEvent(component.BlockingItem.Value, ev); + if (ev.Cancelled) + return; - var modify = new DamageModifierSet(); - foreach (var key in dmgComp.Damage.DamageDict.Keys) - { - modify.Coefficients.TryAdd(key, 1 - blockFraction); - } + var blockFraction = blocking.IsBlocking ? blocking.ActiveBlockFraction : blocking.PassiveBlockFraction; + blockFraction = Math.Clamp(blockFraction, 0, 1); + _damageable.TryChangeDamage(component.BlockingItem, blockFraction * args.OriginalDamage); - args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modify); + var modify = new DamageModifierSet(); + foreach (var key in dmgComp.Damage.DamageDict.Keys) + modify.Coefficients.TryAdd(key, 1 - blockFraction); - if (blocking.IsBlocking && !args.Damage.Equals(args.OriginalDamage)) - { - _audio.PlayPvs(blocking.BlockSound, uid); - } - } + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modify); + if (blocking.IsBlocking && !args.Damage.Equals(args.OriginalDamage)) + _audio.PlayPvs(blocking.BlockSound, uid); } private void OnDamageModified(EntityUid uid, BlockingComponent component, DamageModifyEvent args) @@ -87,7 +86,6 @@ private void OnEntityTerminating(EntityUid uid, BlockingUserComponent component, return; StopBlockingHelper(component.BlockingItem.Value, blockingComponent, uid); - } /// diff --git a/Content.Shared/Blocking/Components/BlockingComponent.cs b/Content.Shared/Blocking/Components/BlockingComponent.cs index f869c20679d..43162049b60 100644 --- a/Content.Shared/Blocking/Components/BlockingComponent.cs +++ b/Content.Shared/Blocking/Components/BlockingComponent.cs @@ -77,3 +77,12 @@ public sealed partial class BlockingComponent : Component [DataField("activeBlockFraction"), ViewVariables(VVAccess.ReadWrite)] public float ActiveBlockFraction = 1.0f; } + +/// +/// Raised directed on the blocking object when attempting to block. +/// +public sealed class BeforeBlockingEvent(EntityUid user, EntityUid? origin) : CancellableEntityEventArgs +{ + public EntityUid User = user; + public EntityUid? Origin = origin; +} diff --git a/Content.Shared/Cuffs/SharedCuffableSystem.cs b/Content.Shared/Cuffs/SharedCuffableSystem.cs index d70a1e63083..297fe095f8c 100644 --- a/Content.Shared/Cuffs/SharedCuffableSystem.cs +++ b/Content.Shared/Cuffs/SharedCuffableSystem.cs @@ -666,8 +666,11 @@ public void Uncuff(EntityUid target, EntityUid? user, EntityUid cuffsToRemove, C if (cuff.BreakOnRemove) { QueueDel(cuffsToRemove); - var trash = Spawn(cuff.BrokenPrototype, Transform(cuffsToRemove).Coordinates); - _hands.PickupOrDrop(user, trash); + if (cuff.BrokenPrototype.HasValue) + { + var trash = Spawn(cuff.BrokenPrototype, Transform(cuffsToRemove).Coordinates); + _hands.PickupOrDrop(user, trash); + } } else { diff --git a/Content.Shared/Doors/DoorEvents.cs b/Content.Shared/Doors/DoorEvents.cs index 08a2c8b18b1..e8d880f1b5d 100644 --- a/Content.Shared/Doors/DoorEvents.cs +++ b/Content.Shared/Doors/DoorEvents.cs @@ -37,6 +37,7 @@ public sealed class BeforeDoorOpenedEvent : CancellableEntityEventArgs public sealed class BeforeDoorClosedEvent : CancellableEntityEventArgs { public bool PerformCollisionCheck; + public EntityUid? User = null; public BeforeDoorClosedEvent(bool performCollisionCheck) { diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index b58b7b265e9..ac9256ba3cf 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -430,7 +430,11 @@ public bool CanClose(EntityUid uid, DoorComponent? door = null, EntityUid? user if (door.State is DoorState.Welded or DoorState.Closed) return false; - var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck); + var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck) + { + User = user + }; + RaiseLocalEvent(uid, ev); if (ev.Cancelled) return false; diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs index fe415e0f4a8..98b4d387fb8 100644 --- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs @@ -1,7 +1,9 @@ using System.Threading; +using Content.Shared.Whitelist; using Robust.Shared.GameStates; namespace Content.Shared.Ensnaring.Components; + /// /// Use this on something you want to use to ensnare an entity with /// @@ -61,7 +63,12 @@ public sealed partial class EnsnaringComponent : Component /// [DataField] public bool DestroyOnRemove = false; - + + /// + /// Entites which bola will pass through. + /// + [DataField] + public EntityWhitelist? IgnoredTargets; } /// diff --git a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs new file mode 100644 index 00000000000..1c97108277c --- /dev/null +++ b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs @@ -0,0 +1,33 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.ListViewSelector; + +[Serializable, NetSerializable] +public record ListViewSelectorEntry(string Id, string Name = "", string Description = ""); + +[Serializable, NetSerializable] +public enum ListViewSelectorUiKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class ListViewSelectorState( + List items, + Dictionary metaData = default!) : BoundUserInterfaceState +{ + public List Items { get; } = items; + public Dictionary MetaData = metaData; +} + +[Serializable, NetSerializable] +public sealed class ListViewItemSelectedMessage( + ListViewSelectorEntry selectedItem, + int index, + Dictionary metaData = default!) + : BoundUserInterfaceMessage +{ + public ListViewSelectorEntry SelectedItem { get; private set; } = selectedItem; + public int Index { get; private set; } = index; + public Dictionary MetaData = metaData; +} diff --git a/Content.Shared/Magic/Events/ChangeComponentSpellEvent.cs b/Content.Shared/Magic/Events/ChangeComponentSpellEvent.cs index 61e75c8b1aa..1f09bfd3b2d 100644 --- a/Content.Shared/Magic/Events/ChangeComponentSpellEvent.cs +++ b/Content.Shared/Magic/Events/ChangeComponentSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; using Robust.Shared.Prototypes; namespace Content.Shared.Magic.Events; @@ -21,4 +22,6 @@ public sealed partial class ChangeComponentsSpellEvent : EntityTargetActionEvent [DataField("speech")] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/Events/ChargeSpellEvent.cs b/Content.Shared/Magic/Events/ChargeSpellEvent.cs index 8898761ec2a..57e1eb880dd 100644 --- a/Content.Shared/Magic/Events/ChargeSpellEvent.cs +++ b/Content.Shared/Magic/Events/ChargeSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; namespace Content.Shared.Magic.Events; @@ -15,4 +16,6 @@ public sealed partial class ChargeSpellEvent : InstantActionEvent, ISpeakSpell [DataField] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs b/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs index 1405b158271..66337839596 100644 --- a/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs +++ b/Content.Shared/Magic/Events/InstantSpawnSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; using Robust.Shared.Prototypes; namespace Content.Shared.Magic.Events; @@ -17,6 +18,8 @@ public sealed partial class InstantSpawnSpellEvent : InstantActionEvent, ISpeakS [DataField] public string? Speech { get; private set; } + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; + /// /// Gets the targeted spawn positons; may lead to multiple entities being spawned. /// diff --git a/Content.Shared/Magic/Events/KnockSpellEvent.cs b/Content.Shared/Magic/Events/KnockSpellEvent.cs index 24a1700d21f..6775a679ab8 100644 --- a/Content.Shared/Magic/Events/KnockSpellEvent.cs +++ b/Content.Shared/Magic/Events/KnockSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; namespace Content.Shared.Magic.Events; @@ -14,4 +15,6 @@ public sealed partial class KnockSpellEvent : InstantActionEvent, ISpeakSpell [DataField] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs index 336ea03346b..cf338a6bb43 100644 --- a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs +++ b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; using Robust.Shared.Prototypes; namespace Content.Shared.Magic.Events; @@ -13,4 +14,6 @@ public sealed partial class ProjectileSpellEvent : WorldTargetActionEvent, ISpea [DataField] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/Events/SmiteSpellEvent.cs b/Content.Shared/Magic/Events/SmiteSpellEvent.cs index 74ca116ad59..35d9a5b1cf8 100644 --- a/Content.Shared/Magic/Events/SmiteSpellEvent.cs +++ b/Content.Shared/Magic/Events/SmiteSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; namespace Content.Shared.Magic.Events; @@ -13,4 +14,6 @@ public sealed partial class SmiteSpellEvent : EntityTargetActionEvent, ISpeakSpe [DataField] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/Events/SpeakSpellEvent.cs b/Content.Shared/Magic/Events/SpeakSpellEvent.cs index 1b3f7af63c3..d04daf139d8 100644 --- a/Content.Shared/Magic/Events/SpeakSpellEvent.cs +++ b/Content.Shared/Magic/Events/SpeakSpellEvent.cs @@ -1,8 +1,11 @@ -namespace Content.Shared.Magic.Events; +using Content.Shared.Chat; + +namespace Content.Shared.Magic.Events; [ByRefEvent] -public readonly struct SpeakSpellEvent(EntityUid performer, string speech) +public readonly struct SpeakSpellEvent(EntityUid performer, string speech, InGameICChatType chatType) { public readonly EntityUid Performer = performer; public readonly string Speech = speech; + public readonly InGameICChatType ChatType = chatType; } diff --git a/Content.Shared/Magic/Events/TeleportSpellEvent.cs b/Content.Shared/Magic/Events/TeleportSpellEvent.cs index 525c1e51052..2f07cab2016 100644 --- a/Content.Shared/Magic/Events/TeleportSpellEvent.cs +++ b/Content.Shared/Magic/Events/TeleportSpellEvent.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Chat; namespace Content.Shared.Magic.Events; @@ -8,6 +9,8 @@ public sealed partial class TeleportSpellEvent : WorldTargetActionEvent, ISpeakS [DataField] public string? Speech { get; private set; } + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; + // TODO: Move to magic component // TODO: Maybe not since sound specifier is a thing // Keep here to remind what the volume was set as diff --git a/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs b/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs index 2f50c67b3e7..01d5af8fd78 100644 --- a/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs +++ b/Content.Shared/Magic/Events/WorldSpawnSpellEvent.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Shared.Actions; +using Content.Shared.Chat; using Content.Shared.Storage; namespace Content.Shared.Magic.Events; @@ -31,4 +32,6 @@ public sealed partial class WorldSpawnSpellEvent : WorldTargetActionEvent, ISpea [DataField] public string? Speech { get; private set; } + + public InGameICChatType ChatType { get; } = InGameICChatType.Speak; } diff --git a/Content.Shared/Magic/ISpeakSpell.cs b/Content.Shared/Magic/ISpeakSpell.cs index 954b99417fc..30e7f5a2dea 100644 --- a/Content.Shared/Magic/ISpeakSpell.cs +++ b/Content.Shared/Magic/ISpeakSpell.cs @@ -1,4 +1,6 @@ -namespace Content.Shared.Magic; +using Content.Shared.Chat; + +namespace Content.Shared.Magic; public interface ISpeakSpell // The speak n spell interface { @@ -6,4 +8,6 @@ public interface ISpeakSpell // The speak n spell interface /// Localized string spoken by the caster when casting this spell. /// public string? Speech { get; } + + public InGameICChatType ChatType { get; } } diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index cc7a297aa40..b0a9fef75d0 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -513,7 +513,7 @@ private void Speak(BaseActionEvent args) if (args is not ISpeakSpell speak || string.IsNullOrWhiteSpace(speak.Speech)) return; - var ev = new SpeakSpellEvent(args.Performer, speak.Speech); + var ev = new SpeakSpellEvent(args.Performer, speak.Speech, speak.ChatType); RaiseLocalEvent(ref ev); } } diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index 11a1d94b29b..f766e55211f 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; +using System.Numerics; using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; using Content.Shared.Alert; @@ -405,6 +407,16 @@ private bool OnRequestMovePulledObject(ICommonSession? session, EntityCoordinate return false; } + public bool TryGetPulledEntity(EntityUid puller, [NotNullWhen(true)] out EntityUid? pulling, PullerComponent? component = null) + { + pulling = null; + if (!Resolve(puller, ref component, false) || !component.Pulling.HasValue) + return false; + + pulling = component.Pulling; + return true; + } + public bool IsPulling(EntityUid puller, PullerComponent? component = null) { return Resolve(puller, ref component, false) && component.Pulling != null; @@ -584,8 +596,11 @@ public bool TryStartPull(EntityUid pullerUid, EntityUid pullableUid, return true; } - public bool TryStopPull(EntityUid pullableUid, PullableComponent pullable, EntityUid? user = null) + public bool TryStopPull(EntityUid pullableUid, PullableComponent? pullable = null, EntityUid? user = null) { + if (!Resolve(pullableUid, ref pullable, false)) + return false; + var pullerUidNull = pullable.Puller; if (pullerUidNull == null) diff --git a/Content.Shared/Psionics/PsionicPowerPoolPrototype.cs b/Content.Shared/Psionics/PsionicPowerPoolPrototype.cs new file mode 100644 index 00000000000..9c505a07775 --- /dev/null +++ b/Content.Shared/Psionics/PsionicPowerPoolPrototype.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Psionics; + +[Prototype("psionicPowerPool")] +public sealed partial class PsionicPowerPoolPrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; private set; } = default!; + + [ViewVariables] + [DataField] + public List Powers = new(); +} diff --git a/Content.Shared/Repulsor/RepulseComponent.cs b/Content.Shared/Repulsor/RepulseComponent.cs new file mode 100644 index 00000000000..cef64458e27 --- /dev/null +++ b/Content.Shared/Repulsor/RepulseComponent.cs @@ -0,0 +1,19 @@ +namespace Content.Shared.Repulsor; + +[RegisterComponent] +public sealed partial class RepulseComponent : Component +{ + [DataField] + public float ForceMultiplier = 13000; + + [DataField] + public TimeSpan KnockdownDuration = TimeSpan.FromSeconds(3); + + [DataField] + public TimeSpan StunDuration = TimeSpan.FromSeconds(3); +} + +public sealed class BeforeRepulseEvent(EntityUid target) : CancellableEntityEventArgs +{ + public EntityUid Target = target; +} diff --git a/Content.Shared/Repulsor/RepulseOnTouchComponent.cs b/Content.Shared/Repulsor/RepulseOnTouchComponent.cs new file mode 100644 index 00000000000..a210f40d785 --- /dev/null +++ b/Content.Shared/Repulsor/RepulseOnTouchComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.Repulsor; + +[RegisterComponent] +public sealed partial class RepulseOnTouchComponent : Component; diff --git a/Content.Shared/Repulsor/RepulseSystem.cs b/Content.Shared/Repulsor/RepulseSystem.cs new file mode 100644 index 00000000000..70e39bad5ba --- /dev/null +++ b/Content.Shared/Repulsor/RepulseSystem.cs @@ -0,0 +1,50 @@ +using Content.Shared.Interaction; +using Content.Shared.Standing; +using Content.Shared.Stunnable; +using Robust.Shared.Physics.Events; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.Repulsor; + +public sealed class RepulseSystem : EntitySystem +{ + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedStunSystem _stunSystem = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(HandleCollision); + SubscribeLocalEvent(OnHandInteract); + } + + private void HandleCollision(Entity touchRepulsor, ref StartCollideEvent args) + { + if (!TryComp(touchRepulsor, out RepulseComponent? repulse)) + return; + + Repulse((touchRepulsor.Owner, repulse), args.OtherEntity); + } + + private void OnHandInteract(Entity repulsor, ref InteractHandEvent args) + { + Repulse(repulsor, args.User); + } + + public void Repulse(Entity repulsor, EntityUid user) + { + var ev = new BeforeRepulseEvent(user); + RaiseLocalEvent(repulsor, ev); + if (ev.Cancelled) + return; + + var direction = _transform.GetMapCoordinates(user).Position - _transform.GetMapCoordinates(repulsor).Position; + var impulse = direction * repulsor.Comp.ForceMultiplier; + + _physics.ApplyLinearImpulse(user, impulse); + _stunSystem.TryStun(user, repulsor.Comp.StunDuration, true); + _stunSystem.TryKnockdown(user, repulsor.Comp.KnockdownDuration, true, DropHeldItemsBehavior.DropIfStanding); + } +} diff --git a/Content.Shared/Stunnable/SharedStunSystem.cs b/Content.Shared/Stunnable/SharedStunSystem.cs index ad36ba9329a..989af647dc8 100644 --- a/Content.Shared/Stunnable/SharedStunSystem.cs +++ b/Content.Shared/Stunnable/SharedStunSystem.cs @@ -172,8 +172,7 @@ public bool TryStun(EntityUid uid, TimeSpan time, bool refresh, /// /// Knocks down the entity, making it fall to the ground. /// - public bool TryKnockdown(EntityUid uid, TimeSpan time, bool refresh, - DropHeldItemsBehavior behavior = DropHeldItemsBehavior.DropIfStanding, + public bool TryKnockdown(EntityUid uid, TimeSpan time, bool refresh, DropHeldItemsBehavior behavior, StatusEffectsComponent? status = null) { if (time <= TimeSpan.Zero || !Resolve(uid, ref status, false)) diff --git a/Content.Shared/UserInterface/ActivatableUIComponent.cs b/Content.Shared/UserInterface/ActivatableUIComponent.cs index 93f05acac05..30c07637420 100644 --- a/Content.Shared/UserInterface/ActivatableUIComponent.cs +++ b/Content.Shared/UserInterface/ActivatableUIComponent.cs @@ -45,6 +45,12 @@ public sealed partial class ActivatableUIComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public EntityWhitelist? RequiredItems; + /// + /// Whitelist for the user who is trying to open this UI. + /// + [DataField] + public EntityWhitelist? UserWhitelist; + /// /// If true, then this UI can only be opened via verbs. I.e., normal interactions/activations will not open /// the UI. diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs index 14ce4f20dce..19524c39b34 100644 --- a/Content.Shared/UserInterface/ActivatableUISystem.cs +++ b/Content.Shared/UserInterface/ActivatableUISystem.cs @@ -9,6 +9,8 @@ using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Utility; +using Content.Shared.Whitelist; +using Robust.Shared.Containers; namespace Content.Shared.UserInterface; @@ -16,6 +18,7 @@ public sealed partial class ActivatableUISystem : EntitySystem { [Dependency] private readonly ISharedAdminManager _adminManager = default!; [Dependency] private readonly ActionBlockerSystem _blockerSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!; [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; @@ -96,7 +99,8 @@ private bool ShouldAddVerb(EntityUid uid, ActivatableUIComponent component, G if (!args.CanAccess) return false; - if (!component.RequiredItems?.IsValid(args.Using ?? default, EntityManager) ?? false) + if (component.RequiredItems is not null && !_entityWhitelist.IsValid(component.RequiredItems, args.Using ?? default) || + component.UserWhitelist is not null && !_entityWhitelist.IsValid(component.UserWhitelist, args.User)) return false; if (component.RequireHands) @@ -153,10 +157,8 @@ private void OnInteractUsing(EntityUid uid, ActivatableUIComponent component, In if (component.VerbOnly) return; - if (component.RequiredItems == null) - return; - - if (!component.RequiredItems.IsValid(args.Used, EntityManager)) + if (component.RequiredItems is null || !_entityWhitelist.IsValid(component.RequiredItems, args.Used) || + component.UserWhitelist is not null && !_entityWhitelist.IsValid(component.UserWhitelist, args.User)) return; args.Handled = InteractUI(args.User, uid, component); diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 3331cad30b0..38ec881a7ce 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -28,10 +28,23 @@ public sealed class VerbCategory /// public readonly bool IconsOnly; - public VerbCategory(string text, string? icon, bool iconsOnly = false) + public VerbCategory(string text, bool iconsOnly = false) { Text = Loc.GetString(text); - Icon = icon == null ? null : new SpriteSpecifier.Texture(new(icon)); + IconsOnly = iconsOnly; + } + + public VerbCategory(string text, string icon, bool iconsOnly = false) + { + Text = Loc.GetString(text); + Icon = new SpriteSpecifier.Texture(new ResPath(icon)); + IconsOnly = iconsOnly; + } + + public VerbCategory(string text, SpriteSpecifier? sprite, bool iconsOnly = false) + { + Text = Loc.GetString(text); + Icon = sprite; IconsOnly = iconsOnly; } @@ -39,7 +52,8 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false) new("verb-categories-admin", "/Textures/Interface/character.svg.192dpi.png"); public static readonly VerbCategory Antag = - new("verb-categories-antag", "/Textures/Interface/VerbIcons/antag-e_sword-temp.192dpi.png", iconsOnly: true) { Columns = 5 }; + new("verb-categories-antag", "/Textures/Interface/VerbIcons/antag-e_sword-temp.192dpi.png", iconsOnly: true) + { Columns = 5 }; public static readonly VerbCategory Examine = new("verb-categories-examine", "/Textures/Interface/VerbIcons/examine.svg.192dpi.png"); @@ -60,32 +74,37 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false) new("verb-categories-unbuckle", "/Textures/Interface/VerbIcons/unbuckle.svg.192dpi.png"); public static readonly VerbCategory Rotate = - new("verb-categories-rotate", "/Textures/Interface/VerbIcons/refresh.svg.192dpi.png", iconsOnly: true) { Columns = 5 }; + new("verb-categories-rotate", "/Textures/Interface/VerbIcons/refresh.svg.192dpi.png", iconsOnly: true) + { Columns = 5 }; public static readonly VerbCategory Smite = - new("verb-categories-smite", "/Textures/Interface/VerbIcons/smite.svg.192dpi.png", iconsOnly: true) { Columns = 6 }; + new("verb-categories-smite", "/Textures/Interface/VerbIcons/smite.svg.192dpi.png", iconsOnly: true) + { Columns = 6 }; + public static readonly VerbCategory Tricks = - new("verb-categories-tricks", "/Textures/Interface/AdminActions/tricks.png", iconsOnly: true) { Columns = 5 }; + new("verb-categories-tricks", "/Textures/Interface/AdminActions/tricks.png", iconsOnly: true) + { Columns = 5 }; public static readonly VerbCategory SetTransferAmount = new("verb-categories-transfer", "/Textures/Interface/VerbIcons/spill.svg.192dpi.png"); - public static readonly VerbCategory Split = - new("verb-categories-split", null); + public static readonly VerbCategory Split = new("verb-categories-split"); + + public static readonly VerbCategory InstrumentStyle = new("verb-categories-instrument-style"); - public static readonly VerbCategory InstrumentStyle = - new("verb-categories-instrument-style", null); + public static readonly VerbCategory ChannelSelect = new("verb-categories-channel-select"); - public static readonly VerbCategory ChannelSelect = new("verb-categories-channel-select", null); + public static readonly VerbCategory SetSensor = new("verb-categories-set-sensor"); - public static readonly VerbCategory SetSensor = new("verb-categories-set-sensor", null); + public static readonly VerbCategory Lever = new("verb-categories-lever"); - public static readonly VerbCategory Lever = new("verb-categories-lever", null); + public static readonly VerbCategory SelectType = new("verb-categories-select-type"); - public static readonly VerbCategory SelectType = new("verb-categories-select-type", null); + public static readonly VerbCategory PowerLevel = new("verb-categories-power-level"); - public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null); + public static readonly VerbCategory Interaction = new("verb-categories-interaction"); - public static readonly VerbCategory Interaction = new("verb-categories-interaction", null); + public static readonly VerbCategory BloodSpells = new("verb-categories-blood-cult", + new SpriteSpecifier.Rsi(new ResPath("/Textures/WhiteDream/BloodCult/actions.rsi"), "blood_spells")); } } diff --git a/Content.Shared/Weapons/Melee/Events/AttemptMeleeEvent.cs b/Content.Shared/Weapons/Melee/Events/AttemptMeleeEvent.cs index 2800e3b34da..5f96ab2db05 100644 --- a/Content.Shared/Weapons/Melee/Events/AttemptMeleeEvent.cs +++ b/Content.Shared/Weapons/Melee/Events/AttemptMeleeEvent.cs @@ -4,4 +4,4 @@ namespace Content.Shared.Weapons.Melee.Events; /// Raised directed on a weapon when attempt a melee attack. /// [ByRefEvent] -public record struct AttemptMeleeEvent(bool Cancelled, string? Message); +public record struct AttemptMeleeEvent(bool Cancelled, string? Message, EntityUid PlayerUid); // White Dream: Add PlayerUid argument diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 8ccf7578fe7..20bf6d5c4e1 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -389,7 +389,12 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo Dirty(weaponUid, weapon); // Do this AFTER attack so it doesn't spam every tick - var ev = new AttemptMeleeEvent(); + // White Dream: Added PlayerUid + var ev = new AttemptMeleeEvent + { + PlayerUid = user + }; + RaiseLocalEvent(weaponUid, ref ev); if (ev.Cancelled) diff --git a/Content.Shared/Weapons/Reflect/ReflectSystem.cs b/Content.Shared/Weapons/Reflect/ReflectSystem.cs index 03ad97edff2..76c98a427f5 100644 --- a/Content.Shared/Weapons/Reflect/ReflectSystem.cs +++ b/Content.Shared/Weapons/Reflect/ReflectSystem.cs @@ -15,6 +15,8 @@ using Content.Shared.Standing; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Items; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; using Robust.Shared.Physics.Components; @@ -112,6 +114,10 @@ private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid ) return false; + // Non cultists can't use cult items to reflect anything. + if (HasComp(reflector) && !HasComp(user)) + return false; + if (!_random.Prob(CalcReflectChance(reflector, reflect))) return false; @@ -202,20 +208,19 @@ private bool TryReflectHitscan( Vector2 direction, [NotNullWhen(true)] out Vector2? newDirection) { + newDirection = null; if (!TryComp(reflector, out var reflect) || !reflect.Enabled || TryComp(reflector, out var staminaComponent) && staminaComponent.Critical || _standing.IsDown(reflector)) - { - newDirection = null; return false; - } + + // Non cultists can't use cult items to reflect anything. + if (HasComp(reflector) && !HasComp(user)) + return false; if (!_random.Prob(CalcReflectChance(reflector, reflect))) - { - newDirection = null; return false; - } if (_netManager.IsServer) { diff --git a/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultLeaderComponent.cs b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultLeaderComponent.cs new file mode 100644 index 00000000000..6c0a118cac5 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultLeaderComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Antag; +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.BloodCultist; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BloodCultLeaderComponent : Component, IAntagStatusIconComponent +{ + [DataField] + public ProtoId StatusIcon { get; set; } = "BloodCultLeader"; + + [DataField] + public bool IconVisibleToGhost { get; set; } = true; +} diff --git a/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistComponent.cs b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistComponent.cs new file mode 100644 index 00000000000..288d496ee5a --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistComponent.cs @@ -0,0 +1,42 @@ +using System.Threading; +using Content.Shared.Antag; +using Content.Shared.FixedPoint; +using Content.Shared.Language; +using Content.Shared.Mind; +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.BloodCultist; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BloodCultistComponent : Component, IAntagStatusIconComponent +{ + [DataField] + public float HolyConvertTime = 15f; + + [DataField] + public int MaximumAllowedEmpowers = 4; + + [DataField] + public ProtoId StatusIcon { get; set; } = "BloodCultMember"; + + [DataField] + public bool IconVisibleToGhost { get; set; } = true; + + [DataField] + public ProtoId CultLanguageId { get; set; } = "Eldritch"; + + [ViewVariables, NonSerialized] + public EntityUid? BloodSpear; + + [ViewVariables, NonSerialized] + public Entity? OriginalMind; + + [ViewVariables(VVAccess.ReadWrite)] + public FixedPoint2 RitesBloodAmount = FixedPoint2.Zero; + + public Color OriginalEyeColor = Color.White; + + public CancellationTokenSource? DeconvertToken { get; set; } +} diff --git a/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistRoleComponent.cs b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistRoleComponent.cs new file mode 100644 index 00000000000..acbb92bba48 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/BloodCultist/BloodCultistRoleComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Roles; + +namespace Content.Shared.WhiteDream.BloodCult.BloodCultist; + +[RegisterComponent] +public sealed partial class BloodCultistRoleComponent : AntagonistRoleComponent; diff --git a/Content.Shared/WhiteDream/BloodCult/Components/PentagramComponent.cs b/Content.Shared/WhiteDream/BloodCult/Components/PentagramComponent.cs new file mode 100644 index 00000000000..2d94c1aedb7 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Components/PentagramComponent.cs @@ -0,0 +1,20 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.WhiteDream.BloodCult.Components; + +[NetworkedComponent, RegisterComponent] +public sealed partial class PentagramComponent : Component +{ + public ResPath RsiPath = new("/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi"); + + public readonly string[] States = + [ + "halo1", + "halo2", + "halo3", + "halo4", + "halo5", + "halo6" + ]; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Components/PylonComponent.cs b/Content.Shared/WhiteDream/BloodCult/Components/PylonComponent.cs new file mode 100644 index 00000000000..2827f357626 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Components/PylonComponent.cs @@ -0,0 +1,58 @@ +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class PylonComponent : Component +{ + [DataField] + public bool IsActive = true; + + [DataField] + public float HealingDelay = 20; + + [DataField] + public float HealingAuraRange = 5; + + [DataField] + public float CorruptionRadius = 5; + + /// + /// Length of the cooldown in between tile corruptions. + /// + [DataField] + public float CorruptionCooldown = 5; + + /// + /// Length of the cooldown in between healinng. + /// + [DataField] + public float HealingCooldown = 20; + + [DataField] + public string CultTile = "CultFloor"; + + [DataField] + public EntProtoId TileCorruptEffect = "CultTileSpawnEffect"; + + [DataField] + public SoundSpecifier BurnHandSound = new SoundPathSpecifier("/Audio/Effects/lightburn.ogg"); + + [DataField] + public SoundSpecifier CorruptTileSound = new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/curse.ogg"); + + [DataField] + public DamageSpecifier Healing = new(); + + [DataField] + public DamageSpecifier DamageOnInteract = new(); + + [ViewVariables(VVAccess.ReadOnly)] + public float CorruptionAccumulator = 0; + + [ViewVariables(VVAccess.ReadOnly)] + public float HealingAccumulator = 0; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Components/TwistedConstructionTargetComponent.cs b/Content.Shared/WhiteDream/BloodCult/Components/TwistedConstructionTargetComponent.cs new file mode 100644 index 00000000000..79eb7d5567a --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Components/TwistedConstructionTargetComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class TwistedConstructionTargetComponent : Component +{ + [DataField(required: true)] + public EntProtoId ReplacementProto = ""; + + [DataField] + public TimeSpan DoAfterDelay = TimeSpan.FromSeconds(2); +} diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/ConstructComponent.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/ConstructComponent.cs new file mode 100644 index 00000000000..24d67ed2c8d --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/ConstructComponent.cs @@ -0,0 +1,29 @@ +using Content.Shared.Antag; +using Content.Shared.StatusIcon; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs; + +[RegisterComponent] +public sealed partial class ConstructComponent : Component, IAntagStatusIconComponent +{ + [DataField] + public List Actions = new(); + + /// + /// Used by the client to determine how long the transform animation should be played. + /// + [DataField] + public float TransformDelay = 1; + + [DataField] + public ProtoId StatusIcon { get; set; } = "BloodCultMember"; + + [DataField] + public bool IconVisibleToGhost { get; set; } = true; + + public bool Transforming = false; + public float TransformAccumulator = 0; + + public List ActionEntities = new(); +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemComponent.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemComponent.cs new file mode 100644 index 00000000000..b0a41ed31b8 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.WhiteDream.BloodCult.Items; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CultItemComponent : Component +{ + /// + /// Allow non-cultists to use this item? + /// + [DataField] + public bool AllowUseToEveryone; + + [DataField] + public TimeSpan KnockdownDuration = TimeSpan.FromSeconds(2); +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs new file mode 100644 index 00000000000..1dbbb769aad --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs @@ -0,0 +1,82 @@ +using Content.Shared.Blocking; +using Content.Shared.Ghost; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Interaction; +using Content.Shared.Inventory.Events; +using Content.Shared.Popups; +using Content.Shared.Stunnable; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Melee.Events; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; + +namespace Content.Shared.WhiteDream.BloodCult.Items; + +public sealed class CultItemSystem : EntitySystem +{ + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnBeforeThrow); + SubscribeLocalEvent(OnEquipAttempt); + SubscribeLocalEvent(OnMeleeAttempt); + SubscribeLocalEvent(OnBeforeBlocking); + } + + private void OnActivate(Entity item, ref ActivateInWorldEvent args) + { + if (CanUse(args.User)) + return; + + args.Handled = true; + KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-generic")); + } + + private void OnBeforeThrow(Entity item, ref BeforeThrowEvent args) + { + if (CanUse(args.PlayerUid)) + return; + + args.Cancelled = true; + KnockdownAndDropItem(item, args.PlayerUid, Loc.GetString("cult-item-component-throw-fail")); + } + + private void OnEquipAttempt(Entity item, ref BeingEquippedAttemptEvent args) + { + if (CanUse(args.EquipTarget)) + return; + + args.Cancel(); + KnockdownAndDropItem(item, args.Equipee, Loc.GetString("cult-item-component-equip-fail")); + } + + private void OnMeleeAttempt(Entity item, ref AttemptMeleeEvent args) + { + if (CanUse(args.PlayerUid)) + return; + + args.Cancelled = true; + KnockdownAndDropItem(item, args.PlayerUid, Loc.GetString("cult-item-component-attack-fail")); + } + + private void OnBeforeBlocking(Entity item, ref BeforeBlockingEvent args) + { + if (CanUse(args.User)) + return; + + args.Cancel(); + KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-block-fail")); + } + + private void KnockdownAndDropItem(Entity item, EntityUid user, string message) + { + _popup.PopupPredicted(message, item, user); + _stun.TryKnockdown(user, item.Comp.KnockdownDuration, true); + _hands.TryDrop(user); + } + + private bool CanUse(EntityUid? uid) => HasComp(uid) || HasComp(uid); +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchComponent.cs b/Content.Shared/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchComponent.cs new file mode 100644 index 00000000000..572e41c5883 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Items/VoidTorch/VoidTorchComponent.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Audio; + +namespace Content.Shared.WhiteDream.BloodCult.Items.VoidTorch; + +[RegisterComponent] +public sealed partial class VoidTorchComponent : Component +{ + [DataField] + public int Charges = 5; + + [DataField] + public SoundPathSpecifier TeleportSound = new("/Audio/WhiteDream/BloodCult/veilin.ogg"); + + [DataField] + public string TurnOnLightBehaviour = "turn_on"; + + [DataField] + public string TurnOffLightBehaviour = "fade_out"; + + public EntityUid? TargetItem; +} diff --git a/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorComponent.cs b/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorComponent.cs new file mode 100644 index 00000000000..608e427e4cf --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorComponent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared.WhiteDream.BloodCult.RunedDoor; + +[RegisterComponent] +public sealed partial class RunedDoorComponent : Component; diff --git a/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorSystem.cs b/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorSystem.cs new file mode 100644 index 00000000000..7d9dc2281cc --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/RunedDoor/RunedDoorSystem.cs @@ -0,0 +1,54 @@ +using Content.Shared.Doors; +using Content.Shared.Prying.Components; +using Content.Shared.Repulsor; +using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; + +namespace Content.Shared.WhiteDream.BloodCult.RunedDoor; + +public sealed class RunedDoorSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBeforeDoorOpened); + SubscribeLocalEvent(OnBeforeDoorClosed); + SubscribeLocalEvent(OnBeforePry); + SubscribeLocalEvent(BefoRepulse); + } + + private void OnBeforeDoorOpened(Entity door, ref BeforeDoorOpenedEvent args) + { + if (args.User is not { } user) + return; + + if (!CanInteract(user)) + args.Cancel(); + } + + private void OnBeforeDoorClosed(Entity door, ref BeforeDoorClosedEvent args) + { + if (args.User is not { } user) + return; + + if (!CanInteract(user)) + args.Cancel(); + } + + private void OnBeforePry(Entity door, ref BeforePryEvent args) + { + args.Cancelled = true; + } + + private void BefoRepulse(Entity door, ref BeforeRepulseEvent args) + { + if (HasComp(args.Target) || HasComp(args.Target)) + args.Cancel(); + } + + private bool CanInteract(EntityUid user) + { + return HasComp(user) || HasComp(user); + } +} diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/ApocalypseRune.cs b/Content.Shared/WhiteDream/BloodCult/Runes/ApocalypseRune.cs new file mode 100644 index 00000000000..5488226c4d0 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Runes/ApocalypseRune.cs @@ -0,0 +1,14 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.Runes; + +[Serializable, NetSerializable] +public sealed partial class ApocalypseRuneDoAfter : SimpleDoAfterEvent; + +[Serializable, NetSerializable] +public enum ApocalypseRuneVisuals +{ + Used, + Layer +} diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RendingRune.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RendingRune.cs new file mode 100644 index 00000000000..431acdaec47 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RendingRune.cs @@ -0,0 +1,14 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.Runes; + +[Serializable, NetSerializable] +public sealed partial class RendingRuneDoAfter : SimpleDoAfterEvent; + +[Serializable, NetSerializable] +public enum RendingRuneVisuals +{ + Active, + Layer +} diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs new file mode 100644 index 00000000000..b6dec321e4e --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs @@ -0,0 +1,41 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.Runes; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RuneDrawerComponent : Component +{ + [DataField] + public float EraseTime = 4f; + + [DataField] + public SoundSpecifier StartDrawingSound = new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/butcher.ogg"); + + public SoundSpecifier EndDrawingSound = new SoundPathSpecifier("/Audio/WhiteDream/BloodCult/blood.ogg"); +} + +[Serializable, NetSerializable] +public enum RuneDrawerBuiKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class RuneDrawerSelectedMessage(RuneSelectorPrototype selectedRune) : BoundUserInterfaceMessage +{ + public ProtoId SelectedRune { get; private set; } = selectedRune.ID; +} + +[Serializable, NetSerializable] +public sealed partial class RuneEraseDoAfterEvent : SimpleDoAfterEvent; + +[Serializable, NetSerializable] +public sealed partial class DrawRuneDoAfter : SimpleDoAfterEvent +{ + public ProtoId Rune; + public SoundSpecifier EndDrawingSound; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs new file mode 100644 index 00000000000..372ab866f07 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs @@ -0,0 +1,30 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.WhiteDream.BloodCult.Runes; + +[Prototype("runeSelector")] +public sealed class RuneSelectorPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + [DataField(required: true)] + public EntProtoId Prototype { get; } + + [DataField] + public float DrawTime { get; } = 4f; + + /// + /// Damage dealt on the rune drawing. + /// + [DataField] + public DamageSpecifier DrawDamage = new() + { + DamageDict = new Dictionary + { + ["Slash"] = 15, + } + }; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs new file mode 100644 index 00000000000..293a32691dc --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs @@ -0,0 +1,112 @@ +using Content.Shared.Actions; +using Content.Shared.Chat; +using Content.Shared.DoAfter; +using Content.Shared.Magic; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.Spells; + +public sealed partial class BloodCultStunEvent : EntityTargetActionEvent, ISpeakSpell +{ + [DataField] + public TimeSpan ParalyzeDuration = TimeSpan.FromSeconds(16); + + [DataField] + public TimeSpan MuteDuration = TimeSpan.FromSeconds(12); + + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class BloodCultTeleportEvent : EntityTargetActionEvent, ISpeakSpell +{ + [DataField] + public float Range = 5; + + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class BloodCultEmpEvent : InstantActionEvent, ISpeakSpell +{ + [DataField] + public float Range = 4; + + [DataField] + public float EnergyConsumption = 1000; + + [DataField] + public float Duration = 20; + + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class BloodCultShacklesEvent : EntityTargetActionEvent, ISpeakSpell +{ + [DataField] + public EntProtoId ShacklesProto = "ShadowShackles"; + + [DataField] + public TimeSpan MuteDuration = TimeSpan.FromSeconds(5); + + [DataField] + public TimeSpan KnockdownDuration = TimeSpan.FromSeconds(1); + + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class BloodCultTwistedConstructionEvent : EntityTargetActionEvent, ISpeakSpell +{ + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class SummonEquipmentEvent : InstantActionEvent, ISpeakSpell +{ + /// + /// Slot - EntProtoId + /// + [DataField] + public Dictionary Prototypes = new(); + + [DataField] + public string? Speech { get; set; } + + public InGameICChatType ChatType => InGameICChatType.Whisper; +} + +public sealed partial class BloodSpearRecalledEvent : InstantActionEvent; + +[Serializable, NetSerializable] +public sealed partial class TwistedConstructionDoAfterEvent : SimpleDoAfterEvent; + +[Serializable, NetSerializable] +public sealed partial class CreateSpeellDoAfterEvent : SimpleDoAfterEvent +{ + public EntProtoId ActionProtoId; +} + +[Serializable, NetSerializable] +public sealed partial class TeleportActionDoAfterEvent : SimpleDoAfterEvent +{ + public NetEntity Rune; + public SoundPathSpecifier TeleportInSound = new("/Audio/WhiteDream/BloodCult/veilin.ogg"); + public SoundPathSpecifier TeleportOutSound = new("/Audio/WhiteDream/BloodCult/veilout.ogg"); +} + +[Serializable, NetSerializable] +public sealed partial class BloodRitesExtractDoAfterEvent : SimpleDoAfterEvent; diff --git a/Content.Shared/WhiteDream/BloodCult/UI/BloodRites.cs b/Content.Shared/WhiteDream/BloodCult/UI/BloodRites.cs new file mode 100644 index 00000000000..961f2015a4d --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/UI/BloodRites.cs @@ -0,0 +1,25 @@ +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.UI; + +[NetSerializable, Serializable] +public enum BloodRitesUiKey : byte +{ + Key, +} + +[Serializable, NetSerializable] +public sealed class BloodRitesUiState(Dictionary crafts, FixedPoint2 storedBlood) + : BoundUserInterfaceState +{ + public Dictionary Crafts = crafts; + public FixedPoint2 StoredBlood = storedBlood; +} + +[Serializable, NetSerializable] +public sealed class BloodRitesMessage(EntProtoId selectedProto) : BoundUserInterfaceMessage +{ + public EntProtoId SelectedProto = selectedProto; +} diff --git a/Content.Shared/WhiteDream/BloodCult/UI/NameSelector.cs b/Content.Shared/WhiteDream/BloodCult/UI/NameSelector.cs new file mode 100644 index 00000000000..7b2b6c53896 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/UI/NameSelector.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult.UI; + +[Serializable, NetSerializable] +public enum NameSelectorUiKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class NameSelectedMessage(string name) + : BoundUserInterfaceMessage +{ + public string Name { get; } = name; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Visuals.cs b/Content.Shared/WhiteDream/BloodCult/Visuals.cs new file mode 100644 index 00000000000..2d01da48c97 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Visuals.cs @@ -0,0 +1,40 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.WhiteDream.BloodCult; + +[Serializable, NetSerializable] +public enum SoulShardVisualState : byte +{ + HasMind, + Blessed, + Sprite, + Glow +} + +[Serializable, NetSerializable] +public enum ConstructVisualsState : byte +{ + Transforming, + Sprite, + Glow +} + +[Serializable, NetSerializable] +public enum GenericCultVisuals : byte +{ + State, // True or False + Layer +} + +[Serializable, NetSerializable] +public enum PylonVisuals : byte +{ + Activated, + Layer +} + +[Serializable, NetSerializable] +public enum PentagramKey +{ + Key +} diff --git a/Resources/Audio/WhiteDream/BloodCult/blood.ogg b/Resources/Audio/WhiteDream/BloodCult/blood.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f6024a5ff6acdd3cd140d970828638e37726aa88 GIT binary patch literal 13657 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/blood_cult_greeting.ogg b/Resources/Audio/WhiteDream/BloodCult/blood_cult_greeting.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9fa22df51d3526ff8826be00a044d40b71215287 GIT binary patch literal 155160 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%0AoghB$nC-(vY}h5|1eFS2@X66>#fcd8}g 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↱9B_Z{n;h_x&4`} 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

`%NOCy%EvLAVx57o40O}I79q~ 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 Dq~lUW literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/butcher.ogg b/Resources/Audio/WhiteDream/BloodCult/butcher.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2e4a0d2ddc71995b05e2f55b4d981de6496a2097 GIT binary patch literal 9666 zcmai22RK~cwm(XAB3g(EqYOq6!w{ndAs8)2i4r9`gG5atB%=2ggh8T{_^Z7}o=z_KYgQ3) z5P9Emw{r9#ED`zF{k7#D(aGcukq+VHKO5mBffA*DwwYe$&%d=Ul2b;PK)R9RT?Y{z zcYCO_qm|(ad#E~8OcWs|Dkdrp70_{Ub-e3t>tXBa2`BI-I&*pyu5`_i2%rF05Sq|7 z|G_u|0H6l|OI|qLQ#*BdUSgKOgOo%y!mLd+JS8!_jnz5|(f*GCinL({08+qTfHEd$ zS>350WzWhV@EAz3g{csost??NEw2OioS1=QXFj$3g zg|LD{D8#*!t03K-O7LZ70F_uLG*DA)E%&Lm^xDgu80mF^%0VS+;mTpOCSuIcy7V2H znXgAbY9;-zf$~HTD0mkoGBz7}B?1!E)&CBejx9xj2Qb^uU7K-%0OU7$5E!XxeyH$CJgJhUc2QxGij-`kTD zynu>uW!NP<`BR9;-99mkKggCfi{cv1sU&biSk@90H;CKmL($LAXeU!4Y*cRG8(kValoI1H|_t)$bnv)u;wIS%8<3#W|0 zv&MtC<(F@nz*%@=8h_PW{ZoE_!J^PSy}udt5j+t-orZl&X$H;?Y|^*;C<$x-2_FT} zZ?`8|+cN^7elcWLOkDX~PdPke>7HgHI^nq-(J|N2g@HFPZ2Wni0VkS60U(I}1jYXt zPM~~>;@pG?!ES-qy<$B=grT^#UwWggmHrwH0z|Qp1c>73s^#Y%r6@IQUe&nCrMyH8 z8lHC=QJ_`A=Z|GjaehXo5~+GSMmu(UBggtwee1;D1Dp8&gL- zq${3Rqk>m!Sg7wiQfCJ_#HgZ+)Y4-%8)EhvVX@VdG#iny9Wk&S^R}I;wl%HsGp_zC zU{1qke!}Z-kwXX(ZdA;oS_0|6A}3QI=95$mk9q>HaRT3iWczSjVe0d>!fdMlh#ZHA zf|Q7Yu!xng7=iF)$8a3}ZMJiF=|=7U+y5Cks_wjC2O~$to%e5%(}aLr1EZ-zNNeX* zN4X);pq?t{|Ly<)Xo{oJILRZr7~wID#27}{Kws{^M+`_ELu!p6LBl2i02=`CfKCpg zk8qDua+NcpKrHi~$wHB3y=M(7pckh>(Q?~jen3XjHqhVKKptLRd zx70sNQGjWW6wn0#e?%wZJ*#`adRL}$KY}tNu@l9g_jFhtE}YCN4u|D4STCmM46AqL zCbDWoWaKhfhnIkd0CMn0oi!N8Or*dB09G^@DtK@rrXRi>hv`OqhG5XBf^@xp6vf4$ zZUk9IAU!+}qSp`afCTj_eohY@R1^RJXcH0mQxZVhr~vf*z`|YLfu~3fCYT1J$^et? z1f$kO60#2|p{sAu!)P$3Z!p86Wl#;%V${<5p>M#bV!&)LlB{J=jX1kMvZ6;%}f z!V7Iwzr@#;bXSz6l@@JOf1z#_+NiyYFD)&q*d$PEOE%iwHflwE^Wi=DMeDVNwY9Dr zwQjxDE|47jdV^q3OIdftmyO!Xm0n!B241s?W{WpLJzOmAJvZG8u5giQEcw+9G8o=R z4cvje1&_UUWe3;VcP?GMEftezj{|RtFG<4}ZB)2kYAxPS(lziiOR}B6VrG2ab^c0> z=|prke!W((rvVg%_|Sd_QYQ*An~?+w85Jeee%76PlmpnAcDG;Bi$A?`UeQo?#Ddr$ zB4C5DTOo_<60yG&5kSVZ!lXwp*ar2a$E-th^$}!T9@^+ONa78&6IbG>U^`SlM!hrr zDFfO8o;Zvl&&s=j#%3jsW3c7ywW zr(>KYz*~W=641`V?Ixz0RbKQa)F-zpsWQYmm9&GxVR@_?=<+HStSe&q0@|^JAiS`R z#WV&Ku7{P#A9o@UOkL#0aUSTB@li}PNU(N!H->xoY6cc1;CY?|LL!C= z00i%X6;YY4jYmLyCYUpcfd_<~iAIrUC0>WOLlYA)pg2&aLU$U_c5Q|PLZZng6oiJe zgf~41t9FxX=#n-gY$;dXxK**l1PJ1)WgHd_60m)50pPvmRliqoq6I>X7Mwew#^ddlhJ-)i=MRqy|8W{NEVA@}zIP-vtg2mX+= z8>&jdFHj2+bfl*P3%%A9@Wx~pgF@h|xj~?NvaX>~0x%FIa5xAbFrpJp(5W66j36v8 znUFe0P0+$1Z*o}PIK~N-B2AH3IZ6;Usi+3e8#jp*215=FK3YXdgkZoeZIf2Th}>Ze z7@w@x#b5xLV8N?nh2d4>R#8=;{lN?|ZWSppZbA(#xZVZ))ymvLl5$_S3@x1anhPwp zl}@Zp_%OhLzQ`n?g-aO?qKbeKt{~72r)xoR|6HS&UO9yp2&k3QeTg@ePM}4R1+Kv_ zf*=z(nZdvr&T)u#`&#IiId2GJrBp%DY4i0g<3-2!s=;p3Eq@2ktQZfsTTpk4X=MT}`)&($&eZMk88_6AjS<@d3l`#Z}(D;1?y70uZI=5`UsV#KhVO z3JM~H1DRz_gNR$Cq)QB9R5Vl_K_0`7BmjL-Crx~q5e)+){z5SP2FK7^ylq;-_h$+rLkkR%2Ct961&6LtAd2}ZqzzYDt0RRcKP;PDu6T>sKAKoE;V!HC_-s1t!X~SiPgKis zoPTy9qv<98`*BOiZ5P(_!N@>{Rxj<)=IC@Y74C@4(Rl`39U^zS#C3r92U8V;Y)yzY zBP$;=T{7GKvAgwa6gL+!fd)3G2>VVa>+w&s%8l?p(fkq`xi%&;stqk=2N#fp# z13r6@>&!%}-ONMo_xiW9o$mkKa&wZ>UQ;8^UF4m3bwh7{n=+1iPhBhZ_5oxu7GeK> zz%&Jmqq%jIwsMa{-pq^bEG$G%EO(A?9{VCBXKbTHl}BA{D8T-eKB?mK483e3bDu94 zFXWR`2b|mJiz*}kz*OCEmZ7QHCwu2QjnBRB{*CgS6%-Y5c|W4KN!8#gwrS-4$ItLg zAH@NkFCTPTy5qC?U!TqHyJsZoZ{v$P3vgGn==!d`Af{h?G(<<12`nAI_#<<-t~2|d z!}`V6)jJ!~_r#s~8`sacbOU-HmmaLkzs};~z5D()BrH<`;Nx(Zje~}3Tqf2I#wYM3 zV-qN+)j#hMduqRGf()ve13@}OnQ-5TX`_{Gn%sl(S|LuGpXIfir&1Z;e?=839dD0ez7YfA68y%FJ&ilrs zv=`&C_VmE@;8>p2K@>Of>o`s^3vWzYAcf^5j8|T2_C8%}FophHqGP>|ge|LoL*bH* z4p4N*=!v>h4oowd(_gjR_dsW^|JV;dyMBcC>vkRJKO8&^-3nB(@|Y7`VZWOkFpa4f ztZuk7;(Kc-+vxD%`I)ds$ob?4FNQfhq?XUGBx`MTtqxJB6$WSp4nFvPKO}n1@w~O98myTQuW+6dVKPwQoDx5BC>6Ft``}*CCN8dzqDN--TW>;5fTEXu7 z?;6IOPFat(0#4Du52HVPwJL*^j!TOSxnBV+_h)&jNU4o9Z*0Rh)x!L|w^0_yU*UF^ zB&;h$)4s2i#;H`kWEadl4W5&D)FJS={=UcFWj$<3bXm~&w>;{V8uIEGvkqkg*rhKu z2S?<;Ml)kP&syRv>>*70q``}Ku1{x{)R798_ppfW24@b6RU1Sw`y7?r${gn4Vh}5> zX|v@z=jdlCPyl~C9(Md#i1mh(`17sy@Gg+$Zxt`4y%pZJ|QpQ zg?7u!IjLNVo3tL2S7ahIXaxL5rXxnVfgwAh%3mEB#6IgsBAdwtSXVt>pc>be$Fmc&kkA=uD|%nFK_DD^VY?4ZPl;1?hc;rDoL%; ztaA6cv^oF4gZ=b*xDRh|4i-g0p(EH;o%BRdjB!DHq<^nFW0IL^^=K+BaJfC_^PkzH z8SzDTI}dBCHiye=!d&UG=#t$V8ZpoN1r`%2LO*=y z>5gxHlm0YK=k*|aPo2Do2VWVoGcoN(qdmNnqJP>%o1@Z>nu$Ir#uH`3M@>IAxj&tL*)V%}#$4~Q z{=_o%lRf-+nVw!@gSYtbm0leQPI6(qXAH*32>PDNNMP<+M4=REnn;9D`noA!@=>! z+^`&JVh^E!j@S=+#M0|kkxd=aRBteY#{hslix+fR;d)VlF%iJmKdSV~nfNr@8+`52 zo~gZ!K>Jgv%P`pc-_~a@pLHoJ#1-QX)m9oBtG%rrZ4b4PKgWA*4v4(SIlKTV>5gA& z`5dz(>D0)xH(JVb`B-_>o4S22VbAOZe%?aTvbZHn!3FZf$6L;Bmqb90ZTUNW<5YP9`V`Jd%pRZw+50XWZfdSn34GeXl z9MStL3Fzy3zYRIxI@YYm3+-^R+_ETIhas6coFyQ=jk9QuPl%)FgmY?TYirf7Q zi0)tA^3dXFd@jOBZ&SM;!sDZ5&P>cWMp73XR%UnWphZxNeY?ytmsCuN=FuoFQTIOO ziU4cHd8A~Q(EN<3HFmjAH=17iS)5WVWbAm@@Np_$q{Zb>HWafJ0VoX9wkt8TFlV&QOocEh2<7bOuE$uUZ_QpD!y&c|5EePt^mV@x8t@6=_0Y z-VlY#ltWwS4oM_pKBjAbm&Yc%{wOwg6}(_? zuzBx_eB)?k(LMXwY3;NtpY&TiN*TEa6L_$-d=+L7WbRrg`G!0X(zP^|xr*?t=L`Qf zAk22v<+aNKUxJDJu9>Wg+v;V=&3of#z8{BXYO?`)rJo$WG7(jk#g?M;hVzZKBNC-Lzosoeo3Yloyh z%s#qeI4Jh1hQ&oWX-+>``N)DVuJ*1zF77^-&o1Jo9A{s6r`FlY-Fc>Uuly<=E9WVjln^Sn}6~!oIW`67qh&b`7DiE z4VUB&SDPJopHMuAB?gW$((pqPMfJY$3n*G+UZSF}BRVYcL@gtRP1m4LcBg6u;kx4? z=OxjXLNs*>CIe*=Wlz4ARt8|k&S-9}0+r`lEqVA|&QcJWSW~MoDLP(wd(Og<_Fg%0 zLyEqYie6na?FZAf*c7!@gCAPFa@Hwp+dJ{0GYxfaJ`W#0l$MSAP=A}3ai%Pzw{96( z#qmC;xnN_gc?)J*JR994lrLx-aHKqq!zqcW?F%wgXBkMFW zPwsH`l>A_KitA?Q9B}=@i?_ahVG%zs?CyY<_KgyB&9_L+(7kfA|5l|@?2a732|P;C zA4#cX#D@gm=DagR--oX*k(}w$#^yU^(0skTAOAe}?sr|0iFqHlna9NuE~{fE^hKuC zzxvM!_T8b8nTQwJ5YR>Xej;fh|A3W_9G)mqb&`6kA~J#)-lbG|F{bRD{SYHsYx1eA zqJjT%uOCU1PSm(s%MvnPG}26+SoJ%lB`|(a^~$Qti?)PrWpzK%R zc_;6Ne##;l8Os~yDdRA6e|3{b4G1M_)o)AdNtX`zBt3-hT=BgiTjDpk^P%MC2zkx+ zb#YWtrb4CbGwnsT^Ce-a_tG+8m9qK@0TpHSwv*l>#L5L zscBDZ?oZuvHadSH!JzEcXDT&KV;9>@#BNrYH^ytiAHerIL=TkOM#fYKRyo)<%J zt@d9eY_`2P!^r+9ly{No&`N^$W$JUE4vZd&3%l)rM>hqT>;s4O>E({i6qmHvBOlo# zH`%_&DUI&cKX}!RwXSxMTsf0%QF#qALH>=NinC7M)Qs3BKlo)xvJ~@?-~L(ad!d>m~5KMSl(k zWtlqev-g&&G1t7iIO0?a$%I>UD`BSO8;0xc201>Za`(!#BKlKn7QI_v{=gGmZ`y|Vh{50I z6JHl-|LHU^leiZ7Lw3IuUt3low=DOKh?VuO2$!U}HGN4dX0r3D=30}UiETy`M%0W| zS&#i#t&wK%pdqise<@_q2E1iY8t$sE;D&Se{Y$~%~aq4?j z+}P*75@Wr>#nwWZ>pf1xlMuVvw`9FSlTJ1>Y?0SDF9f}jKi3AE4*A-5UCUG@m`_<0 zT2Pd}V>@m)M9y1}zI>kI&CfCHcD(EQ+!@Lu=Bl3Ecg;;KXBON|JrBN$Xm$A#xkjS2=BDylt|`-z}c2xnkJ8}GqKjt#JFTQ zaBz2XEu)@jAaCy0kF6Op9hW~cD?fvq_o$68Y+-#R)hUaA z!1vHh0>S-DmMU>>eShgT%Db@gH*0@}* zA~iDqr)>6OGd^s-Ym58aSxCpw^p?H zEofMJe_UTT`qi47-R4KqZ~nVhoP`e{FA8PK;j9wHOT$N(j(xHski=4Ux5Mm7)+sHl zrJ6Pk`|+yz6WY_nh<+{8U1yf;q;TCh%=8Ptv~#J!;k3Y9aJ~5}Uvn9bc3&B0T|L>e zIc_BSZI}pRVBurWJx7jSv+i_AwY=!6Q~P;I@~6K8+(f;Sb{%&DZqt5lV|(~zAoAGA zEHMo@G7Zj8J`n0AwUqui@<$eHQoQS!xE9owuQki#vG+AhO!)A)_rffzyx)2`#0aSI Zjg{^ELdF2RwSE3Y_oA>X6rlUJ_CK2~E9U?J literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/curse.ogg b/Resources/Audio/WhiteDream/BloodCult/curse.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c495f0e43980f7eaa61ed491cb0e2faf52dbff19 GIT binary patch literal 8992 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 Ch^MUp literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/enter_blood.ogg b/Resources/Audio/WhiteDream/BloodCult/enter_blood.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fb1666e48ca8e43beb1b48044778f2d57c40aabc GIT binary patch literal 20837 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 q8q85)9x!i_wE{Hrk$W%zn4{t5$p1>*vn`4Ni% literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/magic.ogg b/Resources/Audio/WhiteDream/BloodCult/magic.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c107743d805dcd04b7959e2a3b0ca58a292f4bc8 GIT binary patch literal 24183 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 G3H%>!BT0k+ literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/narsie_summoned.ogg b/Resources/Audio/WhiteDream/BloodCult/narsie_summoned.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fb35af598ed8eb6b344ee664ba18ac3ac7074393 GIT binary patch literal 49654 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 BD0Bb- literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/rending_draw_finished.ogg b/Resources/Audio/WhiteDream/BloodCult/rending_draw_finished.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bfca2abf2ca08efa8a052b81b5c4039c638e32b4 GIT binary patch literal 31013 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%0AX=|GD6~WPWTC62B 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 M@sG$_&6ghdA7cEv`~Uy| literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/rending_ritual.ogg b/Resources/Audio/WhiteDream/BloodCult/rending_ritual.ogg new file mode 100644 index 0000000000000000000000000000000000000000..44572f8ed15e28365a2d0f7cc2309c182ba1a978 GIT binary patch literal 350868 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�d&x-U1P*F)u4Cylu_cGOzv)X%pIooA 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"qb8mLzmGLQ=aWHlo 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 =dt-`r6NTlzq5ew;WMl2A#0x)tFCf4oxpN%= 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

FWN`=6q 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 ED=|9qU;qFB literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/rites.ogg b/Resources/Audio/WhiteDream/BloodCult/rites.ogg new file mode 100644 index 0000000000000000000000000000000000000000..486940a414752e888d08f354ae26bf2e4a32103f GIT binary patch literal 20637 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/smoke.ogg b/Resources/Audio/WhiteDream/BloodCult/smoke.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0109e1947c6c8e91585e06bf39f1e34fbf730d3f GIT binary patch literal 25399 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 T^u1iE19>2nTG`>6d1(U=g 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/veilin.ogg b/Resources/Audio/WhiteDream/BloodCult/veilin.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d14cf85c5d666f43655e9b20b0930e666e7ec02b GIT binary patch literal 11239 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 Ycv6Dt2h}Evhipq2Rer|hcl!YRA2M(RZ2$lO literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/veilout.ogg b/Resources/Audio/WhiteDream/BloodCult/veilout.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bf69f3c4082e399eda848a20330546c527d5aeae GIT binary patch literal 11211 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/WhiteDream/BloodCult/wand_teleport.ogg b/Resources/Audio/WhiteDream/BloodCult/wand_teleport.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e16d231dddbd877f82c4f4c647a1d9b3331bd551 GIT binary patch literal 18966 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

&~%of)&HY2n^;n0Ufjcb#+OzRHie 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 [0] indefinitely *[other] for {$timeout} seconds - } \ No newline at end of file + } + +reagent-effect-guidebook-purify-evil = Purifies evil powers diff --git a/Resources/Locale/en-US/language/languages.ftl b/Resources/Locale/en-US/language/languages.ftl index 935eef896a0..8cb420a0204 100644 --- a/Resources/Locale/en-US/language/languages.ftl +++ b/Resources/Locale/en-US/language/languages.ftl @@ -114,3 +114,8 @@ language-Kobold-description = Hiss! language-Hissing-name = Hissing language-Hissing-description = Hiss! + +language-Eldritch-name = Eldritch +language-Eldritch-description = + A language that is considered to be long forgotten - now the only speakers of this profaned tongue of screeches and + mumbles are the followers of an ancient God of Blood. diff --git a/Resources/Locale/en-US/verbs/verb-system.ftl b/Resources/Locale/en-US/verbs/verb-system.ftl index dfb4e621dca..c99f9987cbf 100644 --- a/Resources/Locale/en-US/verbs/verb-system.ftl +++ b/Resources/Locale/en-US/verbs/verb-system.ftl @@ -29,6 +29,7 @@ verb-categories-select-type = Select Type verb-categories-fax = Set Destination verb-categories-power-level = Power Level verb-categories-interaction = Interact +verb-categories-blood-cult = Blood Cult verb-common-toggle-light = Toggle light verb-common-close = Close diff --git a/Resources/Locale/en-US/white-dream/administration/antag.ftl b/Resources/Locale/en-US/white-dream/administration/antag.ftl new file mode 100644 index 00000000000..8e8a8b2ac07 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/administration/antag.ftl @@ -0,0 +1,2 @@ +admin-verb-text-make-blood-cultist = Make Blood Cultist +admin-verb-make-blood-cultist = Make the target into a blood cultist. diff --git a/Resources/Locale/en-US/white-dream/alerts.ftl b/Resources/Locale/en-US/white-dream/alerts.ftl new file mode 100644 index 00000000000..5156b31ddb0 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/alerts.ftl @@ -0,0 +1,5 @@ +alerts-blood-spells-name = Blood spells +alerts-blood-spells-desc = Click to create or remove blood spells. + +alerts-blood-cult-buff-name = Empowered +alerts-blood-cult-buff-desc = Blood magic requires much less time to cast and you lose less blood from it. You're also immune to pressure damage. diff --git a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl new file mode 100644 index 00000000000..0f7872985f0 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl @@ -0,0 +1,18 @@ +blood-cult-title = The Blood Cult +blood-cult-description = The oldest and strongest emotion of mankind is fear, and the oldest and strongest kind of fear is fear of the unknown. + +roles-antag-blood-cultist-name = Blood cultist +roles-antag-blood-cultist-objective = Summon the Old God Nar'Sie. + +blood-cult-role-greeting = The Geometer of Blood, Nar-Sie, has sent a number of her followers to Space Station. + As a cultist, you have an abundance of cult magics at your disposal, something for all situations. + You must work with your brethren to summon an avatar of your eldritch goddess! + +blood-cult-role-briefing-short = Use '^' to contact other members of your brethren. + +blood-cult-condition-win = The Geometer of Blood has successfully summoned their Eldritch Goddess! +blood-cult-condition-draw = Both parties were destroyed. +blood-cult-condition-failure = The crew have managed to stop the rending of reality! + +blood-cultists-list-start = Members of Geometer of Blood were: +blood-cultists-list-name = [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) diff --git a/Resources/Locale/en-US/white-dream/cult/items/blood-rites.ftl b/Resources/Locale/en-US/white-dream/cult/items/blood-rites.ftl new file mode 100644 index 00000000000..a33c8db8474 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/items/blood-rites.ftl @@ -0,0 +1,5 @@ +blood-rites-stored-blood = It has [color=darkred]{$amount}u. of blood[/color] stored. +blood-rites-not-enough-blood = You don't have enough blood stored. +blood-rites-heal-dead = Only a revive rune can bring back the dead. +blood-rites-no-blood-left = You use the last of drop of blood stored in your blood rites. +blood-rites-heal-no-bloodstream = You can't heal this bloodless creature. diff --git a/Resources/Locale/en-US/white-dream/cult/items/general.ftl b/Resources/Locale/en-US/white-dream/cult/items/general.ftl new file mode 100644 index 00000000000..6ad4938adea --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/items/general.ftl @@ -0,0 +1,22 @@ +cult-item-component-generic = The item refuses to obey your will. You can't use it. +cult-item-component-attack-fail = The weapon refuses to obey your will. You can't attack with it. +cult-item-component-equip-fail = The armor refuses to obey your will. You can't equip it. +cult-item-component-throw-fail = The weapon refuses to obey your will. You can't throw it. +cult-item-component-block-fail = The shield betrays you! + +soul-shard-try-insert-no-soul = The shard has no soul. +soul-shard-selector-form = Select form. + +ghost-role-information-soul-shard-name = Soul Shard +ghost-role-information-soul-shard-description = Become the servant of The Blood Cult. +ghost-role-information-soul-shard-rules = Take the form of one of the constructs and help your Masters bring their Old Goddess back to the world! + +shuttle-curse-cant-activate = Nar'Sien power doesn't seem to work. +shuttle-curse-max-charges = You try to shatter the orb, but it remains as solid as a rock! +shuttle-curse-shuttle-arrived = The shuttle has already arived! You can't delay it anymore. +shuttle-curse-shuttle-not-called = The shuttle has not yet been called. + +shuttle-curse-system-failure = SYSTEM FAILURE +shuttle-curse-success-global = The shuttle will be delayed by {$time} minutes. + +veil-shifter-cant-teleport = Couldn't find a place to teleport you. Try again! diff --git a/Resources/Locale/en-US/white-dream/cult/materials.ftl b/Resources/Locale/en-US/white-dream/cult/materials.ftl new file mode 100644 index 00000000000..6b796265a22 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/materials.ftl @@ -0,0 +1 @@ +materials-runed-metal = runed metal diff --git a/Resources/Locale/en-US/white-dream/cult/runes.ftl b/Resources/Locale/en-US/white-dream/cult/runes.ftl new file mode 100644 index 00000000000..f13e72a3726 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/runes.ftl @@ -0,0 +1,18 @@ +cult-rune-cant-draw = You can not draw rune here! +cult-rune-started-erasing = Started erasing... +cult-rune-erased = Rune has been erased. +cult-rune-not-enough-cultists = Not enough cultists to perform the ritual! +cult-rune-no-targets = No targets have been found! + +cult-teleport-not-found = No runes found. + +cult-revive-rune-no-charges = Can not perform the revive ritual: no charges left. +cult-revive-rune-already-alive = The target is already alive. + +cult-buff-already-buffed = You are already empowered. + +cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end! Nearby location: {$location}. +cult-rending-target-alive = Can not start the ritual: the target is alive. +cult-rending-already-summoning = Can not start the ritual: it's already in progress. +cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending! +cult-rending-prevented = Someone has stopped the ritual. diff --git a/Resources/Locale/en-US/white-dream/cult/shuttle-curse.ftl b/Resources/Locale/en-US/white-dream/cult/shuttle-curse.ftl new file mode 100644 index 00000000000..5a31be9c914 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/shuttle-curse.ftl @@ -0,0 +1,11 @@ +shuttle-curse-message-1 = A fuel technician just slit his own throat and begged for death. +shuttle-curse-message-2 = A scan of the shuttle's fuel tank has revealed tainting by a mixture of humanoid innards and teeth. +shuttle-curse-message-3 = A security incident involving a frenzied shuttle worker attacking coworkers with a laser cutter has just been reported as resolved by on-site security. +shuttle-curse-message-4 = A shuttle engineer began screaming 'DEATH IS NOT THE END' and ripped out wires until an arc flash seared off her flesh. +shuttle-curse-message-5 = A shuttle engineer was spotted inside the cockpit, feverishly arranging her innards on the floor in the shape of a rune before expiring. +shuttle-curse-message-6 = A shuttle inspector started laughing madly over the radio and then threw herself into an engine turbine. +shuttle-curse-message-7 = The corpse of an unidentified shuttle worker was found mutilated beyond recognition in the shuttle's main hold, with at least five unique sources of blood on the scene. +shuttle-curse-message-8 = The shuttle dispatcher was found dead with bloody symbols carved into their flesh. +shuttle-curse-message-9 = The shuttle's custodian was found washing the windows with their own blood. +shuttle-curse-message-10 = The shuttle's navigation programming was replaced by a file containing just two words: IT COMES. +shuttle-curse-message-11 = The shuttle's transponder is emitting the encoded message 'FEAR THE OLD BLOOD' in lieu of its assigned identification signal. diff --git a/Resources/Locale/en-US/white-dream/cult/spells.ftl b/Resources/Locale/en-US/white-dream/cult/spells.ftl new file mode 100644 index 00000000000..f0934d74cb9 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/spells.ftl @@ -0,0 +1,5 @@ +blood-cult-spells-too-many = Too many spells already selected. +blood-cult-no-spells = You have no spells selected. + +blood-cult-select-spells-verb = Select blood spells +blood-cult-remove-spells-verb = Remove blood spells diff --git a/Resources/Locale/en-US/white-dream/cult/structures/pylon.ftl b/Resources/Locale/en-US/white-dream/cult/structures/pylon.ftl new file mode 100644 index 00000000000..de81f3a1b8a --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/structures/pylon.ftl @@ -0,0 +1 @@ +pylon-placement-another-pylon-nearby = Can't place pylon here as another pylon is nearby. diff --git a/Resources/Locale/en-US/white-dream/cult/structures/timed-factory.ftl b/Resources/Locale/en-US/white-dream/cult/structures/timed-factory.ftl new file mode 100644 index 00000000000..e8728c0285c --- /dev/null +++ b/Resources/Locale/en-US/white-dream/cult/structures/timed-factory.ftl @@ -0,0 +1 @@ +timed-factory-cooldown = The factory is recharging. Time left: {$cooldown} diff --git a/Resources/Locale/en-US/white-dream/name-selector.ftl b/Resources/Locale/en-US/white-dream/name-selector.ftl new file mode 100644 index 00000000000..c7f71045626 --- /dev/null +++ b/Resources/Locale/en-US/white-dream/name-selector.ftl @@ -0,0 +1,2 @@ +name-selector-title = Select a name +name-selector-accept-button = Accept diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index 7974b06870e..5e3652d93d3 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -228,6 +228,8 @@ - TauCetiBasic - RobotTalk - type: PsionicInsulation + - type: TwistedConstructionTarget + replacementProto: ConstructShell - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml index d80eb4699d1..c3ae577120d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml @@ -106,6 +106,8 @@ - type: OfferItem - type: LayingDown - type: Carriable + - type: StatusIcon + bounds: -0.5,-0.5,0.5,0.5 - type: StepTriggerImmune whitelist: types: diff --git a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml index 7030572cf47..9fa58d35f8e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/narsie.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/narsie.yml @@ -87,13 +87,6 @@ bodyType: Dynamic bodyStatus: InAir - type: CanMoveInAir - # singulose components - - type: EventHorizon - radius: 5 - canBreachContainment: true - - type: GravityWell - baseRadialAcceleration: 6 - maxRange: 8 - type: WarpPoint follow: true location: Nar'Sie diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml index 0163f6727e7..6ca0435b35e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml @@ -207,6 +207,10 @@ type: HumanoidMarkingModifierBoundUserInterface enum.StrippingUiKey.Key: type: StrippableBoundUserInterface + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + enum.ListViewSelectorUiKey.Key: + type: ListViewSelectorBUI enum.SurgeryUIKey.Key: type: SurgeryBui - type: Emoting diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 24ee2a964a5..5c6a0fcaa16 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -197,6 +197,10 @@ enum.InstrumentUiKey.Key: type: InstrumentBoundUserInterface requireInputValidation: false + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + enum.ListViewSelectorUiKey.Key: + type: ListViewSelectorBUI enum.SurgeryUIKey.Key: type: SurgeryBui - type: Puller diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 95ecd3fe324..072c46626f3 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -295,6 +295,8 @@ - type: ShortConstruction entries: - prototype: SecureWindoor + - type: TwistedConstructionTarget + replacementProto: RunedMetal1 - type: entity parent: SheetPlasteel diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index e7ebb1b98d4..f0d9a7c0b1b 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -309,55 +309,6 @@ Piercing: 1 #Have it break into brass when clock cult is in -- type: entity - name: mirror shield - parent: BaseShield - id: MirrorShield - description: Glows an eerie red. You hear the Geometer whispering... - components: - - type: Sprite - state: mirror-icon - - type: Item - heldPrefix: mirror - - type: Reflect - reflectProb: 0.95 - innate: true - reflects: - - Energy - - type: Blocking #Mirror shield reflects heat/laser, but is relatively weak to everything else. - passiveBlockModifier: - coefficients: - Blunt: 1.2 - Slash: 1.2 - Piercing: 1.2 - Heat: .7 - activeBlockModifier: - coefficients: - Blunt: 1.2 - Slash: 1.2 - Piercing: 1.2 - Heat: .6 - flatReductions: - Heat: 1 - blockSound: !type:SoundPathSpecifier - path: /Audio/Effects/glass_step.ogg - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 40 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - !type:PlaySoundBehavior - sound: - collection: GlassBreak - - !type:SpawnEntitiesBehavior - spawn: - SheetGlass: - min: 5 - max: 5 - - type: entity name: energy shield parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/endoskeleton.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/endoskeleton.yml index 98f953f6824..e1a2ff18476 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/endoskeleton.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/endoskeleton.yml @@ -223,3 +223,6 @@ - type: GuideHelp guides: - Cyborgs + - type: TwistedConstructionTarget + replacementProto: ConstructShell + doAfterDelay: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index a681ef52ebf..3fee36a58af 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -1,60 +1,3 @@ -- type: entity - name: ritual dagger - parent: BaseItem - id: RitualDagger - description: A strange dagger used by sinister groups for rituals and sacrifices. - components: - - type: Sharp - - type: Sprite - sprite: Objects/Weapons/Melee/cult_dagger.rsi - state: icon - - type: MeleeWeapon - wideAnimationRotation: -135 - attackRate: 1.25 - range: 1.5 - damage: - types: - Slash: 8 - heavyRateModifier: 0.9 - heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 5 - - type: Item - size: Normal - - type: Clothing - sprite: Objects/Weapons/Melee/cult_dagger.rsi - slots: - - back - - type: DisarmMalus - -- type: entity - name: eldritch blade - parent: BaseItem - id: EldritchBlade - description: A sword humming with unholy energy. - components: - - type: Sharp - - type: Sprite - sprite: Objects/Weapons/Melee/cult_blade.rsi - state: icon - - type: MeleeWeapon - wideAnimationRotation: -135 - attackRate: 0.75 - range: 1.65 - damage: - types: - Slash: 12 - heavyDamageBaseModifier: 1.2 - heavyStaminaCost: 7.5 - maxTargets: 6 - angle: 90 - - type: Item - size: Normal - - type: Clothing - sprite: Objects/Weapons/Melee/cult_blade.rsi - slots: - - back - - type: DisarmMalus - - type: entity name: unholy halberd parent: BaseItem diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 586902bd776..97a6d8e076e 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -153,6 +153,9 @@ - type: InteractionVerbs allowedVerbs: - KnockOn + - type: TwistedConstructionTarget + replacementProto: CultDoor + doAfterDelay: 10 placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml index 7b56e6d36b5..243f51ca6fa 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml @@ -82,4 +82,4 @@ mask: - MachineMask layer: - - WallLayer \ No newline at end of file + - WallLayer diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 675de3dab55..b3ea345681a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -191,6 +191,7 @@ parent: BaseWall id: WallCult name: cult wall + description: Keeps the cult in and the crew out. components: - type: Tag tags: @@ -215,6 +216,9 @@ - type: IconSmooth key: walls base: cult + - type: Construction + graph: CultGirder + node: wall - type: entity parent: BaseWall diff --git a/Resources/Prototypes/Language/FactionSpecific/blood_cult.yml b/Resources/Prototypes/Language/FactionSpecific/blood_cult.yml new file mode 100644 index 00000000000..6d336743520 --- /dev/null +++ b/Resources/Prototypes/Language/FactionSpecific/blood_cult.yml @@ -0,0 +1,159 @@ +# Used by followers of Nar'Sie +- type: language + id: Eldritch + speech: + color: "#dc143c" + obfuscation: + !type:SyllableObfuscation + minSyllables: 2 # Replacements are really short + maxSyllables: 7 + replacement: + - "'ra" + - so + - at + - il + - "'ta" + - gh + - sh + - ya + - "'te" + - sh + - ol + - ma + - om + - ig + - ni + - in + - sha + - mir + - sas + - mah + - zar + - tok + - lyr + - nqa + - nap + - olt + - val + - qha + - fwe + - ath + - yro + - eth + - gal + - gib + - bar + - jin + - kla + - atu + - kal + - lig + - yoka + - drak + - loso + - arta + - weyh + - ines + - toth + - fara + - amar + - nyag + - eske + - reth + - dedo + - btoh + - nikt + - neth + - kanas + - garis + - uloft + - tarat + - khari + - thnor + - rekka + - ragga + - rfikk + - harfr + - andid + - ethra + - dedol + - totum + - ntrath + - keriam + - sha + - mir + - sas + - mah + - hra + - zar + - "'tok" + - lyr + - nqa + - nap + - olt + - val + - yam + - qha + - fel + - det + - fwe + - mah + - erl + - ath + - yro + - eth + - gal + - mud + - gib + - bar + - tea + - fuu + - jin + - kla + - atu + - kal + - lig + - yoka + - drak + - loso + - arta + - weyh + - ines + - toth + - fara + - amar + - nyag + - eske + - reth + - dedo + - btoh + - nikt + - neth + - abis + - kanas + - garis + - uloft + - tarat + - khari + - thnor + - rekka + - ragga + - rfikk + - harfr + - andid + - ethra + - dedol + - totum + - verbot + - pleggh + - ntrath + - barhah + - pasnar + - keriam + - usinar + - savrae + - amutan + - tannin + - remium + - barada + - forbici diff --git a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml index 24d83be9431..8ba31c15d1b 100644 --- a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/drinks.yml @@ -67,42 +67,3 @@ - !type:AdjustReagent reagent: Nutriment amount: 0.1 - -- type: reagent - id: HolyWater - name: reagent-name-holywater - parent: BaseDrink - desc: reagent-name-holywater - physicalDesc: reagent-physical-desc-translucent - flavor: holy - color: "#75b1f0" - boilingPoint: 100.0 - meltingPoint: 0.0 - reactiveEffects: - Acidic: - methods: [ Touch ] - effects: - - !type:HealthChange - scaleByQuantity: true - ignoreResistances: false - damage: - types: - Holy: 0.5 - metabolisms: #Could nullify debuffs of feeding. - Drink: - effects: - - !type:SatiateThirst - factor: 3 - Medicine: - effects: - - !type:ModifyBloodLevel - amount: 0.1 - - !type:HealthChange - damage: - groups: - Burn: -0.5 - types: - Holy: 1 - plantMetabolism: #Heals plants a little with the holy power within it. - - !type:PlantAdjustHealth - amount: 0.1 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/drink.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/drink.yml index 5645b17a67e..66192e9ace8 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/drink.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/drink.yml @@ -143,15 +143,3 @@ amount: 1 products: GrapeSoda: 3 - -- type: reaction - id: HolyWater - reactants: - Water: - amount: 1 - Wine: - amount: 1 - Mercury: - amount: 1 - products: - HolyWater: 3 diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/single_reagent.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/single_reagent.yml index 189ce2bb8d3..6cb548a51ac 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/single_reagent.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Reactions/single_reagent.yml @@ -1,5 +1,6 @@ - type: reaction id: BlessHolyWater + sound: /Audio/Effects/holy.ogg impact: Low requiredMixerCategories: - Holy diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index f5edc342166..0c3731aea8e 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -1260,3 +1260,47 @@ - "psicodine-effect-anxieties-wash-away" - "psicodine-effect-at-peace" probability: 0.2 + +- type: reagent + id: HolyWater + name: reagent-name-holywater + group: Medicine + desc: reagent-desc-holywater + physicalDesc: reagent-physical-desc-translucent + flavor: holy + color: "#75b1f0" + boilingPoint: 100.0 + meltingPoint: 0.0 + reactiveEffects: + Acidic: + methods: [ Touch ] + effects: + - !type:HealthChange + scaleByQuantity: true + ignoreResistances: false + damage: + types: + Holy: 0.5 + metabolisms: #Could nullify debuffs of feeding. + Drink: + effects: + - !type:SatiateThirst + factor: 3 + Medicine: + effects: + - !type:ModifyBloodLevel + amount: 0.1 + - !type:HealthChange + damage: + groups: + Brute: -0.5 + Burn: -0.5 + types: + Holy: 1 + - !type:PurifyEvil + conditions: + - !type:ReagentThreshold + min: 15 + plantMetabolism: #Heals plants a little with the holy power within it. + - !type:PlantAdjustHealth + amount: 0.1 diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cult_constructs.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cult_constructs.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cult_items.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cult_items.yml new file mode 100644 index 00000000000..a134bf0486c --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Actions/cult_items.yml @@ -0,0 +1,16 @@ +- type: entity + id: ActionBloodSpearRecall + name: Recall spear + description: Recalls your blood spear back to your hand. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: stun + - type: InstantAction + itemIconStyle: BigAction + useDelay: 30 + icon: + sprite: WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi + state: icon + event: !type:BloodSpearRecalledEvent diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cult_leader.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cult_leader.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml new file mode 100644 index 00000000000..814b950ead1 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml @@ -0,0 +1,195 @@ +- type: entity + id: ActionBloodCultStun + name: Stun + description: Empowers your hand to stun and mute a victim on contact. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: stun + - type: EntityTargetAction + checkCanAccess: false + range: 3 + itemIconStyle: BigAction + charges: 1 + temporary: true + canTargetSelf: false + interactOnMiss: false + whitelist: + components: + - Body + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: stun + event: !type:BloodCultStunEvent + speech: "Fuu ma'jin!" + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultTeleport + name: Teleport + description: Empowers your hand to teleport yourself or another cultist to a teleport rune on contact. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: teleport + - type: EntityTargetAction + checkCanAccess: false + range: 3 + itemIconStyle: BigAction + charges: 1 + temporary: true + interactOnMiss: false + whitelist: + components: + - BloodCultist + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: teleport + event: !type:BloodCultTeleportEvent + speech: "Sas'so c'arta forbici" + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultEmp + name: Electromagnetic Pulse + description: Emits a large electromagnetic pulse. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_emp + - type: InstantAction + itemIconStyle: BigAction + charges: 1 + temporary: true + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: teleport + event: !type:BloodCultEmpEvent + speech: "Ta'gh fara'qha fel d'amar det!" + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultShadowShackles + name: shadow shackles + description: Empowers your hand to handcuff a victim on contact, and mute them if successful. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: shackles + - type: EntityTargetAction + checkCanAccess: false + range: 3 + itemIconStyle: BigAction + charges: 4 + temporary: true + canTargetSelf: false + interactOnMiss: false + whitelist: + components: + - Body + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: shackles + event: !type:BloodCultShacklesEvent + speech: "In'totum Lig'abis!" + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultTwistedConstruction + name: twisted construction + description: Empowers your hand to corrupt certain metallic objects. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: transmute + - type: EntityTargetAction + checkCanAccess: false + range: 3 + itemIconStyle: BigAction + charges: 1 + temporary: true + canTargetSelf: false + interactOnMiss: false + whitelist: + components: + - TwistedConstructionTarget + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: transmute + event: !type:BloodCultTwistedConstructionEvent + speech: "Ethra p'ni dedol!" + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultSummonCombatEquipment + name: summon combat equipment + description: Allows you to summon combat cult gear, including cult armor, a cult bola and a cult sword. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_combat_equipment + - type: InstantAction + itemIconStyle: BigAction + charges: 1 + temporary: true + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_combat_equipment + event: !type:SummonEquipmentEvent + speech: "Wur d'dai leev'mai k'sagan!" + prototypes: + outerClothing: ClothingOuterCultArmor + hand1: EldritchLongsword + hand2: CultBola + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultSummonRitualDagger + name: summon ritual dagger + description: Allows you to summon a ritual dagger, in case you've lost the dagger that was given to you. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_dagger + - type: InstantAction + itemIconStyle: BigAction + charges: 1 + temporary: true + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_dagger + event: !type:SummonEquipmentEvent + speech: "Wur d'dai leev'mai k'sagan!" + prototypes: + hand: RitualDagger + - type: BaseCultSpell + +- type: entity + id: ActionBloodCultBloodRites + name: blood rites + description: Empowers your hand to absorb blood to be used for advanced rites, or heal a cultist on contact. Use the spell in-hand to cast advanced rites + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: blood_rites + - type: InstantAction + itemIconStyle: BigAction + charges: 1 + useDelay: 3 + temporary: true + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: blood_rites + event: !type:SummonEquipmentEvent + speech: "Fel'th Dol Ab'orod!" + prototypes: + hand1: BloodRitesAura + - type: BaseCultSpell diff --git a/Resources/Prototypes/WhiteDream/Entities/Clothing/Cult/armor.yml b/Resources/Prototypes/WhiteDream/Entities/Clothing/Cult/armor.yml new file mode 100644 index 00000000000..ea8e22b80d9 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Clothing/Cult/armor.yml @@ -0,0 +1,123 @@ +- type: entity + parent: ClothingOuterHardsuitBase + id: ClothingOuterCultArmor + name: true nar'sien hardened armor + description: heavily-armored exosuit worn by warriors of the Nar'Sien cult. It can withstand hard vacuum. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi + - type: Clothing + sprite: WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi + - type: PressureProtection + highPressureMultiplier: 0.02 + lowPressureMultiplier: 1000 + - type: ClothingSpeedModifier + walkModifier: 1.0 + sprintModifier: 1.0 + - type: Armor + modifiers: + coefficients: + Blunt: 0.5 + Slash: 0.6 + Piercing: 0.6 + Heat: 0.7 + Caustic: 0.2 + Radiation: 0.2 + - type: ExplosionResistance + damageCoefficient: 0.5 + - type: TemperatureProtection + coefficient: 0.001 + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetCultArmor + - type: CultItem + +- type: entity + parent: ClothingHeadHardsuitBase + id: ClothingHeadHelmetCultArmor + categories: [ HideSpawnMenu ] + name: true nar'sien hardened helmet + description: A heavily-armored helmet worn by warriors of the Nar'Sien cult. It can withstand hard vacuum. + components: + - type: BreathMask + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi + - type: Clothing + sprite: WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi + equipSound: /Audio/Effects/rustle1.ogg + unequipSound: /Audio/Effects/rustle2.ogg + - type: PressureProtection + highPressureMultiplier: 0.08 + lowPressureMultiplier: 1000 + +- type: entity + parent: ClothingOuterRobesCult + id: ClothingOuterRobesCultTrue + name: flagellant's robe + description: Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi + - type: Clothing + sprite: WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi + - type: CultItem + - type: ClothingSpeedModifier + walkModifier: 1.25 + sprintModifier: 1.25 + - type: Armor + modifiers: + coefficients: + Blunt: 1.4 + Slash: 1.4 + Piercing: 1.4 + Heat: 1.4 + - type: ToggleableClothing + clothingPrototype: ClothingHeadHatHoodCultHoodTrue + - type: ContainerContainer + containers: + toggleable-clothing: !type:ContainerSlot { } + +- type: entity + parent: ClothingHeadHatHoodCulthood + id: ClothingHeadHatHoodCultHoodTrue + name: flagellant's hood + description: A blood-soaked hood infused with dark magic. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi + - type: Clothing + sprite: WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi + equipSound: /Audio/Effects/rustle1.ogg + unequipSound: /Audio/Effects/rustle2.ogg + - type: ClothingSpeedModifier + walkModifier: 1.25 + sprintModifier: 1.25 + - type: Armor + modifiers: + coefficients: + Blunt: 1.4 + Slash: 1.4 + Piercing: 1.4 + Heat: 1.4 + +- type: entity + parent: ClothingEyesBase + id: ClothingEyeCultBlindfold + name: zealot's blindfold + description: May Nar'Sie guide you through the darkness and shield you from the light + components: + - type: Sprite + sprite: Clothing/Eyes/Misc/blindfold.rsi + state: icon + - type: Clothing + sprite: Clothing/Eyes/Misc/blindfold.rsi + - type: FlashImmunity + - type: ShowHealthBars + damageContainers: + - Biological + - Inorganic + - type: ShowHealthIcons + damageContainers: + - Biological + # TODO: ADD NIGHT VISION + diff --git a/Resources/Prototypes/WhiteDream/Entities/Effects/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Effects/cult.yml new file mode 100644 index 00000000000..cba21c51c38 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Effects/cult.yml @@ -0,0 +1,58 @@ +- type: entity + id: CultTileSpawnEffect + name: cult tile effect + placement: + mode: SnapgridCenter + components: + - type: TimedDespawn + lifetime: 0.5 + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: WhiteDream/BloodCult/Effects/tiles_spawn.rsi + state: floorglow + shader: unshaded + netsync: false + drawdepth: FloorObjects + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultTeleportInEffect + name: Teleport in + components: + - type: TimedDespawn + lifetime: 0.8 + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: WhiteDream/BloodCult/Effects/cult_in_out.rsi + state: cult_in + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultTeleportOutEffect + name: Teleport out + components: + - type: TimedDespawn + lifetime: 0.8 + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: WhiteDream/BloodCult/Effects/cult_in_out.rsi + state: cult_out + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml new file mode 100644 index 00000000000..93806feb0a9 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml @@ -0,0 +1,343 @@ +- type: entity + id: ConstructShell + name: construct shell + description: empty construct shell + parent: BaseItem + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/construct_shell.rsi + state: icon + - type: ItemSlots + - type: ConstructShell + shardSlot: + ejectOnBreak: true + whitelist: + components: + - SoulShard + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ContainerContainer + containers: + Shard: !type:ContainerSlot + - type: CultItem + - type: Examiner + skipChecks: true + +- type: entity + id: ConstructBase + abstract: true + categories: [ HideSpawnMenu ] + components: + - type: LagCompensation + - type: Input + context: "human" + - type: MobMover + - type: InputMover + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 3 + - type: DamageOnHighSpeedImpact + damage: + types: + Blunt: 5 + soundHit: + path: /Audio/Effects/hit_kick.ogg + - type: Sprite + drawdepth: Mobs + sprite: WhiteDream/BloodCult/mobs.rsi + noRot: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: KinematicController + - type: Construct + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.35 + density: 300 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: Damageable + damageContainer: CorporealSpirit + damageModifierSet: CorporealSpirit + - type: MobThresholds + thresholds: + 0: Alive + 60: Dead + - type: MobState + allowedStates: + - Alive + - Dead + - type: CombatMode + canDisarm: false + - type: Internals + - type: Examiner + - type: Speech + - type: TypingIndicator + proto: guardian + - type: Pullable + - type: Puller + needsHands: false + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + - type: Visibility + - type: ContentEye + - type: Actions + - type: Hands + - type: IsDeadIC + - type: ShowHealthBars + damageContainers: + - Biological + - Inorganic + - type: ShowHealthIcons + damageContainers: + - Biological + - type: Tag + tags: + - CannotSuicide + - DoorBumpOpener + - type: Appearance + +- type: entity + id: ConstructJuggernaut + parent: ConstructBase + name: juggernaut + description: A massive, armored construct built to spearhead attacks and soak up enemy fire. + components: + - type: Sprite + layers: + - state: juggernaut + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_juggernaut_cult + map: [ "enum.ConstructVisualsState.Glow" ] + - type: MobThresholds + thresholds: + 0: Alive + 100: Dead + - type: Construct + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcSmash + attackRate: 1 + damage: + types: + Structural: 90 + Blunt: 25 + soundHit: + path: /Audio/Nyanotrasen/Weapons/club.ogg + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_juggernaut_cult } + False: { state: juggernaut } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + parent: ConstructBase + id: ConstructArtificer + name: artificer + description: A bulbous construct dedicated to building and maintaining the Cult of Nar'Sie's armies. + components: + - type: Sprite + layers: + - state: artificer + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_artificer_cult + map: [ "enum.ConstructVisualsState.Glow" ] + - type: Construct + - type: MovementIgnoreGravity + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcPunch + attackRate: 1 + damage: + types: + Blunt: 5 + Structural: 60 + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_artificer_cult } + False: { state: artificer } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + parent: ConstructBase + id: ConstructWraith + name: wraith + description: A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines. + components: + - type: Sprite + layers: + - state: wraith + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_wraith_cult + map: [ "enum.ConstructVisualsState.Glow" ] + - type: MobThresholds + thresholds: + 0: Alive + 65: Dead + - type: Construct + - type: MovementSpeedModifier + baseWalkSpeed: 4 + baseSprintSpeed: 4 + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcSmash + attackRate: 1 + damage: + types: + Structural: 40 + Blunt: 20 + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_wraith_cult } + False: { state: wraith } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + id: ConstructHarvester + parent: ConstructBase + name: harvester + description: A long, thin construct built to herald Nar'Sie's rise. It'll be all over soon. + components: + - type: Sprite + layers: + - state: harvester + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_harvester_cult + map: [ "enum.ConstructVisualsState.Glow" ] + - type: MobThresholds + thresholds: + 0: Alive + 65: Dead + - type: Construct + - type: MovementSpeedModifier + baseWalkSpeed: 5 + baseSprintSpeed: 5 + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcSmash + attackRate: 1 + damage: + types: + Structural: 40 + Blunt: 50 + +- type: entity + id: ShadeCult + parent: ConstructBase # It's not technically a construct but it code wise? it is. + name: shade + description: A bound spirit. + components: + - type: Sprite + state: shade_cult + - type: MobThresholds + thresholds: + 0: Alive + 40: Dead + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcSmash + attackRate: 1 + damage: + types: + Blunt: 10 + - type: MovementSpeedModifier + baseWalkSpeed: 5.5 + baseSprintSpeed: 5.5 + +- type: entity + id: ConstructJuggernautHoly + parent: ConstructJuggernaut + name: purified juggernaut + components: + - type: Sprite + layers: + - state: juggernaut + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_juggernaut_holy + map: [ "enum.ConstructVisualsState.Glow" ] + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_juggernaut_holy } + False: { state: juggernaut } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + id: ConstructArtificerHoly + parent: ConstructArtificer + name: purified artificer + description: A bulbous construct dedicated to building and maintaining the holy armies. + components: + - type: Sprite + layers: + - state: artificer + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_artificer_holy + map: [ "enum.ConstructVisualsState.Glow" ] + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_artificer_holy } + False: { state: artificer } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + id: ConstructWraithHoly + parent: ConstructWraith + name: purified wraith + components: + - type: Sprite + layers: + - state: wraith + map: [ "enum.ConstructVisualsState.Sprite" ] + - state: glow_wraith_holy + map: [ "enum.ConstructVisualsState.Glow" ] + - type: GenericVisualizer + visuals: + enum.ConstructVisualsState.Transforming: + enum.ConstructVisualsState.Sprite: + True: { state: make_wraith_holy } + False: { state: wraith } + enum.ConstructVisualsState.Glow: + True: { visible: false } + False: { visible: true } + +- type: entity + id: ShadeHoly + parent: ShadeCult + name: purified shade + components: + - type: Sprite + state: shade_holy diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml new file mode 100644 index 00000000000..f872f634034 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml @@ -0,0 +1,49 @@ +- type: entity + name: soul shard + description: Mysterious glowing shard. + parent: BaseItem + id: SoulShard + components: + - type: LagCompensation + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/soul_stone.rsi + layers: + - state: soul_stone + map: [ "enum.SoulShardVisualState.Sprite" ] + - state: soul_stone_glow + map: [ "enum.SoulShardVisualState.Glow" ] + visible: false + - type: MindContainer + - type: Examiner + skipChecks: true + - type: PointLight + color: Red + radius: 2 + softness: 1 + enabled: false + - type: Appearance + - type: GenericVisualizer + visuals: + enum.SoulShardVisualState.HasMind: + enum.SoulShardVisualState.Glow: + True: { visible: true } + False: { visible: false } + enum.SoulShardVisualState.Blessed: + enum.SoulShardVisualState.Sprite: + True: { state: "soul_stone_blessed" } + False: { state: "soul_stone" } + - type: Speech + - type: IsDeadIC + - type: SoulShard + +- type: entity + parent: SoulShard + id: SoulShardGhost + suffix: Ghost Role + components: + - type: GhostRole + allowMovement: true + name: ghost-role-information-soul-shard-name + description: ghost-role-information-soul-shard-description + rules: ghost-role-information-soul-shard-rules + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Items/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Items/cult.yml new file mode 100644 index 00000000000..e85ee49f20e --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Items/cult.yml @@ -0,0 +1,200 @@ +- type: entity + parent: BaseItem + id: ShuttleCurse + name: cursed orb + description: You peer within this smokey orb and glimpse terrible fates befalling the emergency escape shuttle. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi + state: icon + - type: CultItem + - type: ShuttleCurse + +- type: entity + parent: BaseItem + id: WhetstoneCult + name: eldritch whetstone + description: A block, empowered by dark magic. Sharp weapons will be enhanced when used on the stone. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi + layers: + - state: icon + map: [ "enum.GenericCultVisuals.Layer" ] + - type: CultItem + - type: Whetstone + whitelist: + components: + - Sharp + blacklist: + components: + - EnergySword + - type: Appearance + - type: GenericVisualizer + visuals: + enum.GenericCultVisuals.State: + enum.GenericCultVisuals.Layer: + True: { state: icon } + False: { state: icon_off } + +- type: entity + parent: BaseItem + id: VeilShifter + name: veil shifter + description: This relic instantly teleports you, and anything you're pulling, forward by a moderate distance. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi + layers: + - state: icon + map: [ "enum.GenericCultVisuals.Layer" ] + - type: CultItem + - type: VeilShifter + - type: Appearance + - type: GenericVisualizer + visuals: + enum.GenericCultVisuals.State: + enum.GenericCultVisuals.Layer: + True: { state: icon } + False: { state: icon_off } + +- type: entity + parent: BaseItem + id: VoidTorch + name: void torch + description: Used by veteran cultists to instantly transport items to their needful brethren + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/void_torch.rsi + layers: + - state: icon + map: [ "enum.GenericCultVisuals.Layer" ] + - type: CultItem + - type: VoidTorch + - type: IgnitionSource + temperature: 400 + ignited: false + - type: PointLight + enabled: false + color: "#e33119" + radius: 1.0 + energy: 5.0 + netsync: false + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour # immediately make it bright and flickery + id: turn_on + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 6.0 + endValue: 9.0 + property: Energy + isLooped: true + - !type:FadeBehaviour # have the radius start small and get larger as it starts to burn + id: turn_on + maxDuration: 8.0 + startValue: 1.0 + endValue: 6.0 + - !type:RandomizeBehaviour # weaker flicker as it fades out + id: fade_out + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 4.0 + endValue: 8.0 + property: Energy + isLooped: true + - !type:FadeBehaviour # fade out radius as it burns out + id: fade_out + maxDuration: 4.0 + startValue: 6.0 + endValue: 1.0 + - type: UserInterface + interfaces: + enum.ListViewSelectorUiKey.Key: + type: ListViewSelectorBUI + - type: Appearance + - type: GenericVisualizer + visuals: + enum.GenericCultVisuals.State: + enum.GenericCultVisuals.Layer: + True: { state: icon } + False: { state: icon_off } + - type: Tag + tags: + - Torch + +- type: entity + parent: BaseItem + id: ShadowShackles + name: shadow shackles + description: Shackles that bind the wrists with sinister magic. + components: + - type: Item + size: Small + storedRotation: 90 + - type: Handcuff + breakoutTime: 5 + breakOnRemove: true + cuffedRSI: Objects/Misc/cablecuffs.rsi + bodyIconState: body-overlay + color: black + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: cuff + +- type: entity + parent: BaseItem + id: MirrorShieldCult + name: mirror shield + description: An infamous shield used by Nar'Sien sects to confuse and disorient their enemies. Its edges are weighted for use as a throwing weapon - capable of disabling multiple foes with preternatural accuracy. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi + state: icon + - type: Item + size: Ginormous + - type: CultItem + - type: StunOnCollide + blacklist: + components: + - BloodCultist + - type: Reflect + reflectProb: 0.75 + innate: true + reflects: + - Energy + - type: Blocking + passiveBlockModifier: + coefficients: + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.8 + Heat: 0.8 + activeBlockModifier: + coefficients: + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.8 + Heat: 0.8 + flatReductions: + Blunt: 1 + Slash: 1 + Piercing: 1 + Heat: 1 + blockSound: !type:SoundPathSpecifier + path: /Audio/Effects/glass_step.ogg + - type: Damageable + damageContainer: Shield + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: GlassBreak diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Materials/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Materials/cult.yml new file mode 100644 index 00000000000..0f80d80c9e2 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Materials/cult.yml @@ -0,0 +1,78 @@ +- type: entity + parent: SheetOtherBase + id: RunedMetal + name: runic metal + description: An unusual sheet of metal with a pulsating rune. + suffix: Full + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/runic_metal.rsi + layers: + - state: runic_3 + map: [ "base" ] + - type: Tag + tags: + - Sheet + - type: Material + - type: PhysicalComposition + materialComposition: + RunedMetal: 100 + - type: Stack + stackType: RunedMetalSheets + baseLayer: base + layerStates: + - runic + - runic_2 + - runic_3 + - type: Appearance + - type: Item + size: Small + - type: CultItem + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + inHandsOnly: true + key: enum.RadialSelectorUiKey.Key + userWhitelist: + components: + - BloodCultist + - type: ShortConstruction + entries: + - prototype: CultPylon + - prototype: CultFactoryArchives + - prototype: CultFactoryForge + - prototype: CultFactoryAltar + - prototype: CultGirder + - prototype: CultDoor + +- type: entity + parent: RunedMetal + id: RunedMetal1 + suffix: Single + components: + - type: Sprite + state: runic + - type: Stack + count: 1 + +- type: entity + parent: RunedMetal + id: RunedMetal4 + suffix: 4 + components: + - type: Sprite + state: runic + - type: Stack + count: 4 + +- type: entity + parent: RunedMetal + id: RunedMetal20 + suffix: 20 + components: + - type: Sprite + state: runic + - type: Stack + count: 20 diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml new file mode 100644 index 00000000000..8195f4773fd --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml @@ -0,0 +1,166 @@ +- type: entity + id: CultRuneBase + name: based rune + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Fixtures + fixtures: + rune: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + hard: false + mask: + - ItemMask + layer: + - SlipLayer + - type: Physics + - type: Clickable + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Runes/regular.rsi + state: "offering" + - type: CultRuneBase + - type: Appearance + +- type: entity + parent: CultRuneBase + id: CultRuneOffering + name: rune of offering + components: + - type: Sprite + state: "offering" + - type: CultRuneBase + invokePhrase: "Mah'weyh pleggh at e'ntrath!" + - type: CultRuneOffering + +- type: entity + parent: CultRuneBase + id: CultRuneEmpower + name: rune of empower + components: + - type: Sprite + state: strength + - type: CultRuneBase + invokePhrase: "Qu'laris ver'don, thal'sorin mik'thar!" + - type: CultRuneEmpower + +- type: entity + parent: CultRuneBase + id: CultRuneTeleport + name: rune of teleportation + components: + - type: Sprite + state: teleport + - type: CultRuneBase + invokePhrase: "Sas'so c'arta forbici!" + - type: CultRuneTeleport + - type: UserInterface + interfaces: + enum.ListViewSelectorUiKey.Key: + type: ListViewSelectorBUI + enum.NameSelectorUiKey.Key: + type: NameSelectorBUI + +- type: entity + parent: CultRuneBase + id: CultRuneRevive + name: rune of rejuvenation + components: + - type: Sprite + state: revive + - type: CultRuneBase + invokePhrase: "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" + - type: CultRuneRevive + +- type: entity + parent: CultRuneBase + id: CultRuneBarrier + name: rune of barrier + components: + - type: Sprite + state: barrier + - type: CultRuneBase + invokePhrase: "Khari'd! Eske'te tannin!" + runeActivationRange: 1.5 + activationDamage: + types: + Slash: 5 + - type: CultRuneBarrier + +- type: entity + parent: CultRuneBase + id: CultRuneSummoning + name: rune of summoning + components: + - type: Sprite + state: summon + - type: CultRuneBase + requiredInvokers: 3 + invokePhrase: "N'ath reth sh'yro eth d'rekkathnor!" + - type: CultRuneSummon + - type: UserInterface + interfaces: + enum.ListViewSelectorUiKey.Key: + type: ListViewSelectorBUI + +- type: entity + parent: CultRuneBase + id: CultRuneBloodBoil + name: rune of boiling blood + components: + - type: Sprite + state: blood_boil + - type: CultRuneBase + invokePhrase: "N'Dedo ol'btoh!" + requiredInvokers: 3 + activationDamage: + types: + Slash: 35 + - type: CultRuneBloodBoil + +- type: entity + parent: CultRuneBase + id: CultRuneApocalypse + name: rune of apocalypse + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi + layers: + - state: icon + map: [ "enum.ApocalypseRuneVisuals.Layer" ] + - type: CultRuneBase + requiredInvokers: 3 + invokePhrase: "Ta'gh fara'qha fel d'amar det!" + activationDamage: + types: + Slash: 35 + - type: CultRuneApocalypse + - type: GenericVisualizer + visuals: + enum.ApocalypseRuneVisuals.Used: + enum.ApocalypseRuneVisuals.Layer: + True: { color: "#696969" } + +- type: entity + parent: CultRuneBase + id: CultRuneDimensionalRending + name: rune of dimensional rending + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi + layers: + - state: rune + map: [ "enum.RendingRuneVisuals.Layer" ] + - type: CultRuneBase + requiredInvokers: 10 + invokeChatType: Speak + invokePhrase: "TOK-LYR RQA-NAP G'OLT-ULOFT!!!" + - type: CultRuneRending + - type: GenericVisualizer + visuals: + enum.RendingRuneVisuals.Active: + enum.RendingRuneVisuals.Layer: + True: { state: "rune_animated" } + False: { state: "rune"} diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/airlock.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/airlock.yml new file mode 100644 index 00000000000..188649d9aa8 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/airlock.yml @@ -0,0 +1,54 @@ +- type: entity + id: CultDoor + parent: BaseMaterialDoor + name: runed door + description: It opens, it closes, and maybe crushes you. This one has a strange glowing rune on it. + placement: + mode: SnapgridCenter + components: + - type: Airtight + fixVacuum: true + noAirWhenFullyAirBlocked: false + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Door + bumpOpen: true + occludes: false + crushDamage: + types: + Blunt: 15 + openSound: + path: /Audio/Effects/stonedoor_openclose.ogg + closeSound: + path: /Audio/Effects/stonedoor_openclose.ogg + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - type: MeleeSound + soundGroups: + Brute: + collection: GlassSmash + - type: Physics + bodyType: Static + - type: Occluder + enabled: false + - type: RadiationBlocker + resistance: 2 + - type: RCDDeconstructable + deconstructable: false + - type: RunedDoor + - type: Repulse + - type: RepulseOnTouch + - type: PlacementReplacement + key: walls + - type: Construction + graph: CultDoor + node: door diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml new file mode 100644 index 00000000000..c8ae0d6b3a3 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml @@ -0,0 +1,71 @@ +- type: entity + name: cult barrier + description: Can be destroyed with ritual dagger. + id: BloodCultBarrier + parent: BaseStructure + components: + - type: Transform + noRot: true + - type: Sprite + layers: + - sprite: WhiteDream/BloodCult/Entities/Structures/barrier.rsi + state: barrier + shader: unshaded + - type: Appearance + - type: InteractionOutline + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.45 + density: 75 + mask: + - MachineMask + layer: + - WallLayer + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + RunedMetal: + min: 5 + max: 5 + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: PointLight + enabled: false + radius: 3 + color: red + - type: BloodCultBarrier + - type: Airtight + noAirWhenFullyAirBlocked: false + +- type: entity + id: WallForceCult + parent: WallForce + name: glowing wall + description: An unholy shield that blocks all attacks. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi + state: icon + - type: Icon + sprite: WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi + state: icon diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/factories.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/factories.yml new file mode 100644 index 00000000000..052d92158d2 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/factories.yml @@ -0,0 +1,109 @@ +- type: entity + id: CultFactoryBase + parent: BaseStructure + name: base cult factory + description: You can make things here. + abstract: true + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/altar.rsi + layers: + - state: icon + map: [ "enum.GenericCultVisuals.Layer" ] + - type: Transform + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 55 + mask: + - TableMask + layer: + - TableLayer + - type: InteractionOutline + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - type: Appearance + - type: TimedFactory + - type: UserInterface + interfaces: + enum.RadialSelectorUiKey.Key: + type: RadialSelectorMenuBUI + - type: ActivatableUI + key: enum.RadialSelectorUiKey.Key + userWhitelist: + components: + - BloodCultist + - type: GenericVisualizer + visuals: + enum.GenericCultVisuals.State: + enum.GenericCultVisuals.Layer: + True: { state: "icon" } + False: { state: "icon_off" } + +- type: entity + id: CultFactoryAltar + parent: CultFactoryBase + name: altar + description: A bloodstained altar dedicated to Nar'Sie. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/altar.rsi + - type: TimedFactory + entries: + - prototype: ConstructShell + - prototype: WhetstoneCult + - type: Construction + graph: CultFactoryAltar + node: altar + +- type: entity + id: CultFactoryForge + parent: CultFactoryBase + name: daemon forge + description: A forge used in crafting the unholy weapons used by the armies of Nar'Sie. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/forge.rsi + - type: TimedFactory + entries: + - prototype: MirrorShieldCult + - prototype: EldritchLongsword + - prototype: ClothingOuterCultArmor + - prototype: ClothingOuterRobesCultTrue + - type: Construction + graph: CultFactoryForge + node: forge + +- type: entity + id: CultFactoryArchives + parent: CultFactoryBase + name: archives + description: A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/archives.rsi + - type: TimedFactory + entries: + - prototype: ShuttleCurse + - prototype: ClothingEyeCultBlindfold + - prototype: VeilShifter + - prototype: VoidTorch + - type: Construction + graph: CultFactoryArchives + node: archives diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/pylon.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/pylon.yml new file mode 100644 index 00000000000..8068ad1ef92 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/pylon.yml @@ -0,0 +1,71 @@ +- type: entity + id: CultPylon + parent: BaseStructure + name: pylon + description: A floating crystal that slowly heals those faithful to Nar'Sie. + components: + - type: Transform + noRot: true + - type: Fixtures + fixtures: + pylonFix: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 190 + mask: + - TabletopMachineMask + layer: + - TabletopMachineLayer + - type: Sprite + noRot: true + sprite: WhiteDream/BloodCult/Entities/Structures/pylon.rsi + layers: + - state: icon + map: [ "enum.PylonVisuals.Layer" ] + - type: InteractionOutline + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Glass + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:SpawnEntitiesBehavior + spawn: + ShardGlass: + min: 1 + max: 2 + - type: Appearance + - type: Pylon + healing: + groups: + Brute: -20 + Burn: -20 + Toxin: -10 + Genetic: -5 + Airloss: -20 + damageOnInteract: + groups: + Burn: 5 + - type: PointLight + color: "#FF0000" + radius: 2 + energy: 2 + enabled: true + - type: GenericVisualizer + visuals: + enum.PylonVisuals.Activated: + enum.PylonVisuals.Layer: + True: { state: "icon" } + False: { state: "icon_off" } + - type: Construction + graph: CultPylon + node: pylon diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/walls.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/walls.yml new file mode 100644 index 00000000000..408eeb21fab --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/walls.yml @@ -0,0 +1,34 @@ +- type: entity + id: CultGirder + parent: Girder + name: runed girder + description: Framework made of a strange and shockingly cold metal. It doesn't seem to have any bolts + components: + - type: Construction + graph: CultGirder + node: girder + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi + state: icon + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: #excess damage, don't spawn entities. + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Guns/Projectiles/magic.yml new file mode 100644 index 00000000000..c4271eeb95f --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -0,0 +1,21 @@ +- type: entity + id: BloodBoilProjectile + parent: BaseBullet + name: Concentrated Blood + description: Oh no. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Effects/blood_boil.rsi + state: bullet + - type: Projectile + damage: + groups: + Burn: 10 + Brute: 10 + - type: PointLight + enabled: true + color: "#ff4300" + radius: 2.0 + energy: 7.0 + - type: BloodBoilProjectile diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml new file mode 100644 index 00000000000..c21c383e8e6 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -0,0 +1,158 @@ +- type: entity + name: ritual dagger + parent: BaseKnife + id: RitualDagger + description: A strange dagger used by sinister groups for rituals and sacrifices. + components: + - type: Sprite + sprite: Objects/Weapons/Melee/cult_dagger.rsi + state: icon + - type: MeleeWeapon # TODO: It should have armor piercing effect (around 50%?) but we have no such system yet. Sucks. + wideAnimationRotation: -135 + maxTargets: 1 + heavyRateModifier: 0.95 + heavyStaminaCost: 5 + damage: + types: + Piercing: 15 + - type: Clothing + sprite: Objects/Weapons/Melee/cult_dagger.rsi + slots: + - back + - type: DisarmMalus + - type: CultItem + - type: RuneDrawer + - type: ActivatableUI + key: enum.RuneDrawerBuiKey.Key + inHandsOnly: true + userWhitelist: + components: + - BloodCultist + - type: UserInterface + interfaces: + enum.RuneDrawerBuiKey.Key: + type: RuneDrawerBUI + +- type: entity + name: eldritch longsword + parent: BaseItem + id: EldritchLongsword + description: A sword humming with unholy energy. It glows with a dim red light. + components: + - type: Sharp + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi + state: icon + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.75 + range: 1.65 + damage: + types: + Slash: 24 + heavyDamageBaseModifier: 1.2 + heavyStaminaCost: 10 + maxTargets: 3 + angle: 90 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: Item + size: Normal + - type: Clothing + slots: + - back + - type: DisarmMalus + - type: CultItem + - type: PointLight + color: Red + radius: 2 + softness: 1 + +- type: entity + parent: BaseItem + id: BloodSpear + name: blood halberd + description: A sickening spear composed entirely of crystallized blood. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi + state: icon + - type: EmbeddableProjectile + offset: 0.15,0.15 + - type: ThrowingAngle + angle: 225 + - type: Fixtures + fixtures: + fix1: + shape: !type:PolygonShape + vertices: + - -0.20,-0.10 + - -0.10,-0.20 + - 0.40,0.30 + - 0.30,0.40 + density: 20 + mask: + - BulletImpassable + restitution: 0.3 + friction: 0.2 + - type: Sharp + - type: MeleeWeapon + wideAnimationRotation: -135 + damage: + types: + Piercing: 36 + angle: 0 + animation: WeaponArcThrust + soundHit: + path: /Audio/Weapons/bladeslice.ogg + range: 2 + attackRate: 0.7 + - type: DamageOtherOnHit + damage: + types: + Piercing: 40 + - type: Item + sprite: WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi + storedRotation: 44 + size: Huge + shape: + - 0,0,5,0 + - type: Clothing + slots: + - back + - suitStorage + - type: Wieldable + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 8 + - type: UseDelay + - type: DisarmMalus + - type: CultItem + - type: BloodSpear + +- type: entity + parent: BaseItem + id: BloodRitesAura + name: blood rite aura + description: Absorbs blood from anything you touch. Touching cultists and constructs can heal them. Use in-hand to cast an advanced rite. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/rites.rsi + state: icon + - type: MeleeWeapon + damage: + types: + Blunt: 0 + heavyStaminaCost: 0 + maxTargets: 1 + - type: Unremoveable + - type: BloodRitesAura + - type: UserInterface + interfaces: + enum.BloodRitesUiKey.Key: + type: BloodRitesUi + - type: ActivatableUI + key: enum.BloodRitesUiKey.Key + inHandsOnly: true + requireActiveHand: false diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Throwable/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Throwable/cult.yml new file mode 100644 index 00000000000..05f9f8506bc --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Throwable/cult.yml @@ -0,0 +1,22 @@ +- type: entity + parent: [BaseBola] + id: CultBola + name: nar'sien bola + description: A strong bola, bound with dark magic that allows it to pass harmlessly through Nar'Sien cultists. Throw it to trip and slow your victim. + components: + - type: Sprite + sprite: WhiteDream/BloodCult/Entities/Items/bola.rsi + state: icon + - type: CultItem + - type: Ensnaring + freeTime: 2.0 + breakoutTime: 3.5 + walkSpeed: 0.7 + sprintSpeed: 0.7 + staminaDamage: 55 + canThrowTrigger: true + canMoveBreakout: true + destroyOnRemove: true + ignoredTargets: + components: + - BloodCultist diff --git a/Resources/Prototypes/WhiteDream/GameRules/roundstart.yml b/Resources/Prototypes/WhiteDream/GameRules/roundstart.yml new file mode 100644 index 00000000000..0ffe0220552 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/GameRules/roundstart.yml @@ -0,0 +1,25 @@ +- type: entity + id: BloodCult + parent: BaseGameRule + categories: [ HideSpawnMenu ] + components: + - type: GameRule + minPlayers: 30 + - type: BloodCultRule + - type: AntagSelection + definitions: + - prefRoles: [ BloodCultist ] + max: 4 + min: 2 + playerRatio: 15 + briefing: + text: blood-cult-role-greeting + color: Red + sound: "/Audio/WhiteDream/BloodCult/blood_cult_greeting.ogg" + startingGear: BloodCultistGear + components: + - type: BloodCultist + - type: BloodCultSpellsHolder + mindComponents: + - type: BloodCultistRole + prototype: BloodCultist diff --git a/Resources/Prototypes/WhiteDream/Objectives/cult.yml b/Resources/Prototypes/WhiteDream/Objectives/cult.yml new file mode 100644 index 00000000000..835807bfce6 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Objectives/cult.yml @@ -0,0 +1,19 @@ +- type: entity + parent: BaseObjective + id: KillTargetCultObjective + description: This fool person should be sacrificed in the glory of our Goddess. + categories: [ HideSpawnMenu ] + components: + - type: Objective + issuer: The Geometer of Blood + unique: true + difficulty: 3 + icon: + sprite: Objects/Weapons/Melee/cult_dagger.rsi + state: icon + - type: RoleRequirement + roles: + components: + - BloodCultistRole + - type: KillTargetCult + title: objective-condition-kill-person-title diff --git a/Resources/Prototypes/WhiteDream/Pool/cult_powers_pool.yml b/Resources/Prototypes/WhiteDream/Pool/cult_powers_pool.yml new file mode 100644 index 00000000000..6da36a41f0c --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Pool/cult_powers_pool.yml @@ -0,0 +1,11 @@ +- type: psionicPowerPool + id: BloodCultPowers + powers: + - ActionBloodCultStun + - ActionBloodCultTeleport + - ActionBloodCultEmp + - ActionBloodCultShadowShackles + - ActionBloodCultTwistedConstruction + - ActionBloodCultSummonCombatEquipment + - ActionBloodCultSummonRitualDagger + - ActionBloodCultBloodRites diff --git a/Resources/Prototypes/WhiteDream/Reagents/Materials/cult.yml b/Resources/Prototypes/WhiteDream/Reagents/Materials/cult.yml new file mode 100644 index 00000000000..e444df178e6 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Reagents/Materials/cult.yml @@ -0,0 +1,7 @@ +- type: material + id: RunedMetal + stackEntity: RunedMetal1 + name: materials-runed-metal + icon: { sprite: /Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi, state: runic} + color: "#9d2b39" + price: 0.05 diff --git a/Resources/Prototypes/WhiteDream/Recipes/Construction/cult.yml b/Resources/Prototypes/WhiteDream/Recipes/Construction/cult.yml new file mode 100644 index 00000000000..a87edd40fb7 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Recipes/Construction/cult.yml @@ -0,0 +1,107 @@ +- type: construction + id: CultPylon + name: cult pylon + description: A floating crystal that slowly heals those faithful to Nar'Sie. + category: construction-category-structures + hide: true + graph: CultPylon + startNode: start + targetNode: pylon + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/pylon.rsi + state: icon_off + objectType: Structure + placementMode: AlignPylonConstruction + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultFactoryAltar + name: altar + description: A bloodstained altar dedicated to Nar'Sie. + category: construction-category-structures + hide: true + graph: CultFactoryAltar + startNode: start + targetNode: altar + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/altar.rsi + state: icon_off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultFactoryForge + name: daemon forge + description: A forge used in crafting the unholy weapons used by the armies of Nar'Sie. + category: construction-category-structures + hide: true + graph: CultFactoryForge + startNode: start + targetNode: forge + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/forge.rsi + state: icon_off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultFactoryArchives + name: archives + description: A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl. + category: construction-category-structures + hide: true + graph: CultFactoryArchives + startNode: start + targetNode: archives + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/archives.rsi + state: icon_off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultDoor + name: runed door + description: It opens, it closes, and maybe crushes you. This one has a strange glowing rune on it. + category: construction-category-structures + hide: true + graph: CultDoor + startNode: start + targetNode: door + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi + state: closed + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultGirder + name: runed girder + description: Framework made of a strange and shockingly cold metal. It doesn't seem to have any bolts + category: construction-category-structures + hide: true + graph: CultGirder + startNode: start + targetNode: girder + icon: + sprite: WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi + state: icon + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked diff --git a/Resources/Prototypes/WhiteDream/Recipes/Construction/cult_graphs.yml b/Resources/Prototypes/WhiteDream/Recipes/Construction/cult_graphs.yml new file mode 100644 index 00000000000..8bb2dd84213 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Recipes/Construction/cult_graphs.yml @@ -0,0 +1,114 @@ +- type: constructionGraph + id: CultPylon + start: start + graph: + - node: start + edges: + - to: pylon + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 4 + doAfter: 3 + - node: pylon + entity: CultPylon + +- type: constructionGraph + id: CultFactoryAltar + start: start + graph: + - node: start + edges: + - to: altar + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 3 + doAfter: 3 + - node: altar + entity: CultFactoryAltar + +- type: constructionGraph + id: CultFactoryForge + start: start + graph: + - node: start + edges: + - to: forge + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 3 + doAfter: 3 + - node: forge + entity: CultFactoryForge + +- type: constructionGraph + id: CultFactoryArchives + start: start + graph: + - node: start + edges: + - to: archives + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 3 + doAfter: 3 + - node: archives + entity: CultFactoryArchives + +- type: constructionGraph + id: CultDoor + start: start + graph: + - node: start + edges: + - to: door + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 1 + doAfter: 3 + - node: door + entity: CultDoor + +- type: constructionGraph + id: CultGirder + start: start + graph: + - node: start + edges: + - to: girder + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunedMetalSheets + amount: 1 + doAfter: 3 + - node: girder + entity: CultGirder + edges: + - to: wall + completed: + - !type:SnapToGrid + southRotation: true + conditions: + - !type:EntityAnchored { } + steps: + - material: RunedMetalSheets + amount: 1 + doAfter: 2 + - node: wall + entity: WallCult diff --git a/Resources/Prototypes/WhiteDream/Roles/Antags/blood-cultist.yml b/Resources/Prototypes/WhiteDream/Roles/Antags/blood-cultist.yml new file mode 100644 index 00000000000..0e0e9b59438 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Roles/Antags/blood-cultist.yml @@ -0,0 +1,16 @@ +- type: antag + id: BloodCultist + name: roles-antag-blood-cultist-name + antagonist: true + setPreference: true + objective: roles-antag-blood-cultist-objective + requirements: + - !type:CharacterOverallTimeRequirement + min: 43200 + +- type: startingGear + id: BloodCultistGear + storage: + back: + - RitualDagger + - RunedMetal20 diff --git a/Resources/Prototypes/WhiteDream/Stacks/Materials/cult.yml b/Resources/Prototypes/WhiteDream/Stacks/Materials/cult.yml new file mode 100644 index 00000000000..d5674f13944 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Stacks/Materials/cult.yml @@ -0,0 +1,6 @@ +- type: stack + id: RunedMetalSheets + name: materials-runed-metal + icon: { sprite: /Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi, state: runic} + spawn: RunedMetal1 + maxCount: 30 diff --git a/Resources/Prototypes/WhiteDream/StatusIcon/antag.yml b/Resources/Prototypes/WhiteDream/StatusIcon/antag.yml new file mode 100644 index 00000000000..9910ed6f4c0 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/StatusIcon/antag.yml @@ -0,0 +1,15 @@ +- type: statusIcon + id: BloodCultMember + priority: 11 + locationPreference: left + icon: + sprite: /Textures/WhiteDream/BloodCult/cult_hud.rsi + state: cult_member + +- type: statusIcon + id: BloodCultLeader + priority: 11 + locationPreference: left + icon: + sprite: /Textures/WhiteDream/BloodCult/cult_hud.rsi + state: cult_leader diff --git a/Resources/Prototypes/WhiteDream/ai_factions.yml b/Resources/Prototypes/WhiteDream/ai_factions.yml new file mode 100644 index 00000000000..e7a68dcbb99 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/ai_factions.yml @@ -0,0 +1,8 @@ +- type: npcFaction + id: GeometerOfBlood + hostile: + - NanoTrasen + - SimpleHostile + - Xeno + - PetsNT + - Zombie diff --git a/Resources/Prototypes/WhiteDream/alerts.yml b/Resources/Prototypes/WhiteDream/alerts.yml new file mode 100644 index 00000000000..f9693664b42 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/alerts.yml @@ -0,0 +1,5 @@ +- type: alert + id: CultEmpowered + icons: [ /Textures/WhiteDream/BloodCult/Alerts/empowered.png ] + name: alerts-blood-cult-empowered-name + description: alerts-blood-cult-empowered-desc diff --git a/Resources/Prototypes/WhiteDream/game_presets.yml b/Resources/Prototypes/WhiteDream/game_presets.yml new file mode 100644 index 00000000000..fca12c7ded7 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/game_presets.yml @@ -0,0 +1,12 @@ +- type: gamePreset + id: BloodCult + alias: + - bloodcult + name: blood-cult-title + showInVote: true + description: blood-cult-description + rules: + - BloodCult + - SubGamemodesRule + - BasicStationEventScheduler + - BasicRoundstartVariation diff --git a/Resources/Prototypes/WhiteDream/runeSelectors.yml b/Resources/Prototypes/WhiteDream/runeSelectors.yml new file mode 100644 index 00000000000..d63c81aa8da --- /dev/null +++ b/Resources/Prototypes/WhiteDream/runeSelectors.yml @@ -0,0 +1,43 @@ +- type: runeSelector + id: CultRuneOffering + prototype: CultRuneOffering + +- type: runeSelector + id: CultRuneEmpower + prototype: CultRuneEmpower + +- type: runeSelector + id: CultRuneTeleport + prototype: CultRuneTeleport + +- type: runeSelector + id: CultRuneRevive + prototype: CultRuneRevive + +- type: runeSelector + id: CultRuneBarrier + prototype: CultRuneBarrier + +- type: runeSelector + id: CultRuneSummoning + prototype: CultRuneSummoning + +- type: runeSelector + id: CultRuneBloodBoil + prototype: CultRuneBloodBoil + +- type: runeSelector + id: CultRuneApocalypse + prototype: CultRuneApocalypse + drawTime: 40 + drawDamage: + types: + Slash: 20 + +- type: runeSelector + id: CultRuneDimensionalRending + prototype: CultRuneDimensionalRending + drawTime: 40 + drawDamage: + types: + Slash: 50 diff --git a/Resources/Prototypes/WhiteDream/tiles.yml b/Resources/Prototypes/WhiteDream/tiles.yml new file mode 100644 index 00000000000..67f8f15632e --- /dev/null +++ b/Resources/Prototypes/WhiteDream/tiles.yml @@ -0,0 +1,29 @@ +- type: tile + id: CultFloor + name: tiles-cult-floor + sprite: /Textures/WhiteDream/BloodCult/Tiles/cult_tile/cult.png + variants: 1 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor + itemDrop: FloorTileItemSteel + heatCapacity: 10000 + +- type: tile + id: CultFloorConcealed + name: tiles-steel-floor + sprite: /Textures/WhiteDream/BloodCult/Tiles/cult_tile/concealed.png + variants: 3 + placementVariants: + - 1.0 + - 1.0 + - 1.0 + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepFloor + itemDrop: FloorTileItemSteel + heatCapacity: 10000 diff --git a/Resources/Prototypes/ai_factions.yml b/Resources/Prototypes/ai_factions.yml index cdbbf868662..c0f7c7da6a0 100644 --- a/Resources/Prototypes/ai_factions.yml +++ b/Resources/Prototypes/ai_factions.yml @@ -44,6 +44,7 @@ - PetsNT - Zombie - Revolutionary + - GeometerOfBlood - type: npcFaction id: SimpleNeutral diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index 4ad31cd1940..75954d5118a 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -1,9 +1,10 @@ - type: weightedRandom id: Secret weights: - Survival: 0.44 + Survival: 0.34 Nukeops: 0.14 Zombie: 0.03 - Traitor: 0.39 + Traitor: 0.34 + BloodCult: 0.15 #Pirates: 0.15 #ahoy me bucko diff --git a/Resources/Textures/WhiteDream/BloodCult/Alerts/empowered.png b/Resources/Textures/WhiteDream/BloodCult/Alerts/empowered.png new file mode 100644 index 0000000000000000000000000000000000000000..26ddf7fb0a6d600f1c625a35a7a6c8e6d56be5bb GIT binary patch literal 891 zcmV->1BCpEP)`Hzy9{ay!-wo@!Pee&mte-^z6*V)I=l#U`V2${eBp)sw&+7{c~lWFDJ^;A{M7-VF3fVdzAtHzSG@^uDj?3kMh~Fb(IRWwdbJJ(XvAYURjcTe;=0~FSz z>(x9Jk&Gf9+FnlZ)a1T+{xrluAO<8kg<%dH;7SB&`+$xJgn-1l5c6SY$IJ^K+Lg-A z^{)v4{6R4}mUB-K9}f>r4v+nrAYKjt*%y!HQUvbTl%EWut&HIaf<_aAhtRQpOlXMZ zkf&Ea?yfk5bQC{~@A>L%Lt+Bmw00{10J{z%5%4oNa;H6@nI9}A za?yF(V}WWT&1o|Q^e1nLp&+Z;7}XMmkYZz;pcSZwLKlS`AFhU1iTK1JEDpWZhn*1fS76G7wBRWKHTCv>X0ezZl)hg_D5*zwY#l= z@39&>A*gX?%;oC~D=y+QVy9Ux+;T2F1g{FtL*18%6q4aRX99gceyK7W;9&JN6s)z7 z9Qmjewy)3yby3fv*8q%yqp zTCra{n7;gI*CIWI?u=Z_SOo1o!jp>7eEc1~0gSVahFHAm?r@h8J^d)+SyC_J=7hc(B2-^!!JO9s{r!MHu2OxLz6zc7;EJbH z_E7@BO+)uWvT~=h7GQXHKfmF6-4~i#!)zja<#R?bH!i?WGzg$0aYKDdGRAr%i`rnZM-bgwTlZAOUDIG>)kp4m1e6nCN54G zY!S_slm1})-TUM*Z!1@r==x*6I$+(CuigYGD0_JJW&O~Uw>0z2;g_21I}Jznf3xp% zQW@%aml}oFfSxd=?~bsP^)*Dz8H9-?9flQ=Jy~fiEoSu>xKAVjRHnFl4Vv^;zipPwo3|M}=UtjsM^ z)q-c(z0|MJL^Gt@>dvvc?j=V_O@*f}028BLgr4_x(^@@MoOnW_k_-BxsOj{>hFG2N#foZ(g%O5^*>D-E?f~ z#q&w>Jdrs!t-b1_aSq57T)bydAFWLl?9i3u91^d22+=|1ThT5g zb2sdM5igkJ)8NL=KQ`XP;fA@uEzV$+?|>F{Q&k7`K5~U=)8+P*V(ZmK&p*~G^EeUxqaJ<9b}EsG>l2khzsaba*z-(^{Lln7+WS5zKc2tlcgJE<$aUyQ@axGp zRqCM1rHUEj6|LaARQ4JrQ}NjlrFM3V{LFLc-mLbyt35#hwPc1d*lc14vA4O$Co*QN z{a5*-mpmcOlBYa|AT&WC&n7OwC^u)V6q~8J1N^>^- zQgJp;+|$I&ikLY=^~YX=UhN%+8YIkQ9fdsFUkA?LK66IOpgyBMc|Xe9Le{ZG&`ecC z1I!62s*Su|qOinuwjSj9-SwAonASflaMCNzd|SXu-FI8`?2h2FOmA5(hMa`NIoHUP zXOWj`vsw*ZY;Ol@IiFkt<}Gm6m5o_)E~z89_Q?uO`Xw6cnzd|eQ23d}_hH9q-W6e1 zE-AqQpORLpx2rV4t)ly4UL`|Nyf_yLc|8(tLctXpXeYr-nudaP&i}8}9mT@N26pu( zpB+h=Nwy~acLL35y*z-S2*WY^0|pjP=)q;QGuSZ)L>O*~AM6_IBzgv@jYbcPEny~< zZPJK1;gxdPWa*HWl42`ZYgKO$((OA~xf@BH z;EZzJ0ZB=Sn`TS@{)91fw!VktB)PCsAk7an(_p;lj)|i%mCT~*K!mUd!dUburf%z+q zLiE-?&s$Z!%YmnkrMi-O3|5sG?K|JtNY`32i;ND4aBxjNp>BBL)l$gqswF$gE#H|Q zL_R2o?h)1oiwsgx?CR(XCu!3>z}@wDlZ-Q9_nY`}5;(1d^hKi|jDF6ta)NBER#k8G zJFpv+Ys=)a%@^W@XDffWuCR9A)!^4e$@`*1@dHju+OvU}8i!W?#M72SE^w2tiE9@I z1P;TxF7I2Nl;K*1G-xQ$U$N>AkM8USs8sKxR|0E9qFQw%s z{U155dYN#{#r8>J#Iu2y5ZdE&i7uTQSWml;Ib{#cpJhB&SpzskhDN9En@`>X&2`Il z#bVwy#$}NhV+EA1Yh6)U8f4P(= zvG<69#rn9DbE|``I3-l>%a+=X7~5MfDOnU0YefmojRdS65XlhFhJxp;;sPxzW~{<3 zA;`Skz(TnvwcruCG)TnN!UX@;FVUd^%1jOpuMo>FwYzi-jDQEyI#~W(xJ)ct%i_`_ z<_L&$ahRFwYh=svGFA#FU@o;`)l@ch`te6CnI&o)UFpfp3J0pJ&}+wKjA|x`mz^E72J3~ z91x`)SaY;@6BHv+ru+%;oaBh?76isI)dpBt)23^F2&P-P;xN}s(sR=+s}N)ArcutH znxYDzvKf9D%sW3+BiPoWZBAiEdH6e}q3?dIWqKks7gSdiS~m53K4RcdjRZP4>50Gw zx#2)+N6wWC^O(`&L=SgDrb8yEp0ucs5g4H?{x{0}RT7HQndGk0tijtj=BpMa%?$b4 zP_Vre$w4mFl_}TpNZk~%j+}7VnEH^!dn=g?P*_QWdngPb7`mOv=zPJ@y==ocWqbEQ zFXiS)*d_YBzhE@^#&@mzCCnr{lc;fBpy%+jFf1L~-o~C0TBw;u!JvXCENK`tI5&+w zG=F7OcKT(-vhqg=pTWX4y;II*@q<@!W^VROy-5f^WX;qQcqzat8{Q)LNdS-*rw~=< HXu`h$1-L*m literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/airlock_glow.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Effects/airlock_glow.rsi/meta.json new file mode 100644 index 00000000000..c8899120552 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Effects/airlock_glow.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "doorglow", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/bullet.png b/Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef822c73cfb92d19e31f1ffe7748a1be125a51c GIT binary patch literal 919 zcmV;I18Dq-P)NM3 zr9;#NXj%{IVOy^KZ=%?e6@Jv4&Ig=a7XUc9E&#a&{{Xz@wNHQ_uz?0g-KajJ{v-h0 zXcM_#8wMHO1@e4-=Xp+PEesU^GR#Es@%vP!6a*UHfnJoCfW<&W0iYoU(uHO0R6ZAi z&v^85=SXvP(>;7f2tp8m%Xk~eZyet(j@@*Vh}73=~w@jA*R=1v=Kf+!NPL&!-k8uM>Pu+Jm>QkD-@U;SG3otM@7}F1B|D}Atzkh^qgB2*h&`wIJqtWaB^J$ zN(%ERPT$xrPpf1AGEPs&%}0fy0uXvRp%b4x{}Dh$0cc|MQv4-_)*%D|q{Qe+GCtor z1TTOg5>fGqhotGVWe83H+8BLE97M|y761mtNs#Zj$`_k&c}!4GgPJos--`-cMtV}E z0)U3`Xshy|;(demH3Ps$eHo)CrJT~ZUQm$n`Mu?A0Y2k%#36*%4tq(}1#-^jM44v0 z!wi7SJ6pu)_msBGbrm!M~^o2|erduY>>q002ovPDHLkV1h4Klyv|A literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/meta.json new file mode 100644 index 00000000000..183dbc10d17 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Effects/blood_boil.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bullet", + "delays": [ + [ + 0.07, + 0.07, + 0.07 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/cult_in.png b/Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/cult_in.png new file mode 100644 index 0000000000000000000000000000000000000000..5d937d4dbd31f45efee0c50edd699bc22b30c860 GIT binary patch literal 5277 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/meta.json new file mode 100644 index 00000000000..33c2fe8fc12 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Effects/cult_in_out.rsi/meta.json @@ -0,0 +1,103 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cult_out", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "cult_in", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo1.png b/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d73c095cbb9f4d553fd5c64c2ed7be5d9018722 GIT binary patch literal 8253 zcmdU#c|276|HluaTZ%imc2N|!43e^iX|W^;m25H06tXi3Sw?lsWE-Vqi$Y`_vPVW4 zOCdr-wkfhsNQ`C1obx+VxBKmT@BKY~kKg0*yN}23`-jJIJRawm^KqW<*Ya`G{Djfw zjS?FH0N8ANRR1IZaKYbl13&S>2hZduEcmd&=co-100bzUFRr_a0+IkAGiR)S=yYJ} z%z!7seyoNz?=G)!?2g}YiIVLGCea3+oezvD>-V`{muf%0D7E{JE#Z;CjA~)$_Medg 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 P0D!T<3H_qOj#vK+CK`e~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo2.png b/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo2.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2860a72653c8330a3c0f0e10c3e5a8df6923c0 GIT binary patch literal 8179 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 KM)qm*U;hUgW3Hb7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo4.png b/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo4.png new file mode 100644 index 0000000000000000000000000000000000000000..9221a45b7a666793b8e447a8e34a09bd05d994a2 GIT binary patch literal 8199 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 M3{M#pA9J|=ABw7Ti~s-t literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo5.png b/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo5.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce43423217b614774d5f86e8612c9ce897c2e83 GIT binary patch literal 8201 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo6.png b/Resources/Textures/WhiteDream/BloodCult/Effects/pentagram.rsi/halo6.png new file mode 100644 index 0000000000000000000000000000000000000000..1457a6e3c6e548bfdb6447ebba990eb2f57a9309 GIT binary patch literal 8275 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 AV*mgE literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/tiles_spawn.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Effects/tiles_spawn.rsi/meta.json new file mode 100644 index 00000000000..070d383593d --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Effects/tiles_spawn.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "floorglow", + "delays": [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/meta.json new file mode 100644 index 00000000000..430ae0f7444 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wallglow", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/wallglow.png b/Resources/Textures/WhiteDream/BloodCult/Effects/wall_glow.rsi/wallglow.png new file mode 100644 index 0000000000000000000000000000000000000000..120ab642d6a8c8fa5af5ec7a2bd875d2d1d382b1 GIT binary patch literal 3360 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 aL+>Rh%%8g|8VdaKfX<@~wac{}!v6!IS$IAG literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/equipped-HELMET.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..ef53285d7ddb257232bbc1e1f105d90a7e4a1fa0 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|T>& zr;B4q#hkaZ9J8eyCEDUwGIG9Mc4R_@$H4}}_Ipg0Cfn7%yxCc=WPdFFLiG8atX(hH z+Ikd!PEZQH(9A2fsJ2eN{iEnL7 zJocq7DCb4Cq=C0;_lpvyY-T^_`b6dvvHR}bzuTv`u4?9Eao0K9tPAJXpLY{k@hktn zjO%;*Iq9EPvnJf>f35cGmf!)|pW&I(*Ay>*%r(*#1{zf$BoZLnXZ-4G?e|=PHTfqt zO{njyi<@%l_v6`(W!2o$3Wv2CN-Eb!upL=l_mPwRcl)Qhzx_Mbx=y&Y_MOP$SHAIC z8`oVC`>T+_roj2*6Trl^2^pl*|nx~>wW8$_xax{K=SLob} zMQg7wo5sj%Si!Y*R>Tj!IQgT30lzEy64Ir4J2WKPHn8%}Q8;_CKYNYs?Vi(-&SFPj zWN*-B+if1~&s@cmu`#<$@2S**fVuBqZ(Etlz!~DUw?k>+%8tvAJ{O57_1ZfA_#E~} z#^Y?l-|9UdeD7a(w`R(iFf~x(WP$h+%Zf$cU+V?$+&g*lfoA_j`Cm9Z44+2kE5=S+ zIX^@DkNpGQhQ}4m4=nC6SoE1Q^gYJLEwMk)KH>Xc{(EJ02W)yP|ITU;WVs=?gtI1N z(QnJQJc3)#RWkBV)HpaRE05{>#jLspts|+A+Z!z=8tx72pMH!8XwdB3&vrG1bC=k9 zi}>`L0eS*cvzlD)Drmd7{w|quXnuO5(|hB8X&EadmAB2f`e=(xU)z;SPb>l-&Cpt; zd`B^Qvwy&C5!N-XGqt8n6;e6jf5FVbjgifWYu_3hM|10g5i><^uMoT-QoBQ}_6AE& z+I)li9Gyq|z gGRLJEuyN~{U$(Dfv}?=Q56mzopr0OMGN#{d8T literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_helmet.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70f0fb7c84ce99f00737b059a37045fbbf0453a8 GIT binary patch literal 361 zcmV-v0ha!WP)E@9duI<(3^M|Z{h)} zn@hpXp<1+{gM$in>LA3Vm@1;sL`4eup){{A^nLGtq0QpYQUD4-0Vsg<0o02*;vK_` zZ2n__XIWX0@db$segwd}fT32#=)8~P z$MviHR{F7zBfH6 zW4Pel?D?h(?amZ%Uq7PtWiGGBBM)9PBbi?1ub*|e^O#=7=af(6xg7P&k8MJQdfsC3 zr!Vg01&0R+d;IrXy>$KawVU@%Wz63d@cS{xmWoGPt3v*qJ-fFm^i9X~mHU+gug&+X z*Z=kUMfCdy^~$y_0yehR?j_~H+f5i>9cSB<{AK#r-7lgg9p3GK|NMrv-SOr}e*~}8 zNiVCooiFltwyQr|{EHX)Tep5({E|OKeCNC6ze}>E-CYfGzOF52(7mKHPt5Q7ms{3; zf=$7DPn@10c>33Wc5UVtj?VlFyOtfDeNE!gZ^wvh`(ORvmK^n-K}b_<&9tw|3`>Id zgqh9z{GCC#cQwyWO$*5nA3ul7<_eb<*9%X)&y>(7!SJku5g)Z$qGi%FyUB~}OtY`D z&v^aUuwcjR)ywDqV=;VKuzjJ1>+~ZLXB0iE?l`;)7W$M>w*Sg(WtC-i4HXw{7M|H~ zxo?A6gHpXg_Fv(-oA>QoHhEd|+;yMksz|=E37gXK_DJ^hEEWw3Pn(T;Qwr>u_AY5` zkM}Eynq{#X8B(;rU@Y^M!0ctJ;&#iXO?+`yEUD z^ejX@&P3P7ujA#IsHWcgseHmNR^hGv2THH7g)|4S|J21FBpb{h=+7(ESr8;w*9T0@ N44$rjF6*2UngBGkS6%=B literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5489437468e2f2954367bbe6793eaa12ca196b GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQmc z#WAE}&f6>gTulxlY#-8ZL`hHOQ@CiwlzCM&s=9AM>FWi)(=+ah-V!Nk;^7x~Y4EN& zbDqJ2MGG#TIa~c;e&wMW`{Rz%R(ebV4Gb&_4#@`&u~k+yUFA%8VQg7$F^602z2y4V z6}$&N9QdAah=rw=KYFXcv4&iZqF{pq1#7m>S+)5>^3EXbO+Neot85KRP_tN~^wwd(yUzI^_MRz)kB=8tmy7M{J& zjo2Qz9p+tecs0l0J)sSJfsLPH@0YA|`_H&nYQDo-roQFfO9iifyw9*-3+&PtG9Q@! YuZk`BKkLmVU@$Ovy85}Sb4q9e0L-$6v;Y7A literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/meta.json new file mode 100644 index 00000000000..71a3cf96dbf --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Helmet/cult_hood.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Bee Station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/3050f5915f4aef410643be227510b9350350f7b2", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..11d4097fbabae2c4cca1de9d9466c64eabee2548 GIT binary patch literal 1816 zcmV+z2j}>SP)#k{1iMqJkGp)riUvLle2P*SYsxuTkSYH#bR#WI-|a>+F5j z*?XUly&FS|qfG!>9Bl&7;%F0q7Dt-^v^WA2knZWUt@DeHsNOS0z2pZXz-<)sG1$D` zxEIG(zUT=VPsQ!Y)1vylEbm24LOtaNwt$5fb68vdsD96ul6W;1xAn7ZzKGR(C(e6Q zPw@W3J4B7CU(?t)KDr|R)A$3-Y;9kWKXtzk2iAVzb^{UcsC0qN-LIII&Jn95BA-Mi z6?cSpop{gq9^bbR9oSxC^fzp}*O_t*?7SKfkvjt+A=am!O~`vAJ62%%w-TVuh-UYE zWE9!&($V9O=oN<9S(1?7D=Ks3H9LMLBgE0k$otsawU^822=BZ*PJGWq{;dSCq4%x{ z9gxNH1-iE_93|uGIRzKqzVQ^H0(~dWRHRrJf22=_oepo3pZ;-yhhpYLkHiF8r1~qt znC|)IM@|Jl6ZutxAOjAu{>}0lnRWfV5=sH&JmqEDa{SNQuPF#t-p`7aWh4gbnTNqR zgCTXldmEnoyV}vHY5@a)?eDzR-HC^Ad~Q($Ps(qOz6wAx9r8J3Awuvwl2D5UT)QXj z$6a^xyTFn=0~LMptF_}t)fnLKJVA@d%HP%F+?Dqjka`FEFo0o+0oJYG*NS+e%dtS| z?3(=3BoOL;;^Z0ucfn{gM4x&oK6w84QZPY9=!>rzh3g2;F!XzEap!P4t`}tLxgm@Q z;IyQt!rPulxdN;vpFTf<%a{;WzR_-QLz&?1?{HO^E|luF8`SbS+FTfMX-wbe0xYcj zzy#3$xD2NMP2cdGQJK$yBV#`_m9I8KT>QwIM7u*+`GE;={Od>wp}$W*zKp`WW)M`7 zID{XX%7?7?8F(q1v(YS)>V6pc#wS9~iYw`npcW$D{rZDDJtT&_saRV8@6!cLVMG8A zA$a(}-;BJw*&U3!5m-N`ucA(1`&;sNzL2w#8daSq@`W6@^MmMNDnBp*HwBi_U+h5d zMFD@isM$a2d3pNf zpJW5%*M~Ze<0vo*#xAh%V$SAC5CzTeSavEgq|OE^x25%jmob+8KX;;gV`+6DvoQ6< zuFPBBg}?-;!w_MX2a!50%@df((;T=pe(p<2qmIy>C)j!F(CgEQL`3caI=#d)lvJsV zOnDnU`7*MDeb~SeHr#aeBpL%RJy$4Pv4!BZLV+!SX|B)KJ_ZJ3V1}5P zV0{iqC0HM@a=ME~K&QhgUmc6fKxmx~tWHdg4ckG>WC9bw2AOzBk!{!K3C4gdngbq> z(+zNH!HWs335dEzNayC6cBTcKk3PU23lf+rgL5Lhh$grIk}4I>oaHCcX*2d!S%B6# zNLxmSq9ozK&AV&pR5{JEkuE?Il$M*+C^8< z%(O($C^tw!>^uei_4gaaGRsluiyVb-MV(? z6ZB#F1bKyST_{aUMZ_|j7PO%aWT3H4LRw@RNWyr(J3q#fpP6yQO%4qA=bU@acYf}f ztKdJ=48RP)48RP4ZvfhS+%j$kv8dz%0dSP!jRK47qXiY!R@XD~Fr!+9tFD~y2)Q62 zd`IBzt4(}4JdpE^UK(2uRLkY*tu87H9b0a79eew`e%1N|u+|&kTkSiFLOH2IAgwf3 zGOBGn(eZecqrCCA0NgM#>@Sz|(0>R+?E|FlW~DKLXw|zi9bD7!b-O8}vm)eCuUR{N z#HOWVVgz_N`RqB$R4%-f%KHjFjgWmO_I1H$G;}44$1gUa?eAKcLK6Wnl%?t^%({WE zi8zq3_v!60ab0p$bkmw zinwmY5q#bZ@`0vTh>-$dhof>DVZMt_9k}^t5waK9a{ejsi^%SRX%7U)-}}KS5CA?x z`1s(Qzv7yHhP?AjcKNK8e*$1sVdd{wzT_eS;1azoC=Cmlytmgf8>otZKSEIGS8?rU kD0|TW;7bRWXORH-1unx||C~rNhyVZp07*qoM6N<$g6WN0cK`qY literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/meta.json new file mode 100644 index 00000000000..2b040938ec5 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_armor.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Bee Station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/3050f5915f4aef410643be227510b9350350f7b2", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..115565d3ec5d71802e7fe7c771469fe2fcecd002 GIT binary patch literal 1467 zcmV;s1w{IZP)@+k0+!i8u1j1X@HB4Wdn;ahez#xrBwvew<;f^ADB;mUNK|auSY{6* zK`NiQ8)|3|HWPlKS$+lmFo)Skgb@Qfhjw#R&`aXXb3^$LD2R&o83=m#DUl>Cksz}H+ViNjwujg+8uxAAq_A=3rC?*>80 z@9G5CnuLeLmtlV_HMF5J)qgrUY51Ma!Nse5nsqP*>Di0?js&#wpq0vB{LrD|o40TH z;Y8>6CTJ(0<4TJ<5Ar=-hUn0vZbMXFwJ?wv-3E0V(t7%AVuG)=R#57FIRSQ(FHPP( z@%1Es;4C0|B?7B*pk3b$o(SN#u)7w@Z^b2u%Hc2u5=I2jHWP_VA$IL5Ec*a!m%qUM z@;>HnBv3jo^P6Em&~5oicv%Ko1jzlAuD_9~Nv^C4DpURG=_x0H+WYMXx+$-=Q_ln4 zplt#CGIC<$`ETwl&(y!$vp(=Y-i9rO=anc11zH4b3;m?%2fD|T$7 zi-Fq)34RhhkOcUN5dj!-j0nJxV?+Rk93uiSUTGpD-PxHUVnKo$>@O z0_u2Zj3y))S-{JCA%{n1%i?CX?7pZV&>cJ|LSjvFAGqUr#}ubPsTw-#24f#k%Ml>B zc>**TcR)_RNob|Knwww>EdpGV!un2xD;l4j0R$czs3{ByOGf@ATl;e$jzpC+KMZv=McD8 zNM+aEM5?Fcix}=7>GxrD5X!o_H;VEc&G`aBK$R&cA~&DnW6O-&PJfm_o7txPfS^G# z+wD4iISNatxj51%WZ2T^M|Nl@h@6DR!&h^jkPeIpP}jU}ysn>6V}bPH1(Iz;_yVtYkf%-fjQ@002ovPDHLkV1i5mxefpT literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe50a3572cd39d8183079e3b43e8668da1b4c7f GIT binary patch literal 695 zcmV;o0!aOdP)_ zxfk)AbIB!Vk3E=cp?LJri;^aUUWB%!h;f?+<1+~jF^apsdAr-})_lB#L=iHOkC~mF z`MsI<-dw{!mKnedU}0&s#N64ou!t2OpV0{2;_#zumWuE5)e z3Nkr{6$QxhWQ*Y&m(RY`zT#<<;iJi6x!-QylnpBfkPYhCL>*fjifzaL%NJWBn*3}=enz>@(Vp->#koaP!Ltv%?}3d3qaI&s;2d+%#~o*Zk(O- zWC^Sl4)C7qbSjGRgl+f8o3e@JIXli+03@R4@ffP_4x}#@66$;ILBgWe0fSpNbQA7h zNv^8%VBhLKAJWNw(Q5hLb1$c{0ebD=cKbV?RLVZvY*?|3#FEY8*CrOWGGW{Ppv4QhI&TlLT-BU;R(_e0qrg dL;$8KzX2|g6?KD8&wBs>002ovPDHLkV1j6IK;ZxY literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/meta.json new file mode 100644 index 00000000000..2b040938ec5 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Clothes/Outer/cult_robe.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Bee Station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/3050f5915f4aef410643be227510b9350350f7b2", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..38408cb9987e04ae5163d78e0d55d4b577782273 GIT binary patch literal 2380 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/meta.json new file mode 100644 index 00000000000..9b604947e2f --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_blade.rsi/meta.json @@ -0,0 +1,72 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ], + [ + 0.3, + 0.3 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53ac6575fef761ec55ec0ebc7855893da9b19713 GIT binary patch literal 532 zcmV+v0_**WP)--rO<0>%~l>{SJf&sbs~NIRdsihzL6cT03utGTvzl2F&{#Hs9q3kdv}5uL9o zb^3_|4x0_z_4kYa2_gV6UM>J*$wK1FQe+moLPbC%2=8f;y!+4k#emus}%?7 zy^ZN+G<`rn4OwEC^Gt97gk&#eN64Tves-t{0FKN7=gb}G znxV@ET`&Q_8%GC}JipH1hT)5Ay^25oS~r$_p=KYZIK+h~6%E<#-Z+n_i0{Z@iAfx-(C-nLiMUj7Du zpCW1k*aQL7dDx&{%o+Z%Kiv4ijgfsK=>6&OxHB2DEszPS8Nl}JOTd3VKF9@zKwz+< zq>Z#4=)XkGKB@>{({V|8IqQN1^!D$Q{+i&26Q7fPJKN^x{T)3&JP<}>MQ&6CNbr)r zgSoCri7~)1I8fYxr5`Z05o*=eUNhuxMo%X)H$mF z>YP;obPI2&NJ!*LSUk1 zAZH(|st*Vesu>`=jh9{*m?EV4@fgn&2lySoBg38|IUyvxNtlfqapx>o+E-Pp9hqNdtDk6 zSbJ%#cA&X5)(X&A8fy(`FO4zPzgCDD5@reDOp}iiAX37t`T#e>YXw9|h^`Otr?=D) tI3ppdKA_d$9XKH&Dg#;$-hqkV4qr{6fVfg1+Qk3>002ovPDHLkV1gL7L$m+@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b44bebbb3c4314be5916953bc0007c3937c3a5d8 GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|V23 zPZ!6KiaBp*`R3g=5NK6*X!yp#D5bE|lz0vr2swgo0JGoOErHtncaubynx&S+el-#=e@eN9aubH*IzI$OIv`$Jmh zu_eIwAGbj$eD`fW=BKNm7O zWD72<6yuM`oxtmnZMV*d!A)b0s2!ic6;75b&weFE%SqY9FkV>ksXdmF?O^kT4Iw+< zZB?yU8{hiae8u7u#sOcSu9E$H|IA*7Gk-jfWePJ0%)CDF<|{ddv>D6Om=ARAW=@+0 zWJF|_J1~8|lEaYP?Z>4!u`rovoXBX28rmoR@*6Dpo^WDD%qcbo-t>>L zQLF70H5tClIlA35{Efc{6GPec<+kY`Yoiw1D@L*%SaiQs?7nL3N_)kV=O6i0y3KuM z)&2gm)L%}|I+W|@M-)apphph+*%U6Y^B@$rNXaI3hcC$y!3x5o5PXZ z%PEuH7#j|^t+eB1YdFI$lAS5QkaNZ6DmR0)nSUu$gYoAX0kfkR9sao1c{S#-FnpZ( zZO;1$j^4e8l$ie=(OP<7St(miGn@C;^oFGJqNk20wAc06R`zBd*mLlz z`sM#SzpYyDcrSxv+m^%f6_2-Uk-U%T6&$_{xb10uR(wJ090u<|hPO8H37YB$J}EV5 z{bWjUbJPuQkUFz|;kA3`KN{T1tTYP#UTn$u?T0wyof-NYrf6?S6>9zB$+UN7^6c|#^gDr(&EVl$ie=(OP<7St(miGn@C;^oFGJqNk20wAc06R`zBd*mLlz z`sM#SzpYyDcrSxv+m^%f6_2-Uk-U%T6&$_{xb10uR(wJ090u<|hPO8H37YB$J}EV5 z{bWjUbJPuQkUFz|;kA3`KN{T1tTYP#UTn$u?T0wyof-NYrf6?S6>9zB$+UN7^6c|#^gDr(&EVPx$qe(L!p6~bt|IrV!zPz&Gs zzViAp%Zvk=OJDoOO%Rk_!m2=QCt)mocTiLdKr2hvvL6;X0N~_$mvc6&Kv!R8UzA$< zdNtJ`@_@rR$K6deVb5#bv&&3I?j|hqKM9uO7(%bFKv?96su(VlpAdPa+{xn}euhZl()jZ4*r52uU2-8g4RutqMqma1aFLy{q0+k~o6@`toy(Egs)LtiA@v z)VERrwfI~N(brBuDulByO6vGrH~TYwNk2qAUGr`bPc$xl^p_*#qPH17!WWD||S&{R2AmPJpTn z{aMA+)w;GtSX8DAg&{*u1OOa0$26*dCSy;0Ocv)4=xdaqKfp$S^as!%@EfGbc>hhG f5JCtcWD$G=l=vERjK$#Q00000NkvXXu0mjfy!zD5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..678418769a2a8aaa104df6f3f6d1fc675366c567 GIT binary patch literal 588 zcmV-S0<-;zP)Px%21!IgR9J=WmOF0SKoEvM1?gDj3hvYi2%y4UI^H0Fp@L9=H4v8uk~1ifOBW>I zM1>mNfStP(Y+Sn26@>KLYQQ z)L-gna4C5OZWx|lfiV<$lDa`t4y>(yF5vbusm7^9J`Y(KfwyEjOEH_HM6o*C5?JT* zT?Ed-f9(+Q?httePOg~pmn3D;l)NM<0Jb02YP>op@=;JcS5fF}ILLjH`d{Gvbk>eZ zy0OtwA1c%PSmf71u|zNdmf(WTSy<9GDeO04v;;!_J6!7^Vgghh8nWq(MN^U|sq6aQ zMcyf(fZH(?%Rns3MT8(mf)cup87S3)D~V{}R_ zEk2t6VoUNslMAs`|3Tf?!8x>jz~@ifEPVL^t7jgXawGhTb{bkpS$0YwQ}5Ln4}*w0 zjN9P8;vFcuNo7T~Tac?=?MnsUd++M(Kh%Ebnpf}c za%6_&$H&j##p~BM%S4@gHJKl5Bak@ob#{y%`uv;qqJcl>G@e@b!e4PSfyYW0_wYJc#rn_0>lGVkO4LXdmre~h0C@^buf YZHZ?=e|a*dt^nES>FVdQ&MBb@0Ky;QmH+?% literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..72d7a44ff77b9cf5d81a837d3acc7e4a56824825 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq!^2X+?^QKos)S9WH)-cIEGZr zd3(n&h{;ia^}@9h{cVly2O^w{zwkY&xNLTTRXDKlW3cIaRgtX+-`|t$T9UpBXa>;8 zCAFdT|76tvcxBxP|GIQ@zQ668x9e7~s+zU9d&A9lK_9o?e5ZHo|8(wx_|oDZpGw4| zTb@2${wY3QuK4eFlkfXh?cO~-{&2w0+p#A5t7h>(?36XA`nR#;LH&UjKfxA&h!1&B zHvXz%{A$1X@BOFCH}MA_U8z(xt9qs4#Qp1k75+QPEcHBsEi$-Wt7_KndGA)O$}&DX z@z4D)`+hO$oW1_p`3Y;yxqgrD^)pt!KX>j6|EzkQqz5zqmDs_}-!CY;JIuN6-M&{A z|K^>D`xXD%=>6tpi}h=l|I>VVbbZzP|6iXP3h$Gt^SGC>@6CZ5Up{yJonLRKU|Jt9 z-)`UZGj!@{|NATLK@M+x{{Aw;;cK2ssZHjTs$*Ufe;}$|>D<(J_GKE6vpyY`R@lev lcK-bP0|!4d0-f>i1+S-YmadZ9;y#e0JYD@<);T3K0RY8@*FFFM literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/meta.json new file mode 100644 index 00000000000..39fae95edd9 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/arcane_barrage.rsi/meta.json @@ -0,0 +1,77 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "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 + ] + ] + }, + { + "name": "inhand-right", + "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 + ] + ] + }, + { + "name": "bullet", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/bola.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/bola.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0a1a7922155a8b20e636ebbe0f16f7967d168c1 GIT binary patch literal 616 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 bRfIYP44D=CAwElaRRP{7a31x?2{-=(frYae literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/mirror-inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/mirror_shield.rsi/mirror-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce6509226b16e4e493ce6789ed2b0ea0d376962 GIT binary patch literal 2543 zcmZ`*X*k;QnaaUiW=IWluj3BP%Uj1TBWLZ)iR}` zqKj&2d62R6AH>!LV+ckoX_?r!N-81Co6hrom=E)QIQQJ=oO|!{JLmVDdrpRrm%FCA zkvaeXnw}o6eo9UIA_z6*+Tj%TTB(q+9zk&cpvCzjkbDa*W2NoBr|ZFEmr52-Sf4d< z$C#=z{nYH#Ya?ORC_2Ux7UkAniE(PM~j;Bo{)K*N|fYKdXLlH^NR~YqI52xe8o$*|?9L<%Z+>2uX)t-N7 zlJ|COngg>GYVT(^Ii~%VKg?;Eym;iDZ#PjRorey`Ws;YIAKK6_T*%U<4vOs}Ce9b`NvU2LE{ zX0icC(X8Q?E==a?@WF^8tf^6i)$c)z*-!{gKeMb{zBz>;Et0p`y)zptJ- z+}+>Tr~U%8ip8AR{&5v;j|0y#4T@S7RWd@S^jB}r>};idzH!v))7My3^6F$=ADs5O zh8&y;4cX9BqiqUDf8f9xk|AOc05Oi6i;d;Yt=~FmXjp@eTYfTb$9i$3%!ii}5r@9y0y^J+~4+_eVJlHa1i&DY23;%c&UOo1tUQXYRt!m43g$DbCj8u!fQ{t(( z1kxz?Xx4SE#LQ`-nD|+qhXHRQDnr-~po{F+K*(eSG#}P`vaF$(2N7!hBJY8HjlAPa zJf8=uq-){y$_a_4v~d_B0sVwEmBB7bKX-g}lGCH-+MDf@ofaS+MD!qI_m_#oP-k*H z2N-zv&o%`!FRtD}PV}rUkA~|z-XiE|F_)XCyistJ^q4YWqAgf_7rr$T8oUPdgy+5u zPjQKHDQE8eaLk)%>u7xSQCOHMFqT}SpjIMHTeoGDHtBk}LF*S)6dIDrpNB64mNFF= z;-A-v1<217@$XMIk5WP=LN=BHN@h6Hy$iD>@n3I)KVC}Cyr!sa!C(TbIT;ffg2FH| z8QGG*nXRqmAwDr@h9?GKJWQ_56!Wvt+!*!QlPi9oQ{oGX5jSexTV#ug7Ogz~Z6-U| zP<1ef5^kTP^MP;%2yW%st4(k0%Ok#7J*!u-1Jbokw(TI0pxe+`u--==HS7X+f~Pi5 z=h(LG8mn8s`>gZ66b=tCR^EEF5my5pV9y)ovO5<;6LkN4_Lt@w<=(6w#^Nr$wr6?GiEO{wj&yWN%{e?j@Gr!$Y>!eR*1 z7UJSjQyblX0`H0{q7c)&C-UI|%rZE3~4`s+Dd27sqmDU*X8vzAoO zBP-|;%hBh*6+BYDeke#5;X+g9%T2Op4teK;61&eGY7u47gza{KUM|ImV24-rhV{(f zFqph1h|T@9`SG?Osbw-n3#{w1s$xuCd>+d2YpySu5Y$c|ksBBm-xEn|H*iZC*uJ|^ z9n(j4EYxPC$h!o>vi7gL3;p{K|9ATT_rd?e=>suGSo^P~4A$EMH@D+?^49rUv5S$d zFmNyJbpjGMkM%6pilL9$?FJo&P)8?bT|{P?K_t7s{d8ZYV>BLy4M zSFrXM5PjDKS-vK13pl^1AB+JM)_IUWq$ZwW{<47o5c|y0N{WN6+4ioGzA)^^C_^=r zJbRGb3%t7Q%(3tZnS3{5cU-ccL@Df`Y0C0x1x(7=}6w5l61g6G7=R&{010WD}$*${aYI1cYw6&LDj%g>Z{_aB># zdj>q@l6!y|+2nIAg;lrIcR5?q37fNu09w_HH0X@m)Cx%a@-$70IwA=$t6ZU8O%WN~ z1U5u9A(Lf-!1)i1MTZYI9fa}X{vV{64GkP!>G~%9By}RPynBv!`5VYI^u9ca1k38x zT`_EfIm@o2LSLpAsWu_ny$N*#*++E{P}%hz!1UJ9wvEI?lonk%>>e$H;YY39PD|dh z@Vz?{ODlFdAeiOZm;F9!(?-4Y#x61KYTBDJaPN0sTC!@sMSx2q8`{H9$d z3|LxlyDtWP>pI^e+n=2Zr^6Qgv(tUt5$z3967Zc4~;qibimG)4Um-_oEkJm ds4C~9ZUt(zH-DgjrkvaWz|+mkwc0r}<-eG_x{v?> literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e7df415ac853d944e1e648c30331e1c347dd4a47 GIT binary patch literal 665 zcmV;K0%rY*P)q;usqH`v~t zsznM30J_a6`iG!qJ&U-PJ02Ol9`&k4y`Z+3mn*Kr3 za1;QH#{SOx0Pw0+=I?)6fujKScKo!~Tvg#9X_!jYO#)Mfx7vUT>1v?0Ci!+J zvO3!V1C((_&q`tQ{4`!rCQt(yQvm>VKVDfa7r3a-sW*iWMaYqztj<_Azsf5r(GZ~) zIckvyqqw3HR7k9ri+h3xFrmQrFJA{{&S|Jcj*IG0QR$-PZy&tJ(Ysc(X(fWf;J)X) zGyF(XPA{qp*1qiA4XW3!aQ$)YesD#zLmyPgz;Wy_KI8T8KYtwoCdOUGBpiWtNdt)- z-`+=T$}k&9sSrD7FbN-TGRNMIe@w|5a4GOw@RoC*gpbv7fzA8=S*fvrd+kPYK%f!= zRAhiM;owjhI4!Y*7=He#kjYm3Sr&jE`!y)SbxFfko8;8m3F%01if;8d!%xAR9BusS zq8hjdK8bsrF{Z}we-mI5*Uqmwd*Fcw9!TLIKc-L$--Td900000NkvXXu0mjfvdt`4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-left.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..516c310227cfad6b71e7a2581df14ffac12f9dc8 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq*#ibJVQ8upoSx*gMoqZnx~6n zNX4ADcYTX4I|#5{aO*LC_@C`fL=pe|Bi4FHu5NlP!qMH)D!4RMM?3je-~HQ5f}UPl z{!*^;s+2p>I3T#55&p{Je|52WAt&pNsaAR?-=7oQ_x6;8;K#RTcTZuu;_IpVZ<}`V z-6^i~bMH0eh9A@4`tSGu-xv00%`Mcie{`XR=kl-Le>c4Nd{){(|DW^y?fd>b`cr3r zr2qK+%%6g%%^W|o*?g(}@>?;NJuay37+X)r;bew*5;`9|<_@%_V-H!r+d z{B5Pa#gW8K)#0xm1%5W|<9j~uH(TGz*+P-U(=Okd-ZyJ~;TFcy;79xJEfqA?383 zruxmTxed?S%hSabKF79oT)uvP52K{}vGYrP4gZ(EV#~PKaQ^P=Yt#3v`V)MAS!JRB zfwj+>VFn!FF5*o88y{V^`R0W;Oeyjk_iLBN1UIYk-Y8Su$}oA2?}hj6SKq7J>}I^Z zuIKW_caoD227mtjcfu_Bjd_24=QaGUD!&##Gh)*GmzJ;dFEz~nyIySi#QkC4B!6$8 d#}A5;$NWrUCmw1};4cDM>FMg{vd$@?2>_4t07(D< literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a159a468a0a03d670275fbaa26382e8e5957dfa7 GIT binary patch literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq*#ibJVQ8upoSx*gMoqZp{I*u zNX4ADcYTYb3wtKax zWbXgTtUvbV$}jtVI_h$lfo@$`-R+#+=jz|{MQs1}qb@SL|Igk$xp#|mw`Km^ZM{DH zU;X#8*eMyabMM&PDVIEueJ*~x*y*U?=klu;_RRdx_WyuJLNzc;xz+;*S8kwNmipv~0!6Mxe65A52yBe%TYJZ#UF;`99-f9Cxv zKF&Mr*Y@5{r*}G?~T8HKdD!DWIyxK=LIE<%ci|v zlg{Piek(ne3i8 lewlA&K4&WrG~vO_e+@K@0VDtb literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/meta.json new file mode 100644 index 00000000000..489466f74a8 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/rites.rsi/meta.json @@ -0,0 +1,66 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "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 + ] + ] + }, + { + "name": "inhand-right", + "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 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..526af8f2add528c8738a232c9ed31baedcfc7726 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|Rrb zr;B4q#hkZu&u0k-N*vuErd@I|$$5j*86^?T9YRa;mg@ax>(Z-b-tM%(yOw!+SO0^c zgG-fm2skd>aY65h#8JJbsVd)Q&z$YE)cM)@xz$Da=lQ+TCe55T)3SWu&dm1@=ZP}4 zvNbGZOvqr6kYZ>eTMN zyWRSu*|Q_HSJr>wF(^I%VAa1>X}h-WJhrSZk6Fll@&3{b?SOUlwZgVJ@$t91u3i26 zey{wssQ79Bdbh6a+*h$K{s&(G~G4Jo&G<4p4IW^ zvxC%)-m>gC!+ztM{#1U0#m(_5k00l6yYrO!jNyV$oZG&7KV^QzBcdk1KzZ`SpDee3 zP5sR1;dEjB9R7fq{`35v^M5jIu=~uIQ2WoBjfa=Pnfbs41_KiY0?fE)%ua_^*En=k z7}qnE#1!;iFhP1(Q9e*jqUEb2g*rh8gwgkwu+bp2z_+Bm;w|tDnm{r-UW|r}D)f literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/meta.json new file mode 100644 index 00000000000..1568be4e9f5 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/shuttle_curse.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/meta.json new file mode 100644 index 00000000000..82b84570c31 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "soul_stone" + }, + { + "name": "soul_stone_blessed" + }, + { + "name": "soul_stone_glow", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..a765aa699c72391a869f84f99f0e96ffa1c328f2 GIT binary patch literal 298 zcmV+_0oDGAP)2D_;+F&Lrv>Qut!cJP7;0J|)WjkNvINLWHE7GKXwjFyNtY(5|&qd9i52lL=?-|HTW!KM}MAHJteYY>9v};$q3{+`9 z>0GF3hX(IT!Ihnl0WQun=a?$+N`1rY1*2L~A?3(OmW=;BzuaOwSAc3okEOkx0bw2IwDt#q_e$YXATM07*qoM6N<$f|zlFp8x;= literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_blessed.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_blessed.png new file mode 100644 index 0000000000000000000000000000000000000000..1dee5e3fdca879060935769c233bc9a7f386eb3d GIT binary patch literal 305 zcmV-10nYx3P)I*u=H}{^#fAVmgFJ8&mPkETYUNIs_)J{r5k=Y6hkRk2cYk zVFN^`0gUn>0Swqf>AIEh9v+1P~L!mI&?5k00000NkvXXu0mjf DW_^9v literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_glow.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/soul_stone.rsi/soul_stone_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..54c53e88f42096a0aca21cca33d8e0824c85835f GIT binary patch literal 592 zcmV-W0|I? zJ_!j+A>(JIpFKqcw>9<}U$(u}tNHzA%uS4w$zz=s1WS&HV_ zKC1O75eB0t-_?%E0hR2EuUAA=`jSl{LRa#7d>;{B$99TXDb?G#6s(kzrD!lzgkS=gy0pRGp8ZZ_e@j)a==-Dn-DVf zf`_1mPmK7BuYmVhFQ&0SRn<`ZqgorEbMgYV^6#4HLM84}{$24YahpeQHbZ?Pq?j8_ zBHVWltN;{`&lSb)it{OC$5Js^07||T4Yr#*wwpUXE}z+oFlY$q z$?Lm8v^7;Dzv19q0e#5>!1v{H`Vn8d94jH{{eV(5_?sIlS){tLF_Pf-14slCBINsH z5aoUVozLeWg3}ye8vlLdGA~5GA29bySp4a*RREvz&xyrXK=k_ow)6R^F)oE&%inZ9 zUq9M&T_Rh(fK7zH^ZB_aPK>@EKqjco+!H69+@M|sI=MPP9cMdCBIx9vJm9e(pto~R eo?#ef@%#c(W+O)~QR6fK0000LcO2=7@)U>$YkR#*xgokOv%Re7g-EY{er#UXGmRudgwU_gW0{9|e9`7zM8rv!W_iZw?iHm$8`b%YmB|JNYB`M=<5OI zxx^S>LtZxcRVQ4v!IKM%511=KmKkn|PV{{9?O+^GA_V10MM$9{ zasO`ac5w$Zk&aDX<)55Kdo^n{SvDWttAjP)X!CnEK^p6&%MhHu@W^|El+InOl+#_Wlo+D5{ls7N(0?i$ci2&^$@Ey1sSZLs?FO>O|G_>rM5kqqrSuhLm>Y z8VS#zn}16d?I*A#*?NBe=~^G+u9D(j@em=$KUg##`@|XByBHpD5$eT^1nQIZ@i@l? zP4;rZNpk0z$5+`Y-MXmd5I@db8fCEdAVDe%|7di=r`o6hlN;~Y>-obk$Bzq(kUk2u z`Q}b%`LIYsr1yJOtG~5@POVC{qVZcnMOwALccuCY{CdfU*)XQ|g9lpN?!zxtM4fTZ zQDe!3Dh=~ox0r}5kn}(1j|wWM*Y4Es9wj&2yQBAqStqde>3f>COVfL$D+2uFH6_JR}H#ogvi9TGmDi-6~# zAvwc8q`s3&INR36<3H|afyM#^ysO^Eq)W6|m^FsyAY1~_c{zdA6cYGz;IKhiUXqF9 z97e#{K6c7*nzw#{$$>iDhS_iu(#6|3z+`Bm0$!jymQ^%l^@RCt{2mR$;hKomxA5LgieiAV&sfnIy*J!l#2p>?zeml3#) zHc%KLVvqei+1#O#VI1(Mxg$g$3@Qre%-lO_7h29=;5P-PzMJ839jAqR0YHabKxET% z^7G^K1(D_%GJ!$gft_@{XCq<~)&x9n45#yzi(t6SXb7N`g}ez-BuQ>uX@0;&WC zSAW?fp@J6#5H29A1Tb>V+0ga{sQ~4SO9j+slN-~DK$(zr0qV3a@CKx% VodYx~=~Vy#002ovPDHLkV1m>`m0JJ+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/meta.json new file mode 100644 index 00000000000..b446b7060c7 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/veil_shifter.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon_off" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3040ae6a832dad679d812f2213380b46a969a4c7 GIT binary patch literal 1338 zcmV-A1;zS_P)`6pHRCt{2T)$5gQ4pR>NKO;MD-Od&TMA<^#Lk{*q81jKkZ7o& zz>0!IDhnzK3o9w0BA8fMSZJaD0MZbmF^0}U0|62USa6BSIrDA@p34&U&HJ(3^1kG< zcYC<==9_tY?tb6fE;#4tXacq_Ri|j%`=>c0Jw`_ppeIgbNQmf20$MK{qm{|^d3t~F zcdUM)Yi?V5ENcRg`4%!?fq>AH$4vvbfFy{ffrx<3VVJt|7G^N;00ypvA|YM*{o2BG z_wLC1Nl!}g;k_5I${x%)`YyvZ?*2;c#5>rrsRc0vN43&!zW z@C*Wh<1>=ZFhXtuve;L+-rcSOcLKmb$m!4=>c{v;MM%b)dm4y;1{M35JP!h3$?J4T z7l7kee{USdm%!@(0nMv@YDj8W?o|4$z=PLnt(AM1;Z|)y?f0F0 z-uPgUJi+Q5@O5Pmp4TqIm!FS=B!60bFif5xB7oR`(pP~u8!ZZcllFy7J{7;0_XoKa zV65%nFFsTubk#HBi!X%<#snO(Uxn3QyFo95eZ&`a0JC2dT*fydplsDA7!xifTEHQ z5x*m~L6?XG*d9PCOP>{36VS=Y6RZfZ)#h!XtHn}?2%x~ti3g+&Ha3T0lmyfC-}syw zcFx(o`keQ#6m5-$JZ>0B_?hakvtB% zKncf{*-F=(m*lg?z$EZ{Dh^&b)V-_23|o2H1X%^x=B*~oR$qO1h?`tR5c>m8lBXpu z4KXmj(gtx1x;Tm_Y4z*iR2{)qK)jr{?*p_em#zUcVkUjbM8e9`fp`U4?*#sKL7(mNVtw4{Q)L_JQ)1}0MQ??QH}n9q7eN7(H{`~0ns1e8qpt+ zdk_U8`U5;75&-8M#srWu8**`^Zx|Dhm3&b?0T*$tr+~hOpVkzI>W}HIe2;1f*Ay^L`daeNO|7 zIi6m=&)+HQ&Sd^B6gfoT1do6(VU(e~NdU`P%lB#Pef2mck5wMUDzE4gIRp|$*_id; zPF}t*T)1tl4yTh>$}oU<@v>=rNIk!R<4a-vGsqJ4{*BK;^+6@i5A`3$53+hZjbqOb zD8My#Cj0?KKR>_*UY;KSW%dWSUcWCz^anun2Sk5B^an(LfIXr=!1N!i?L>b7tVVx8 wF^K+v=nshgfani!jpz@^J%|Dk{Q(~F56Y_~y?%mT761SM07*qoM6N<$f?|$qoB#j- literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon_off.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..6cfbbb737e4dd1b709d4a32addefd5b70eb3c104 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7eDY z#WAE}&fBYsd<_OXZVx9-P;gY*@Hr-F`GcA{N$dxbPU|a$5sW0+ac-U z>n`x`tGic!ot?Sha@mi3#*J=lcfOXg{S7)GvC@vCp*z-}t>EfpMvJ~Gp@z-#SPm3k poy<_awVoBof8c7M`}6$|rrv1BXBE<0UIX3C;OXk;vd$@?2>=jCTnPXG literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-left.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..882a7668e5791fedd905b7d78485a780f1123470 GIT binary patch literal 1610 zcmaKtdpOez7{`C}W1BH+a|>ytqEhMNQZjQ5oe+hJ#wocB5sqADBOR2}cDm}qJgQ@d zgApRx7RfzRlglxOZo|xd#@x<2{afds&-eR0??3PReV*_0X1co`Mk2Hk001DJo$Nhi ziU$A)0EfyP=ol#zDB9WH=J=(DqMVnZYBp*PJ1`lD6u6dqjA3eDhLZV&DSg<5{n{m;T^ljG5I&Nt?Hy0D@9XnXGR4CZEZu7nNT2jGV{%BlLE7~?AsK)o| zvhd^BWbN6s7S@E1==2tQ3&F-)X8JtcqT*2ex~TZMQKGYIe{54|krr1YYC+JkPcYCZ zT0yZZ#u_bFm)|1q<^7Cb8fuac?qMa1&rOLxKw}iDZ`zGwS{5!_FHA>As*U8zyQ%QS z4NH$2+?B{vtW|D$UMSvkLq_T3(MZAFW9YoVe{U5SZ_{HJ8Q7S#Y((rq+z`^D+$ zQ9p@vC0m(N2Og~xQnI%+l~5D1UrRcjH(Nd&&62TdZ8xfxQOg&<+_DrvfYhjffM zpy<`z?761i>+o$`POp;j8KmAO8fnd)-3ln_cgtfRA0!DNt655oCB#?3;;m7489q%o`5TZJT~yN+?5>Q-S=!{QW1IUnUf>^;rF7L3_-h&0B(71FL;geT&>#iF-IFt2^B84-m(v3{zX!K;4m0%~AF&yXM zm;_R3^X;Dhj`{&S@~u=1p0E-U2c+8aW1=V_ab0_%)nGAwM!HE9#dD&_Z|>hOnttlp zfzkP?#c-su$s3~J^We}Pdfs`w#U-{zN?>0}q# zxEwBrh)&SaTZ4DjS%=8ynG>dRg0>;wmB?K&Cydp9G-TtnHny7_lYBwLl; zvfR$joQ?9C8eT5nLnuu4z~%kQA}^eBc@rSBvFbkU7bjDAmWDw|m7@ceFCSyGGMUW& z7>Tg(S-s!+%Kn&n+Ma`mtJeYZ%g1O*T7M~2whj5BO@TUe{cmG#2Na>ke9cd}^6@I} z@6T@3_Q!*2--XHN^iUs7z1v}6=t-G4Lo&7BD>yxAov&7Xc!Pe9<3%WmOngxU!O-9f zVt~7&=}0or2TdD%aU8FIg_V@b`-1F)$|moLl1|_Y=%K)n2)e}gQ2sbQ>=!UwrkoAq r$n*6{cz^F%NZLAExPEPB^aM6;?uc5%fkmq9M*z+auJ$Fi{;B^0&z9m} literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/lit-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c53f54968fc948998b31c26f658db0fa0f4c8d2a GIT binary patch literal 1555 zcmaJ>e>l^59RGf8X0#a+*=XZ^Xq2znCuSE>d}=hl2RO%j7mRdH{6P_qi}w0 zqbqcNbk6xP6=AwGb`_SN$&ZBmXwzgi_r1F3?z!jj^v~<{djI(2^?aV!`*VfnzYDE} z)dBzjP4)5G12G8zKmdt=6wEssBK3Z%muJAaf;WXNDbGmyl-qm5^$`Kyw6;Q6m$y#r zC`0Br__}Xdy-~N1!Qv8-EL5?ZZV*xn7HW6n=TJRIYVfTmW&7lNSBgZa*vEnflWji@ z_Enjf9=#P9pm9IADiZ%qLeZ>UH&K!9B#d0}*b!@Euyk19NFI&64#2PfpzrE$MB7Ac zSbl5rDCy?MvgqU?IfK}kX3vjbP*lxXmRS{n!GO%y*)`hADYloH*Lv4n&ANZm?*7GX zzT(LO^N=`Y`M2dchR%bEeQTXxoXvd1BsL+D9hS-Ot){t+nD8KVtyR{Pp-^A0UN)U7 z2h(mhU)M0~78usq)(2>elqb0DRSvs(b{FDude7!;ldnFlqKtSv^R7_|-C9!WxCu7H zzhuw7zS|iYf%DtblVg`?foH7x)7y9}IJ6|WCS(B>?dY+gjS}4j|C}WtSA(T-Bmsj1 zs`9QL)Nq=iqnXwY0NS1hYOM>LV3KgmYDSJ_&guFD9*W|SELzKE^3yuLq~gq78xFoa z*Hi&MA?&`hrZTlPs`QZ|WOl5uo!nwie&zG0+!uc0n|;iQnT%RZI$H^f40YbSHxd=F z8)*_e?STq-r%~+@a>gDP)vRK2pq{;BJ;I3xBAiJ4b-^lyaO54oe;UC%k0u}2DaA6U zcWib{B#D?eFJD_ckk3yFYzK~(P%Oi?_|%u+#1Sz*I;T?)q-&=nU3i+$6Cktc0PW3A zN=7S*`~935a&CLs1>^Jy2b492QXw}g_0X?~VQ}Xa1tZ;`kz__r)2WlUi3SN5r4Rbq z`NZ+7_oSLj`Nsh|SgHpT128O445SsV^z>OaVioB@9*rQeV^{Esus7o*>7>%D3G?a4 z72Aef()P?eH~7|=WxiNH;R3Ho?HE{M|L$jyQPKtXN%YDx+mf(G6ZncGD)K)o#V!!Unln>j2dZzJJOE!ZH^u>Kcrcxhsq(j@AeSw5x3?jo$@xI1ig@B zd}CI!RJUTs8Hl@&R=^t&t8Bz(F_642wDteE1o_!LcDj?UW?n2D%Z5xI#bwmZoDyVA zE!Ouy!$kwnF=+VGhGp~^vKdO!hAJpY6q5f(QR}RLN$|}oVDl_SqIWD24Mk50Wv>zx zXs(<2562*pnYl{OZafZ4B4C+at3gT60aMxEY5?mLC&SV#Y>5$`xne3~laV`&#zj`u z8k>|dtS>EFN7v`bjx3&#rjEyVjv`G9aC)@1;qN9iw$c+$Jy^yF*?&6lF#E?^7paHu z9a9doiyJ0Yd=ydt#6k7S<-ws>^Opxl@V}i=wsgE?kflQtkG@=!ZO8<}pW&DG53(`D zqy=h}4R}OciC^sy8)v>CvQW9wK>O+LQI{h17DT|jnpVXMY8U@26bXh3XOce&+rvqf zbdanW!Fd>COWK-<)@$feN48&dpS$LfIpV;}>a{c=PY0v*V@oXiSq(erUCUH#KT;ztK WFVy__$woxzvj?aYf3He%2OX%bK~-T<<+W| zM%)8BqQ}$4F~p-YIYENegn>yzL@go2W!VNz10caLje$e9$(vC+#8E3@0{hU@%h?ayWJO zMloB^yJNGA1B%SI1+l4?C!e0D!OCOizCgs_hK%FUPs~g=I8O9W6I5YhDCp#h-1#`Z Q9_TIxPgg&ebxsLQ02hmajsO4v literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/unlit-inhand-right.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/void_torch.rsi/unlit-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a3016072f578b825b9595cddcdb792c26a9fd1 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e(Ey(i*Z=?j^GFK2g-WUza2m)6 zbejmKD0A|vTloSNFqQ=Q1v5B2yO9RuR91yVl(?i8Cl_TFlw{`TF)&ojQSIHx=U^bh z@Ok+9AC4f zxkG41Slab3-OFc&9B5e+UBZ-OdhR&Kjc3oCU7sm#e4;Nc9hV-H!W8sI?dROMd|!FB zs-+S4fR32p>EamT(V3he!Fq+6iA6<1wD81X6$#!#%?8gMj{*+7Vo2TbFyH`N@ByI) zXI7pKDgprwmjw$NP76+9+M(XSu-e>7z~{|9kA=&M-41Ff$Z{m4Dlr6UHts#(pryJ& zT;ju_21fTd*K_U>pS6PQ4#g!XJXg-K+bx0!0cv^-?IbpdzHH9;}HbQDftF<7$l2&dj(O9c0b;$7TQ+00w{oU;qpZ@W$!>tojf4a<_ZMt_-m3oojdRA2d(c`dAY2 z$lSV6vnd_1{bq9%VfQqPy)$zc`fYtX7#RqF+UiPxt-*slHnw+}A2HP+G|lN(7$=Z?T$ZsV_v_q~*dsFCw`d z1X90tRe-y}MF{Z}qNO5MObxuAvYtZ_VQQ-Q49QVgJE;wk*Fw+sGhKkKbOx*AqpVSg zKma@<$pq}&7>Wdjj+`13B@-#`G?e=wE8sRsLaZbX53s!8LySP&vjW%e-(fM~{YNIi zV2Ch_bwp`wty4FB^c^4SEv3gWmr$&oqMlBJpRnR>b{`PJ4VmM zs}1Hm>@#dndkr-K+Q?rkqiRt`{iz}Wl_~<98M$#DZl{gKtK`op`#n#j?opPE#r za9BpXH3B`;1)xum%oh-V(p+tv6eTT2jRL88214_lnA_z*c4vPu0GDI7?YTLRQn3u~ zni(nb$46ILR^B=FE8;P@Nh{l{KFy~(dG!qKL3j|JYHqE+gE>nM5fZvVkZ`uF%JzxMB0Dszk0xIVfeTZk+CIA2c07*qoM6N<$f`(s2 Ag#Z8m literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/icon_off.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..9e5ff36441a731cb01062a0c0357f4aaffcf7cf1 GIT binary patch literal 498 zcmViQ7(bM-AbA}0v|dA&YnOm z53-mti}ixkK*ef8BbNi+Hw$?bEFGft8l;lnN$H7qYoZv;HLw8$CJMe9a6di6_ct&J zP%|Oku(%eFX=jjBcQ*y8r+H07*qoM6N<$f<->m-T(jq literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/meta.json new file mode 100644 index 00000000000..6753c5926f8 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Items/whetstone_cult.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken by TG station at commit https://github.com/tgstation/tgstation/commit/4eaa299c0b20ae8629910a6a25be4be9d58a559e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon_off" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..af7ac8970cae37cb18cf8a4abe23e514c907ffa4 GIT binary patch literal 5310 zcmV;v6hZ5WP)aTcuhn9qJ(BkfDk~3!)&7Qo%0Op{-!mC3#I+AxXnaiWFDD#i8IJ zy7)EtALuH$DhPrih&Vd?wMdEgHH8*w-{a-}ICszNv<98D;V?dRnN0lcR_ddE=y3sH;j(hTd5_o75 z>LaB-00009a7bBm000XT000XT0n*)m`~UzF^hrcPRCodH+dqyZ$#uu^*@Z0Hv$j|}k?g8XWfPl5vUYDv*^?YYvM@ME=b#G&a+zBA-y?B3q z?@vT#Mpe&z`0#an?ZDR#eC@#34*Xg>@XeQ8_@6&~_^bTB`_1n@{Nv>^{_m$BuKa)f z`2BU>M>grnv-#H#AHLW+zqrIST{GwS?@QC?sG)!P&F}t7*SrPGHk=mEf@GV`=ceC& z?gTVVBmeief4E-q`RAX0_@-+%m`($0^jsJiv$>Q1rysxn#>KxlXgK7*x}kVY(6}0b z-!+0h-AdUf!)F^N*&J-?visF7ga*_Ejj2(yi8ZVyOLO(CDQEymPmGj;ip#ji2U^9f_-xU>J8lhr7+9d_1`>}$xJYZi=}7Og4f zVaKoYYnW&)djTrQi}fsdHoaJP$4b7AnG|JW9o}JxW zWT!jwHNXLz+%M1qwoBWzlFQg^E2ReoE78D_Q~Tje@ar) zsOu=5Gn=Wy!-$3%C7-$(H#wR-+05%qmt7d>d)*1edNr*n6?6oYer-lY((iQPO�W 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 Q=>Px#07*qoM6N<$f*BF`3;+NC literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/meta.json new file mode 100644 index 00000000000..129ae13cafc --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13, edited by @kilath (discord 493110710377906196)", + "version": 1, + "size": { + "x": 96, + "y": 96 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/meta.json new file mode 100644 index 00000000000..18c2bb1ce40 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise Station 13, edited by @kilath (discord 493110710377906196)", + "size": { + "x": 96, + "y": 96 + }, + "states": [ + { + "name": "rune" + }, + { + "name": "rune_animated", + "delays": [ + [ + 0.50, + 0.07, + 0.07, + 0.07, + 0.07, + 0.07, + 0.07, + 0.07 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/rune.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi/rune.png new file mode 100644 index 0000000000000000000000000000000000000000..db04c0731b2030c8d10f4fe807985316e02ed68a GIT binary patch literal 6020 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 QV*mgE07*qoM6N<$g0+<;y#N3J literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/barrier.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..64d657bba05a657c7d13620aa22b431632047d6a GIT binary patch literal 1302 zcmV+x1?l>UP)C&{_}#MG(>0+-(Uty`Kt7)OYyK`{Vh(=jA=m0edK`<;=Dj$mNShI2iCQ#g@I! zS32pz%`}s7&D7^3b5Z_XU-#Hlz4NPH|KIy_b+08&4Qw64lbUW6g=HE-8%165j&Prr ziLVJC36B~wpzyWQ6Lo%3oUZeSVj~)!1-t6$O}B8Og|&>46CM%v<+3HMF^~EZS2DjC zkvbrI5R))L0(ePKVx25S{8ICh+26jgns0%EcrVw=5Jks`$gyKfNG9h1 zPB{PpSKtQt621XfAm9L`J^(qEkT!O_=`yc9ul>8|SwTcgv)x_w``53ko?Y$5G8x}5 zuTO6-ua}#rhl`1OxnGvkyVcJC$JoO*=b4Wo0D*rT4-Ni#Sq7gR1b5B6hrNPU=ZivkmX7YcAxZ%!IwOrw$>(}{#F4u z&Js|SY>jry2mWyrX-4TOqi3G9GlV zFot3lb@HZaeuFP~|X=f%6NAW5JAgJs$D<$O*=<;{I-0f)Wqk{XzO z9+>St!|%a|t6R5yrWMJT`zFBN+p`4wD%m$Hfhg9AHKIK3oogc4`&+;!0S3nIFqmJ< z*b$%S6pBxL`mr;tcoV=OZ~hFN2Y9UrN|vlMAh;@gkIy8U01sv9R1ay|S=ZnG^n=e~ zAlt0Zn7sve>*ewFvpj-xuEHQnTVf5OZ6>q}u#__p1Y`oC0S(Gbb~PAh#ITm1wHKLn z7XSfOa8QLL&`wYBDTLs(WQOI;*A<(i-ihJYP?c7JUpjul7-pzX(s~~ZK*ch+=Q(E_ zM7IjC@E`#8W@Ne228NNO?B%ds*xs&>7m+<9&-E7IptJ@Al-aS*gWw&A^Wx5e=Nn)J z725?=m5>ACT_*s-6lY*(0`L_)kpbD)Dk+k?VKopya0S8J|Cm$)g#c2F6~VSQ3~W{8odt)Z3t%Id zwM48XV{O)Eg^iKbNuFo#$d`%y(E<C&{_}#MG(>0+-(Uty`Kt7)OYyK`{Vh(=jA=m0edK`<;=Dj$mNShI2iCQ#g@I! zS32pz%`}s7&D7^3b5Z_XU-#Hlz4NPH|KIy_b+08&4Qw64lbUW6g=HE-8%165j&Prr ziLVJC36B~wpzyWQ6Lo%3oUZeSVj~)!1-t6$O}B8Og|&>46CM%v<+3HMF^~EZS2DjC zkvbrI5R))L0(ePKVx25S{8ICh+26jgns0%EcrV_{3`N(0E7htE7;t(Y zz->E(j&aUJDsWN~>4*B`X<#2YdhK02q zhJ%pJFkGqsbNOR+bNIb}I3P_Pi_`WgIYopm{vduTwp_%y2`PLkPi-j<+AH9Gbu-+S z-`)FLYdOAOA=}qcKj&D8mGjSjH+r%KqxElCAUov+;hle=YHmK1nV#{?@Qp+zBk1d|uou~T+@uE?XUNfR`~sKkU(&$t*r zSIBG;nRIDyQe;dTbun_~Yuudy1Lh=WI=4ukF}#lBEG!lPNq!2G`nGg0u4fk){j~rC z1t77}N~+}-+o~VQHvyTKoFwy!<=~6xZK`iVH;@p>o*c9B?*2m=IBKPSq6KK*wvSk{`X(f Zfe$aB*6qMUr``Yn002ovPDHLkV1kl)9RmOW literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/empower.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/empower.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e0de69d3e71fe88c1c538a75d3b01dcc68f254 GIT binary patch literal 1212 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 JPDHLkV1n4@S$O~e literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/strength.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/strength.png new file mode 100644 index 0000000000000000000000000000000000000000..973aa352fff75c14581eeab8c9b9f0071ec56e7f GIT binary patch literal 1183 zcmV;Q1YrA#P)C&{_}#MG(>0+-(Uty`Kt7)OYyK`{Vh(=jA=m0edK`<;=Dj$mNShI2iCQ#g@I! zS32pz%`}s7&D7^3b5Z_XU-#Hlz4NPH|KIy_b+08&4Qw64lbUW6g=HE-8%165j&Prr ziLVJC36B~wpzyWQ6Lo%3oUZeSVj~)!1-t6$O}B8Og|&>46CM%v<+3HMF^~EZS2DjC zkvbrI5R))L0(ePKVx25S{8ICh+26jgns0%EcrVw=5Jd+>=jZuJY;%o+%El zT>@*o@)ihtMQp&U1F^l>o<9$>!8}#)v4U&-Wb#cl;eeQJG=zVzXk)j6pR!g__6Syu znGX!bR*gMu)$Du7Rlti%0)ixBR`JL7YOwa(Fdf(*mt{PlW(mM>3x2-8TVCDY4J`f~ z6v9Eg{fyND_4kJm33VvoiXWSq9kCPHwOJQEOybPd*G!%P30X+SwN2oDZ$;;?n9qPs zAW#&Mag*Vz{-8}wxg%&hJ?RLn1_{LAnsq9F0!zV!sfVV5!Y9zTPsv5+_)L3?{ zYi}HDMu{d)TrFHIRPY=kJGV;q3pugl*G|A}t%)lp6PdhX*pnD7@h@henUDJ(VeWhG z>pa2FM);G0#A)em z3oz>-b~0%a0GRU@DFwTk}tVs}aP$(mxjK($aKR|5ir=lSp(G!zvC@r#$v@ x>Pjs6Bc6i8xnm$;F*}fxZgN@lN#MT<{sASKGzRBM^iu!;002ovPDHLkV1f^PGGhP$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/summon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Runes/regular.rsi/summon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8a82e6f9ff8b2a45581f4397f1af3a2329ca2b GIT binary patch literal 1232 zcmV;>1TXuEP)C&{_}#MG(>0+-(Uty`Kt7)OYyK`{Vh(=jA=m0edK`<;=Dj$mNShI2iCQ#g@I! zS32pz%`}s7&D7^3b5Z_XU-#Hlz4NPH|KIy_b+08&4Qw64lbUW6g=HE-8%165j&Prr ziLVJC36B~wpzyWQ6Lo%3oUZeSVj~)!1-t6$O}B8Og|&>46CM%v<+3HMF^~EZS2DjC zkvbrI5R))L0(ePKVx25S{8ICh+26jgns0%Ecrb}kRay( zPC0-BuD}gA1tFQQK;Q#7^#RC@gyh(<{<>#&n*OKp zZJPG?7gzhWn0{Se?|H!atl`nYiw$$d?i8TBxxAi!zdTJp+w*mrW*wLe3_atqJ+}qd z73Bx#ch3*g$BU~WcZVA#n{-yVHn*cJ3E)dh5FOkjOeaPOQ1GU=1pqvmgloC89d8ym zdU=<0TXI{Z<4-S7JJz3D3v3zfV9b36@Z->1L6oYV1)Zal1Q|}$F=v^RgDMb+=d2sy z9Kq;NNd$>&9ltwdfkO^2Lt@rAWB$+{?D2yQSOb0w03&a}?STk62F!qm83$H8!QD5< z83?)@=-@VpuH#_n5CLoVIA;weiI&!KSut^Po*Y61Sr#2<=B&BP=LUgOs*yot#-59Q z3+x|88VH8OHAd$I@&5T?m*)fCI`lJNL!Bg$N>m~vmq2{oXHsIE(aAFhppuzG!oWG% z^iBLAbC(nS2C(H;z<0k0uTXODq|8R224Fvz%H=(# zMPz8pa6Zbo2DQX{gd@wXOf4}^b&Sjh!pdQCIy`Pfy89RwWD-gsjLhiFGo5?hFv|x-v!q> zvq~Lu%c|Tz6@KZI=ZsBqlD!oWm-_jjj7Ud8NHUtM^AQG_0nCTcOluIdgi>O#6%2Z? z*`}oce8u+w>^uKd7?xRM^kNJ~9f4=oIIjl{tk=(3`#uvniX^H*92vBY6>+ZmbOZ)& zW$9$ zKnR<|`bGn&E}hg;XXfhi uC&{_}#MG(>0+-(Uty`Kt7)OYyK`{Vh(=jA=m0edK`<;=Dj$mNShI2iCQ#g@I! zS32pz%`}s7&D7^3b5Z_XU-#Hlz4NPH|KIy_b+08&4Qw64lbUW6g=HE-8%165j&Prr ziLVJC36B~wpzyWQ6Lo%3oUZeSVj~)!1-t6$O}B8Og|&>46CM%v<+3HMF^~EZS2DjC zkvbrI5R))L0(ePKVx25S{8ICh+26jgns0%EcrI0C2gyh(7_l(W=$NNPRtYhpx?eV`^mZ#9|_Ndol9C+56wFDB!*h_Xs7&3qnr@1&i zUp_qE?`14G>=^ZQAA|UpXPkB*AlPkyKn4;3BEN3IkP#3PZ$tL(;Vy|{&pvG*@6$Io z0hj*JoezUR?5g8Ahm1JpNUjQrvSUaoDv)WlEi17m{SyBc6mJv+A>(66MR5^!&DvJ$c+ zB(9h(d-=h`uM>b3-QG?pX3j7bsN9HrH*m5R7~9O|oHZ2SGgp5w`+GnIS%57}mEnk- zl1LQUG%|R|`k~bC^MPn5ps_Q->fp=BxQGY9Nx%7$Nr(8sw`Cwd!OEFeFCvVsc{TJ; zMkn&8*#u5gQrZG_SGxZ5*`=TG{u0w*MZiF$y!HdY=y)I@Q8HmRNGWScRR4CUymba= z-Yfy&??ailBGzUWAj!bcBdZLA!9oB&NSvkw9~`mU8Z@pX z2z(XkkAbhZU~n4<)RaL2pvs=qLZ~8CALQ6T9AC(oIo9=7iLqG%fpoB@?D?$Lpai;! zKcND~4Do&|8X1~%xYpYDv;qoP9TKQA$snsI)kb}iEkv4pbqzZK9Ra2OHk!a&v!o4% z4gL&Ekeg$FYHE-5k@&Ipv)#~yv+~gXe}f;wKd6_0^FfE#Hh7J|zX3D9C1`xHuDt*N N002ovPDHLkV1l6-bj$z% literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult0.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult0.png new file mode 100644 index 0000000000000000000000000000000000000000..3849504b6ff74b96092fbd1ca668480707dba2e7 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wx&}4%Y%wtR+Ey!T*7P;rBMaV4whJfk$L9 z0|Vb-5N14{zaj-F_`%b~F(ktM?ew>N%?2EHjsc=Br zXMt&ru7fn|F7BP81}E14*vrr@erdYE&dwJPRIa#PF}m41Yw5J72fpx+rhUHx3vIVCg!0A4nlM*si- literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult1.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac2271692b8f0116025dbc2b68c5e44b53d8e06 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wuivdc}bhYe|q_@P8m+_`QuU7%0G5;1OBO zz`%DHgc*Sr|Bv)Fc+w^(jv-LbR9GSu*Zyw8l_ z+srk#iGF{}n>NNdyymlbaNua;i|jR57VN$oz-O_+B0$05IrqsTQ^vy;>)U|NVDNPH Kb6Mw<&;$Uqd|rA0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult2.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult2.png new file mode 100644 index 0000000000000000000000000000000000000000..3849504b6ff74b96092fbd1ca668480707dba2e7 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wx&}4%Y%wtR+Ey!T*7P;rBMaV4whJfk$L9 z0|Vb-5N14{zaj-F_`%b~F(ktM?ew>N%?2EHjsc=Br zXMt&ru7fn|F7BP81}E14*vrr@erdYE&dwJPRIa#PF}m41Yw5J72fpx+rhUHx3vIVCg!0A4nlM*si- literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult3.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult3.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac2271692b8f0116025dbc2b68c5e44b53d8e06 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wuivdc}bhYe|q_@P8m+_`QuU7%0G5;1OBO zz`%DHgc*Sr|Bv)Fc+w^(jv-LbR9GSu*Zyw8l_ z+srk#iGF{}n>NNdyymlbaNua;i|jR57VN$oz-O_+B0$05IrqsTQ^vy;>)U|NVDNPH Kb6Mw<&;$Uqd|rA0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult4.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult4.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a6dd285664fb8a9cf14cf963f055b368a6b75c GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wuivdc}bhYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D1gc(IOyc&Rljh-%!ArbCxuR3xy81T4Uyz=c|`n3b)6TDtHg=gL?y5R2`AkBU4 z&5kc@X)7IAV_1vWcC0Ji|901G%aBH{9b8X%ZnRj6%zJQ5=GT9ge=q#cEbM8tOXSoC{cY>6!6_|Pt#7RgpoeMm>%-{2VM$s$w6Q0X1b QK*un6y85}Sb4q9e03EAerT_o{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult5.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult5.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0b42ddbf73d53c54c8da7192a85975e452677a GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wuivdc}bhYe|q_@P8m+_`QuU7%0G5;1OBO zz`%DHgc*6ARIo(e zVhPlA3vIBN!4=Xiah>&1?K7@5=XDb~rU=%2SAi8&#dMZy>8$_!e_Pe5i2u;vD$rl3f7%zk*V3@=XkOVMR~h5L7yISLbEc#Z jOWfn@e%Q(WkFI9iX=c(`;bG7Z^b~`qtDnm{r-UW|h~|EZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult6.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult6.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a6dd285664fb8a9cf14cf963f055b368a6b75c GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z8Wuivdc}bhYe|q_@P8m+_`QuU7%0G5;1OBO zz`%D1gc(IOyc&Rljh-%!ArbCxuR3xy81T4Uyz=c|`n3b)6TDtHg=gL?y5R2`AkBU4 z&5kc@X)7IAV_1vWcC0Ji|901G%aBH{9b8X%ZnRj6%zJQ5=GT9ge=q#cEbM8tOXSoC{cY>6!6_|Pt#7RgpoeMm>%-{2VM$s$w6Q0X1b QK*un6y85}Sb4q9e03EAerT_o{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult7.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/cult7.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bc95f4f0d177ba63d815287f9152514b148456 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1M1^9%xIy*Z9nY$uI+<_ERNswRge}<>q4ZMIn&H|6fVg?4j!ywFfJby(B zP|(rS#W5tp{p}e;E(Ql4rh`xZ&$naQ$kFopaGs{o)%jUZEEyRz8fG`tpZqMv(7?nH qz`(%uK+RzDWE*t`2G#$V3P#^CAd=d#Wzp$PzaQ8{-2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/full.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/full.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e991e34578da75a213d963719a3d1b784772d4 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^R|5kB3kwTpXJ=nuU*SvJ z{sYCsJzX3_B&H@OG%#)qO)zM6WI7a{7{JBa%*S?grGnL&W=BKOBONS8N{&4t3d%YE zfnZsa#QLzcQM^el%{@D<0(f>9Kj3S&7JXMSqx^wfOSPmNhXDh_!Oc1L@{BDnfmSeh My85}Sb4q9e08I`v4*&oF literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/meta.json new file mode 100644 index 00000000000..e4789013908 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise/ and modified by FoxxoTrystan", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cult0", + "directions": 4 + }, + { + "name": "cult1", + "directions": 4 + }, + { + "name": "cult2", + "directions": 4 + }, + { + "name": "cult3", + "directions": 4 + }, + { + "name": "cult4", + "directions": 4 + }, + { + "name": "cult5", + "directions": 4 + }, + { + "name": "cult6", + "directions": 4 + }, + { + "name": "cult7", + "directions": 4 + }, + { + "name": "full" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/assembly.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..1a84e526a4a780111960391cd8356bf513b5f17f GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4*8>L*7#J8hJ3CugSor$- z^2o_u21+rO1o;IsI6S+N2IK^Kx;TbtOiUJNVPw+?Xktipp1}|j$Dxci z7XrmqJY5_^B&H@OG&BZiG;kZNX=1AB`5(}5!OlaXpk44W_nk%th7(h>9QCHk)Bx2p Nc)I$ztaD0e0szU#9?bv% literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/closing.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/closing.png new file mode 100644 index 0000000000000000000000000000000000000000..9dd42badabf989bf60e5806b1583651ff77a9a75 GIT binary patch literal 563 zcmV-30?hr1P)Px#1ZP1_K>z@;j|==^1poj54^T{0MKCZhLqkJ2I5D0h~!hK~z{r?Uu=M#2^er!Q}tH zIW1^BELvPiIhXJ*Q=@LHy~u`i^QA*I)(uC>mFuz^JkxCl!?W4onQlAMCFGQ?29I>d zQ3H_fHi&f3Apvs#yati(IuHQWZ4l|c15+dxyFsLv;yY4_8iXg{J5nw|gGfh$=Qsf; z-~^liZ~}h+xsDt7dbr@czGODtZ4l|M<4?9N(4#Yq0-TMPzwzsaNO!i5m}7u@$im7q z-F7e^u&_e)=iB!kDul%aihuvoT!dC=Kv&z0gDHJP*SPRDM0R76tH?EKu>7SF+gllz~-p|S^}M^bmW;U0aP1` zrv+e=Xd$=rGp5GEK((QGdH`CE+|J=W(3dufWcM&&>Hl$_fD>>6P5}5%0dIY-xj?+P z;K(nL+7{5Ho6XY#YP%Ua#{j8C0h^}=DE+&03P3FkSUnP;_NQ|Wcw^(WfK(nySRa`@ z;ntC3)xmw^k%aY;$s;eD) literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/meta.json new file mode 100644 index 00000000000..7e8135f2168 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/meta.json @@ -0,0 +1,60 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Nimfar11 (GitHub) for Space Station 14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "closed", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "closing", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "open", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "opening", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/open.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_airlock.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5f78166d8cf2fe85d2e0d67e1e230415c0af7893 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4*8>L*7#J8hJ3CugSor$- z^2o_u21+rO1o;IsI6S+N2IP2px;TbtOiUJFVPa%cS+HbDN{Nn{1``2&1HTn!8iEG#UXot=GseSu=LXNPM6Db|u8zu^Bs!0>w;UocRBv%n*= zn1O-s5C}7hYIrpO4PWo+;usR){&w2IvStGw7R87E_wUrMK6CiSB+V_BTjm9CQr@Vt zwDGCjZN7tyEIOxm?Tfiq`tYjY(j4whPEUD6_hh{L5LFqta7wOY*orv|Jr*`kv3nrt zeN(I@!1^#(*mB48%bFgVx0_6gi`=wcnBVw*Q|t*)?HmhhW$`akI$7KvH^nUdOwKKE z2*0%Z(7JY$bHC5b+oWp{oBoDX%HosW<2~o!Xx?VJT=d+mCscjA&*CaP5 zh@EMQR1kQyUi{Cm^IO@p>VCCNPU&^sBCn7d{lwy;g|c`_-~2<{8lbj`mh|U;p4&8M zldgyHx#aHRnzP@z_WgaZ^nz>p6-S^0*92HTX6E0&Jt0~^#(^QRX$9N!8{G5yuhp4# zyuA^8|L1Fm9Q}&#znX6J*|J(SFF3G0c|P|W>o43)*56h-2s=8a9FMagTe~DWM4f#W43E literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/cultgirder.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/cultgirder.png new file mode 100644 index 0000000000000000000000000000000000000000..2453b42338a16bce38cede489868b4bf42fa0dce GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)*8>L*7#bQ{SXju&$hf(= z+1uO4#>Qr5W{Qf6=BrMb2~@^d666=m;PC858jy3))5S4FW8&0_d-<9b1RDHft(;O{ zWZdRhZU2zbqlSr-)42H!kBzhZ?&WI78f1SxZ96^vv4us0{GIvkR!X+1UDvYPoTQSi z61cQ{zG%g%n;lf{?>=5|FV{)I`+&nbZM~{3vL3uw_k{O2?fD&g#hK%^Ov~{$!Ij*h zRpB{FnOv%-%1?_p5`wgExH?wW^h-CFPjRs1yeOr-)v%Z&cyjj}k859E-AdVz^W{xp weceJ|?VMYO=ZTjdJ~A)-=MRPO(|$jg9_L1F_PUUE7U&rUPgg&ebxsLQ08=M$nE(I) literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/meta.json new file mode 100644 index 00000000000..4ce89d754ee --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/Concealed/cult_girder.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/ParadiseSS13/Paradise/ and modified by FoxxoTrystan", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cultgirder" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..beb1a5e1f0e12dd429c9dc8041902bdc6d112664 GIT binary patch literal 2215 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon_off.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/altar.rsi/icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..86b84aac67d27bbaf2062f33e310d8a1d67431ed GIT binary patch literal 608 zcmV-m0-ybfP)F&!9ObkhyWsh2p|I3PJoMQY5p6@Zd=`* zKmbbIFo)1hR3*ok{t%9GhkQigTwNzS`HCt{S^$gqBFGW|lh-PzknG(ACa1t*a}{Ee zszC#qkV>ZzXHF1nTi};meLGz>{CrV^=?t%1?Sy z4hbM@?1G~K5d(-&Vae3ksQXx!UB`L=q;rgYUM`&|p{^m-HB}VTirK6aR%x|cfVB94 z_*Ox0M-U>Y-!sqg3cGgn0M4hw634X=Vg*#`>|%0?rIQ4JbZIX?q}f9=>|8cliQa-d zT*VI?rsf%+8}0)i@qV@mK-2C3_`3P6$@2D>J~Im620v}jzW`4rIt~3qpAwc9%PQ_G zl^)lEwhODQJ&Hw#&A8>Vu1df8cC7)7-ltG0pMc$dXb@vi-(wH0R9U_*Y*kL;lUVgu&u)un@#Ny4C*6i1WXx}129MM>t8Td9WGX&mM}%VjilJ8rYBkV}!L%zYLI z+3BE2LbM~1h?q-9MNKR%jB&P~W;^Sgf6jAGf4uMed_K?nyr1`dpZ9swaK~LW)OFPX z02=OYhrLuW@QbOfQF%dL^nO)9M!6Bs0ifCb#bB)6ntA|yQ|x}&0UuK|!yXU+(Rown zwfxL2t1(&l9W$3THhI8D;VYn9ZfJI?z^47L05 z*N2}LRNOz-j4U)09jc4Bx*=jWN1H^?c8wh%xy|e zJ5i%t5+5+b1-SHL@s{=LSS`o52lbPO zY<(jIt6OJCR7j$g%i=~~Imqf8^Z&fTJ~Y(d!lvd`5;U{P+cZ|?yo;A)_bSCJQv6tM zLj-rSyxh26zFZjDvXCa}5Ex>tw($m_2A?MSM@)|gCuujk;r?BJBGds4v~ojI6iF@# znuK9=WiPr$^KtSlph;J#^$*3p&7Y@dM;mciq-B+lj2ri@Nof;3fO@iOt2@n?9}0RO zElpj7890ZR>e$`&Xscbq&ffmL@7alUpiLMevS^A$=F~G!D&-1RS`ZlDW}}Mg|sPeym?duL^33aIs{qQ+R*ziwN>j0p9_AFr7V!U}`?J zgYek-3&xW{@1#`iYUH4rF7TphSWw6@R?Ckx_YOd1WtkP!64(65b-ZD$-};!BFH`Af zA&=C*t54|L1@4>Z{G{v1IpbrdqGqcvSZ%dMo2=ZaW$Y>!isr86PD57e$(*=#y!0Ff zai(0Sua~Pn0a1do=SsC?X)s>o>6m`x?zV0ex!yC>?iE3soE&HO4DSM&6<)z_pZ9KH z{$#5|U-oF}Fs``kcnDi{bs<_Gb$Pq^bMfWOM<+$!T`-%x#d;#~$Nx+Z1C@rOMHU%9 z*eubqxgLGdo@(+|Kj2W=7DM+X+KxL12}73YnXC`?hp=OLbj}&ieCT`2OyUL*><;o+ zy1+JhKuTVQs5E8pu7f?4KsEW`c#^yKFFV2-wG#M`Meo_@Eq_XGMUT84;)8gyWS2ih zp{d8O`zRP13>8{mN(+0kZ2gCpY^uBeM4__pieea;ueTyYrZ(oji+Wz!5&KZ`(o?r_ zvW{?vJELH4a=Q)#Sd!$h9@;#@Lh=O7>p{CQc&2E7XZq&}kv0C!8_aqBq!e-9w97<; zIRZf#F~)jnv>df5cdFv!Me#K1X`PbL304Jd1!AMZMs94ktFlTCTWy)PhB>t$+$ji2 zs4=IHtu!nkPO+ZLWiKFt0{B4%9L|M^u$?Qg%HQBwQaSCOL5WjJwyN}eZ?(1E&OU{o zei9YI#BXLWuPOW>cog;law?y?)Zu!rF3G`hX#7cEsU|Catb6om#DAl?2s7h?qoPQx;Z0#x8Iqbc(( VVQq;^wd#EXcjx1Ws~rO`{RLj7?=b)X literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/icon_off.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3e13421e9623561833ad9349d7a185f25094dd7e GIT binary patch literal 683 zcmV;c0#yBpP))E|2ep0Kl|tfk6Q7UkIQ9#A;>ZoqK4>jud;IhK*`olk z@!qS3nOful2?BsQ8&7{-tj(kjkPwKC0OY@hF+!TGu4QF5u0|$+?O&VYZ-RtW!wbOX zvfMH!hd@H8LxOuDa=nBMC5<;R+X~=q_i%A>J=aF_>lrmF#XEUu41pZ(-3kDPI3E{& z(4^g^!T3xY>{d!dI9#!+PQU${4$~ohs_arj_4Q>qu~x$~-yM_CJ6>C~BX0yK-yDHd&vDc*zW>e?2_ zlO;bWG}Z4c3;@(|v7*Z;A=v1iiA6);`F>%f-UPc<<`AF~5<-GxX&k4ej`|&k0mOe| zWn6MXWW}b>H~~OiUrl#(Q-2u-!q4OeI2kQVhVKE#hr#VslDfR#%t<{6fIIs5b+~T7 zKkn)dP2HDcJqQ3_EG#tW2%q0tRHfu#!0(i*y58wsB6q4g8=eIe&u3WBZ$a_MLR<*3pef6coK4H1RxYhS>M)c-L?Tl+Z z-7Y5I=yboM7q3?JNNZ}R9JVKnFO&P4I!1&gGBNbM002ovPDHLkV1lTUI+6eY literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/meta.json new file mode 100644 index 00000000000..b446b7060c7 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/archives.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon_off" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/barrier.rsi/barrier.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/barrier.rsi/barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f75f45b758e948bf5f70d6ba4562b488a83ccb GIT binary patch literal 2271 zcmV<52q5=~P)Nx2`I`_FN7c@eldG_DnujCOk&q1WkEx80gvNYV!m7wZo(m+&v(t zWm(_F)*r(dPYZ^n`90{z`0D()il&u-6%Yef@CM^M_oRhljdIt@^I0<{2J)Qc--4fE z$UhViv{t&v!gR>JVt!Hy@$=9F&{e$Mhr=oC2lt6)p1W2OQ9VV8M+o@4f$PYo&Ta>97U~`es2DP=w=muu>vHoL2@58a(+G6NQvL; znPl*fdLJ$Ph4>@fJwO_wG=mCSM6%_j7G*Q}lW4`SR)FR^(`$6r_qGNv*2+(Zsv7)Q z0qO*tTIpGn)7$9gp#O*pPP;N6_v+ zhhMwDBtOKBAUsjZ&wIcS6Y&@V@gf+@GQ0b%6A6^R5MAP4mP-sV9f)$``&|B^0@!5i z2DF-tovx0zK7qg0xu96M4*u+f(KB+arYHFy^#C*i-sc>W!i|>xIsOc0yh9Ex9f99% zg92=AvEbozCVv*U6mAZQ{7)uf>Y8B&lvX+FN~FMOrt!U*af3fT%MQnS3#ID|eGb1n z|A>AV8Wp<5uX;iB0eZ?e1MW;`^1J7dM*Lp5@;^Ho`igm&s}G=9qTz=`yzlO8w z10-OLa@R`wj1v@n&SSK-w6DQ0v_RSb&aV&93V>#wyH*mBRrppRdkTLpe=3-GR(*hG z98cKtOsvU}w#*)`ZN^&srD(_>^FNvcuoB*o09y*)s9>vLS+0x8hXBNC^Z{T*f6irO zkmdpgW7sM+Qu127o{5KFasvMR_n&Zk(}v$Vwj+8$U|^rf=o0|qAtkIW zMrsy*34cN6M@|69W<6nqTzvop?Cy=d2C5Ipj>V^HJ{UN&KA@BI0bm2Kgm?g%{NP9> zeo-GFF2+)RZArJwK_h;3Lk24Wh9m&!rsweQ5>a3Gj+nF(m58nT1f6otTn|*_HvyGE z=Yt0Psy+ZdCKpA#d*K;*Z^n)D`Q~$+pPtR9_Z|G5!tdG`qWSme1Ng9J=>uF4h`O9$ zmjT!LeBgrD-sLRen8nW~Wm6x3Lz>1f=>u|4A!nVH;jK^MSJNn6u@e5X=mYR4dUEsu zSrtJKY%z4b0RxAY2H~ei(#_Sl6I~{MReb;!yj1xqeE=qqGK6+PNgv=o9Bb(VSo$0j z8!PbF(g*kt=SmN(Odp`~S!pc5Ke6Xx^Z~X055OAvSE~=$3YzN!aQ63}&)*uV>I3K! z9zg!LfJ+~+MO4!V48J)?HXfw-x~31 zIK1NSKmISVg7fjOy&y0z2wO6^kMF~2NqxX(u}Xcwme52WkUHLB=>xWgCi(ztL1yU# zwusf}1Gb80`T)s2ox7iViD;$|;Dw*i2W%EEULWw%u}XcwmhfWq0hfwweE^+YTj~S0 zf^2;NpIlq&1Ga!w=mWNl)$0Q;9c$7DY!b!#0Q}zpfWO}U9Omc)wv1wZ027|o(g$n~ ttI-E+6|2$*Y!R!|2W$Ik zpo-`zCl2W$$4ZuZNsMF(4XYZA(_mZn8nSD%?qNOa*|9_{P8{hug`(5mIWWNt1t+?^Te+NL8df^C z2BiRiV`T;a>@V+diw32wqshny6CrZJcL4<4U&8`3LYM|BH4TYGqRrO=6U1tP`Tag| zpP2*xP2+^0Xsu^_B%~D%7D7_Eh_CYSUkuDUmJstB9vo9MK+tV?m3q?E;gf#%S zY)FKZc>zpW(V#RMmSybE#vMd;tzrM(y&bLRa9oZI^8x?>2Bq;Qg0OaCni>B6l6sEi zE30acl^Hy{=V=3Q+q-e9DC_g8`ZM=RcL-p?PZecdBBaPWA5BJZG-<8dN=@qkDsH%#;zx@kqzurLCb%y|SGEwXl$Qer?Pc#geE$_qklrMgJjPJku zWIucQfJDfdLFwGk5jhOgCBJ_64vYToc5MsbsuL^&tdH|p5yhUzuN6_mACDe+>={QO z5P+g6m|j@GpR20~1OiR+6!Kr2AW#UBVsF;^X2n-pJrO$#InISve_&MA^5UX zLNFM#i;=B@GXOYMl&ABmy5|n+uI?SZ=@I6(ch}8gsr2-lSFiB?`Z^PR^JaaqR9fdV zFvkpe5v+^3$p-BOyglQXSJk}})6DQ4(H79F@Y02%;~dA6kFpyEL=ovi5w%7GY>(kZ z@aF+r#EEHUSRd$xK^frj{NfV(vvK^JOs@0qB|`qO1sv2WdjK9vgj^ex&PjyS0jq%A z9c`H15a@P7u8>0jCIEy1gb!+!UjRUC7){8M9|yI{Ps>-;j6_Jypfrrm_UqnSB|-qe zvmtFIlWo9zC`DKBCjesrjDuQb695`U)4G`OCu1HBqv^R|40AEzF^F3LfLJtwhS5aJ zY}=z(@KL~yaD%u-c8%&6tgba2myKb-+xO$PZ$|E0P+e=-BNUV!htgrd+xPPoAH=O< zxw*N4#!aE`vylB;Gp%RMJH-yLHq88)eJ|hf@o@mae*@jGv7^%IhyVZp07*qoM6N<$ Eg2B0IdH?_b literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/closed.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd196ff1495b37a8f271c0a43e6b222be14db21 GIT binary patch literal 1326 zcmV+}1=0G6P)QLv_0$7g!o8;=Aw^LoM1&$x4@F2wzNd$Z zR1rPp#34Q8Sjkc)D+!fcG}#toI|SP@He?rj-GiB7_QyaERi8A{?t5?E_s!ckZ)QVN zQ&TMfNF)--X0rf*^Ye537t+(y0{}1#1DQ+)03eCr$N3zN^Et?}jMmvH!ji*B>+BS@ zN(lfU%QAniRZ6H;N_-9*-np_Y^Z40p7Kuax01%p=pKmenSTu6uDhj0v_p3P)!jj|D z-zLUjd=!RZAT%>G)AE8BN)@QG%-^j>gWFGQb@YZc9|2K+Qw%0eRf7}+t|?uRr4S#Q z(uG2)a_y?T;J1l!oXb|pvi_pNJ;dIMI(U( z7~{N6X|zw%uss%cIh@w&{CTt43M3)Sab?mgff)b*o6`6LNm|->oRp}aGjmutX;<@} zK8nY8LR{~a16^O4G|lfli@TWs13%F96@`$zXxkl#V0WNhK;QoHC)cyu5Q*57#zhh~ zrS4RU1XwZIl*WZ`rCttLjRxk-9D2hV-}8S>Pve_=L%bO=A}rSBXN(JR--=i+0<1C> zLQ0dSxptuIPerC1A3pka!1G1}FCE*vC~SQA$ipgxiF7)RbUMx7y%M+$`!ubc3Ba-`jc$*{c_R|#d82_nebfcYe3lRMuq+Fv zY2x>-GeMss+mc>+hmGlx6%fKJL>qUsYA1>pDj6-^Z_ui%?bH`Q|4e zrd^bvv*4v;`8YY8y$16_YKX_{MJySM5$tPB3^ zt&iDa@zIwrUf}K7St|PK)yizKxYCh;&9D^t3DG3L$@ceI<4^Vrki_mbU;5DTJKalujswoC58_@^-p%wdM-O>_Wlz0_X?O z2cU1KTK+-A0sxua&tlOCzZdRQ%ik@WR8k5dRh!a2TpqvPBe&C~6j#JP0q6!`?^Mfc z08qCtT$j?&$k4qO0In1-r=oZ#0`C6;QT|N~X)x}t>R2>_x_yC$)8Zp&Vvw+_+HGSr zRSmLX7;V=19G`q0nD-Az6j6T@;ijs=FbqhUOa_KwfMudks`&n3PHS~Odc&IQQtI^! kdhP_C$z%}vzkkpF0k}xc;rpQo1 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 il-IO5?&HpMwLq;s8{%bTp}R ziBzdvQE?6{iYO2fL{vxwA%h??Haly)S*VkJ4PUd8n>YLZX6=VzSV0lTu?LGZO)IRC zBuQF4vn(s^?|#=Sk(VA^!kFa4>%fN~+vQSL0Ff7Pa{q`}>@^n1;P z8?xUR%eWy^aufs@1aOY&fs3t{oENYmhEEGQHzcAN;B!oh)uR+{-7uWbYXPi(F5!lf ko6zQ8fbaUxnAkDD0XYnfU-ovPzyJUM07*qoM6N<$g6503BLDyZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/opening.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_airlock.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..997689cdd5b078ba0fe46de8c66a907935b5af03 GIT binary patch literal 3099 zcmV+$4CM2PP)~vs2uH!(aXAuF z=rwTQK3@wZDM#{@rw~$TN-6XRv^F{Uh~k^>#g6RDMHY%2pEk<657MkhqZ#e4v@6{Q z3)1ZFeBb^we||gP*s-apsRIC*nVCT@mjeLo@9!fD^!N7z05X{j*4EbAuIJ&yhcUT~ zKSxjy;PBy}=C|-PzXiiEaPZs)q-FbAv5rB9A&RoM-kj=(`!?8f2C0^I^+9G2g-8hf6p>VD?u-+!_V0I(U0o0QrBY?D%Z@mXv)u9TpAz6(q9yriW7r~|;Gv|}@t8cZbc@$s>S3!azv+|M7q zQs*DSJq^FA2Anf*GdA2Vrw*;OC|dvk*o=*wBINYCwSRI z?rC`tvl$yRDJ}Tn{8eh0-;+Uq|4CkMQkp|+EqR-C z@-aI*i~INQ0|0(h|Gt^~qDiDlX(14&(DdCp+SH<)1_u*~T1x;bHe;!ekB_-YiHPgf zDsHDI8U`DF&C+Hbl}ZJcW#K-;$@p#j_j>x%EPglWPKnu~WiyH=(HuEU$?Sa2bh(SMh9+-Px~UT?24UTCR)TWsAZS^Z_#OiQ z;foTysaz}Vo&oTNN$I}LSlXm?52y_$^VU{Ff0W(5hn51Q8*Ydx?J)Pau=Y;9vjvdqz^ zoSkSPDqlWHoCaTBHM+J!kUaxoae8S1)O!YuBaV$DiUFpU7ZlnWiQOsno3FL^47Q8y@s4wb>hp*@Y*vF1*ZV}gBBpTFMnl!|BAgF`O2j&o{i>Y$z3;Gz#L zBy3+^hL=wt1!oW~Br0EChR&ytlGBeCf(U(i87iMXYECaL1PITUm*K~!51TWn7UI{J z7xx1Ag&&_jY|fxs48OiS-wR+fmJzpEh*<9LKiP&)U*McTWA4B?+nok4PEQ|rX(2ja zUS&#N%w}V{8~~_IgV(Fo212pUI%+<>-~>tMn>hVEtO|a#H0PxV$Cp>tsq*QgBHpo(xTck;N}5-eR)5GL40~I&Q9T_g#`8GTUFMMPw&Oq z$r76%Eu>vvUWImi`c64p!H*UKgy+kv?)UQP!{!XC#kI%7@a1Lr@#(|n4621h<;%;^ z`Sek8`q4t7^5tddeEKLk{b(^D`|_n-TpAz6FQw%vzrMT-ap0-{#sjEr(R~E~QE&#) zVzlGS`*|Dm>(ehjE3SBPcKSBhN=qzre5|RH1@Yx&1oi2|;Os;T3EP*K;pNju!5Ku0 z5w$sV^_Xk53;qXAmt$GBu2{&`o0B8*o3Do!a+uK%$pxbcw z1{g+d5DeRs*Fm>$Agtyd6h|Dp_BI%mC$B@d`C38y7b8(3s%fqr7(lq5ybe0Ae%{)u zab~m5gX!tWe-K%R5w<6OiMZlx*c>50yKK^-GKay_bTW>JpfU8@;b;1 zAKl>8!O-mk2zwgTdG#V^H>SZKX0r|ed|6NXn`Qys-{*G<-TxZk=c1nebUJ#H34WJA z!uI5KXyw&M#py=}3EPv`p_Nx36{jB^L=@5usJ!}Kfb(~C4CrOXC!(PX$R|7X1xVYcE zpRXHG4uVnV<*EU&r|$wHqVnWhp%!9=MyA4st{{c^0(x<14B%lBQ002ovPDHLkV1hL^`E>vQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70ec581c811d255771eb794715f2126482746c59 GIT binary patch literal 657 zcmV;C0&e|@P)Dc zS`64s%u8QpXS30ZJ@i58W@j_+&Fo}$jiVdmUqDU3%VcuG_;o(-=s5=L*1Og^%eNyy z@Hif0cv8<5J{Aj$%UsKTzP8&a-E3+`a|>i4oXHr-vaA|E4F*ocpJ{q_8vnXwKfC?j z;i?HJQ*(k^hLESLRWZKn_oJxWb)3QeFdSAQ;77<0`JdjpU=bo}ab6JTNJ?_CakNos zm$f3IAc&hOoFe4tb<_z(4I4*W+4HqJ8?XsSV-Z?la;^hkw6ZoCjiU8(8T9QHfCx1? zM+Rb_kmu<%dYjE^S!yM~A_pu|agKSJ8|2XoWGh+3MH%pk0wEVCM<`>bI2+)sLX)vl z&qN%xCgZipg0Fd5ec;?=JgIMr4q4$WVQseCMepl%N59jm4>$!^>kz*`LtpBi!NXyoS+!0_MsoDuY>oiyUZPZDeB$fZ*aV)1=k?QhGu)YG{ zoPg)=d%da;d>@a+f#l7A51d{^$2Fh@wN1ZQ0Gx9cK+Y-Ws<(=cqnCNfKq~=SL{hd^ zoe7ZZ0<_34%7BKPYSPW5tLaYI6nPso-iUag#i580;J%cKfxOj$PdO1mZ1+8af~YGY7hBw1mNBt`e9m{crs?yaj#$xB|qP@o^ks00000NkvXXu0mjf#!4z< literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/meta.json new file mode 100644 index 00000000000..3619047ef13 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_girder.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2087a18d0750b69a8538004a99e9834f6f327a3 GIT binary patch literal 3181 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 Hu0mjfHABZ9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/icon_off.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/icon_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f6682ac601f1f0d136479a834f15e06f4de00e GIT binary patch literal 763 zcmVd?;UU}_}Job6$ zKe`tJ==_E2z|Uv}O?!v6Y#d;dN8-*yAd|>LN`RNp#M)#ty^i4H(7zR7L4glP8<@_n z05tJLpv_D=vPK_+5JTOE9XlU(m6AA&|SynFdrygUBa?=^WFp&ITpc~tQ zQXA-8s0!4cXwwYQ>vog{ctU*4>F|-=Sh6K31km|BT)}$12FtS881-?ENWAmf>`?Zt zL-;xhl!XcJTUTic2a{i{fW>xcI0OQwottdXIZDfRXh^l>P@6-U62NjwveC|E@HSWx zu_)ovZ%;ia0#v|AfJdclYZq8thiSivS|;$RdF$IS0t<=)iSre)v>3#{j!Gb}XxtS7 z`#Ap9q#@-gFSQITELeWCY;-VfP9T7bH{BC~3=foW`8b}RPlS}i_t-eM5x(%?d#0i$ z5Wrgv7taF4k54;xAxZBQ4W&SUKPYlhp>aNbWS`d-CU75k^YU1@l#B$5d`_ixKBvuE zS4)7tcCud9)%`r82>H`YAke7p!fAYYG_BvzuO2E_Xrpr=v@*!v^j=i8L9U-EfxUPV tYjqHRJS4#Wb_k@l2vPz?{zm-``~my8iNqknpj`j}002ovPDHLkV1o8%Ud#Xh literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/meta.json new file mode 100644 index 00000000000..8798cd813e8 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/forge.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon_off" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/icon.png b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c3559bbbddefbfe3af3621fa8813024fcc903a GIT binary patch literal 1694 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 MY}@Tu=Np;%J2_@jpa1{> literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/meta.json new file mode 100644 index 00000000000..9077e010f87 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/Structures/pylon.rsi/meta.json @@ -0,0 +1,53 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/e5b645f1622f5b9186ad4c11feccbc75b3cf7e84", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "icon_off", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/meta.json new file mode 100644 index 00000000000..491af7e6e3e --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "runic", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "runic_2", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "runic_3", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic.png b/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic.png new file mode 100644 index 0000000000000000000000000000000000000000..90e837d4b92ae67c5290ac68ca2e5203c4086798 GIT binary patch literal 1777 zcmaJ?do)ye9KUxlgM{RfUXz4`#jz?`Gv!gpqouVnoT0X~%~Uqh>zbKly$jpQ+bA}~ zc(gkl&zUJSr}wThbMQ_SvIjEOa@C~f%9k42L2ES@>P}cS75dqYeaPHR-#hp5ez{N!82>-gBwj5 z^P2I!?3d!77RLV2X$be|N3;l!A-o0|t^DfjD+cV9Y_!#;}TdFLQQ^(XtP93bSZ z^khA;_PKwyh<#RaWHNWo%(rodRw2vEMBFgEYlo(dw!8Gk7hVZEN=?+_8s6@`gcDio zu`4f+TJMOXeT#2BCmZHYj{hbDdWCU+oS8DE3C6uOca8ZbX@y?)t`RNZ=24t9VO5GX z>(7mkDX}VnQ2FnA*N?2U3VS7wLGh>u7(9wB;09)Qkuw;|{CPGC%_y-s_*KXT%tO0r=LDSp-Lh@3fvD zG~9QW-3?HTC@wAh7Q&O{s_N>zwXqJ=S99e7KXwTeBTsnGx;vJ2Cw4W~0VzykdX*LD zpjf{|>__=#IH9;W?`2fu)A+YZzDa51>2=U7qo;>i=-gG!kd>^6M-+2HJj!NpNC@-T z){9(`L~2z8!_r8WkNg~&N}bcSw187IgaZRjE#-rOUJpZ0LE}C0m>Ly7q&%SKDy=^e z)lujy^c?agkamoGEgxuqH+%JXy}XY@f>a;)*SyS1Clj4wn)swB)u|yiO}v@Dnhm(0 zB5$}CRN)el1wWYAE}o3b6PdYt_6CJ!!6|(Db-|(DV>M#L_L?ZwhGQ5;x4Q#`FE-om zRl|xG8CnrzX%O9xHlmad8{>vMaWD`*KLK&L;y!X;J|X7mX}tVGJNrc^tx`6giF^+O z3;G|zqXy7rS4xKyWRdOG#+-ebBIo-J_mMID>g35)^>;$P*ZNub~s;y@-`?!)$3# zh6kSB-fQLFryp8-df6kEN+9J~Y*a{cHw?_RmA2LA3;KK^PiQYy(QOl8UyDoW?e&F% z@jhSf4PyeEsy>#9ewn_%;-v$F9Wln(Cim;w375`rrv zAfe?vE4qs$C_G&tkh@JYqQ>OXH&K(hgezCxjw)@yD~I!f(qJf&c0+cUi6yip3~L;) z6JSf)ur(c~fnDRJ3&r#TW{)U+7NSs4pLFaex3c~?KT4+7DxIc#(0sbk2@TQKF6>D3 zS9xI$490+(S%FNEBpYOng#wg2*_Lc->mzUEGG9}Y2gl#dOW5hPO zH3MqPf5}x(XRVjO+O(Up!(FjMI>i#ud>X8*RSS^73k6fgw4Knh{lJ^@vKpD+UJK_g zQ^;Jn1!uD-*F$%dfP?S+nY{CO z#s%6fJ(j4xqs%3HktL;Bu}jT}Ttj-x?k{m-XZn!NM-vjnypu_bj`{J_9ey8fjSoSV ZgTipLc%2~)U-S+GJluR-tDHk){{=lDi?RR! literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_2.png b/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_2.png new file mode 100644 index 0000000000000000000000000000000000000000..90e837d4b92ae67c5290ac68ca2e5203c4086798 GIT binary patch literal 1777 zcmaJ?do)ye9KUxlgM{RfUXz4`#jz?`Gv!gpqouVnoT0X~%~Uqh>zbKly$jpQ+bA}~ zc(gkl&zUJSr}wThbMQ_SvIjEOa@C~f%9k42L2ES@>P}cS75dqYeaPHR-#hp5ez{N!82>-gBwj5 z^P2I!?3d!77RLV2X$be|N3;l!A-o0|t^DfjD+cV9Y_!#;}TdFLQQ^(XtP93bSZ z^khA;_PKwyh<#RaWHNWo%(rodRw2vEMBFgEYlo(dw!8Gk7hVZEN=?+_8s6@`gcDio zu`4f+TJMOXeT#2BCmZHYj{hbDdWCU+oS8DE3C6uOca8ZbX@y?)t`RNZ=24t9VO5GX z>(7mkDX}VnQ2FnA*N?2U3VS7wLGh>u7(9wB;09)Qkuw;|{CPGC%_y-s_*KXT%tO0r=LDSp-Lh@3fvD zG~9QW-3?HTC@wAh7Q&O{s_N>zwXqJ=S99e7KXwTeBTsnGx;vJ2Cw4W~0VzykdX*LD zpjf{|>__=#IH9;W?`2fu)A+YZzDa51>2=U7qo;>i=-gG!kd>^6M-+2HJj!NpNC@-T z){9(`L~2z8!_r8WkNg~&N}bcSw187IgaZRjE#-rOUJpZ0LE}C0m>Ly7q&%SKDy=^e z)lujy^c?agkamoGEgxuqH+%JXy}XY@f>a;)*SyS1Clj4wn)swB)u|yiO}v@Dnhm(0 zB5$}CRN)el1wWYAE}o3b6PdYt_6CJ!!6|(Db-|(DV>M#L_L?ZwhGQ5;x4Q#`FE-om zRl|xG8CnrzX%O9xHlmad8{>vMaWD`*KLK&L;y!X;J|X7mX}tVGJNrc^tx`6giF^+O z3;G|zqXy7rS4xKyWRdOG#+-ebBIo-J_mMID>g35)^>;$P*ZNub~s;y@-`?!)$3# zh6kSB-fQLFryp8-df6kEN+9J~Y*a{cHw?_RmA2LA3;KK^PiQYy(QOl8UyDoW?e&F% z@jhSf4PyeEsy>#9ewn_%;-v$F9Wln(Cim;w375`rrv zAfe?vE4qs$C_G&tkh@JYqQ>OXH&K(hgezCxjw)@yD~I!f(qJf&c0+cUi6yip3~L;) z6JSf)ur(c~fnDRJ3&r#TW{)U+7NSs4pLFaex3c~?KT4+7DxIc#(0sbk2@TQKF6>D3 zS9xI$490+(S%FNEBpYOng#wg2*_Lc->mzUEGG9}Y2gl#dOW5hPO zH3MqPf5}x(XRVjO+O(Up!(FjMI>i#ud>X8*RSS^73k6fgw4Knh{lJ^@vKpD+UJK_g zQ^;Jn1!uD-*F$%dfP?S+nY{CO z#s%6fJ(j4xqs%3HktL;Bu}jT}Ttj-x?k{m-XZn!NM-vjnypu_bj`{J_9ey8fjSoSV ZgTipLc%2~)U-S+GJluR-tDHk){{=lDi?RR! literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_3.png b/Resources/Textures/WhiteDream/BloodCult/Entities/runic_metal.rsi/runic_3.png new file mode 100644 index 0000000000000000000000000000000000000000..90e837d4b92ae67c5290ac68ca2e5203c4086798 GIT binary patch literal 1777 zcmaJ?do)ye9KUxlgM{RfUXz4`#jz?`Gv!gpqouVnoT0X~%~Uqh>zbKly$jpQ+bA}~ zc(gkl&zUJSr}wThbMQ_SvIjEOa@C~f%9k42L2ES@>P}cS75dqYeaPHR-#hp5ez{N!82>-gBwj5 z^P2I!?3d!77RLV2X$be|N3;l!A-o0|t^DfjD+cV9Y_!#;}TdFLQQ^(XtP93bSZ z^khA;_PKwyh<#RaWHNWo%(rodRw2vEMBFgEYlo(dw!8Gk7hVZEN=?+_8s6@`gcDio zu`4f+TJMOXeT#2BCmZHYj{hbDdWCU+oS8DE3C6uOca8ZbX@y?)t`RNZ=24t9VO5GX z>(7mkDX}VnQ2FnA*N?2U3VS7wLGh>u7(9wB;09)Qkuw;|{CPGC%_y-s_*KXT%tO0r=LDSp-Lh@3fvD zG~9QW-3?HTC@wAh7Q&O{s_N>zwXqJ=S99e7KXwTeBTsnGx;vJ2Cw4W~0VzykdX*LD zpjf{|>__=#IH9;W?`2fu)A+YZzDa51>2=U7qo;>i=-gG!kd>^6M-+2HJj!NpNC@-T z){9(`L~2z8!_r8WkNg~&N}bcSw187IgaZRjE#-rOUJpZ0LE}C0m>Ly7q&%SKDy=^e z)lujy^c?agkamoGEgxuqH+%JXy}XY@f>a;)*SyS1Clj4wn)swB)u|yiO}v@Dnhm(0 zB5$}CRN)el1wWYAE}o3b6PdYt_6CJ!!6|(Db-|(DV>M#L_L?ZwhGQ5;x4Q#`FE-om zRl|xG8CnrzX%O9xHlmad8{>vMaWD`*KLK&L;y!X;J|X7mX}tVGJNrc^tx`6giF^+O z3;G|zqXy7rS4xKyWRdOG#+-ebBIo-J_mMID>g35)^>;$P*ZNub~s;y@-`?!)$3# zh6kSB-fQLFryp8-df6kEN+9J~Y*a{cHw?_RmA2LA3;KK^PiQYy(QOl8UyDoW?e&F% z@jhSf4PyeEsy>#9ewn_%;-v$F9Wln(Cim;w375`rrv zAfe?vE4qs$C_G&tkh@JYqQ>OXH&K(hgezCxjw)@yD~I!f(qJf&c0+cUi6yip3~L;) z6JSf)ur(c~fnDRJ3&r#TW{)U+7NSs4pLFaex3c~?KT4+7DxIc#(0sbk2@TQKF6>D3 zS9xI$490+(S%FNEBpYOng#wg2*_Lc->mzUEGG9}Y2gl#dOW5hPO zH3MqPf5}x(XRVjO+O(Up!(FjMI>i#ud>X8*RSS^73k6fgw4Knh{lJ^@vKpD+UJK_g zQ^;Jn1!uD-*F$%dfP?S+nY{CO z#s%6fJ(j4xqs%3HktL;Bu}jT}Ttj-x?k{m-XZn!NM-vjnypu_bj`{J_9ey8fjSoSV ZgTipLc%2~)U-S+GJluR-tDHk){{=lDi?RR! literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/attributions.yml b/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/attributions.yml new file mode 100644 index 00000000000..ef9673d338f --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/attributions.yml @@ -0,0 +1,9 @@ +- files: [ "cult.png" ] + license: "CC-BY-SA-3.0" + copyright: "TG station" + source: "https://github.com/tgstation/tgstation/" + +- files: [ "concealed.png" ] + license: "CC-BY-SA-3.0" + copyright: "TG station" + source: "https://github.com/tgstation/tgstation/" diff --git a/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/concealed.png b/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/concealed.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9c4588d1e00a7344fa4623b21f54084e814368 GIT binary patch literal 591 zcmV-V0Px%2}wjjRA_@V> zq3?Sq*ma%reCDU~Gks9kHTu2>=Nz1K05Fd0x^~_;^V4}MYZhY+j4=REHO)R|jDb?> zG#|@L-_-rp6QDmfgb)BwEBB5vKaDp^kX$Wa4bxY1Xg>4r^Tq<)?{{OeX&Ma8+sgcS z-dKS3dTmU~n&z9gmHF}ftZiF0@YSq$YuXrI`ljwblW%tNB3-VU=DKbQFMU(@S0$)v z8dbA=`&j)N`C2VM$MUvP^*1)PRaJoy;@rm)LQqwe^UG&`I!}S$-h|Zi`5ZK{ug`oK zPXVaLk}kdTCuMi@r1Zv?-3@fz$5zVzUx<+dKP*R;v{rkH=IzSfAier}o2z5O4L< zhkgO4(`j-){!{#e^MK5U@i`BO%;!8HG9R1=WIl|KmIvrPn3Vma*LnY{ d_aFKM{~y=lWZzYKCnW#?002ovPDHLkV1kJZ9B}{u literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/cult.png b/Resources/Textures/WhiteDream/BloodCult/Tiles/cult_tile/cult.png new file mode 100644 index 0000000000000000000000000000000000000000..da8f7982428907b4d33d324201681334c02bc3f8 GIT binary patch literal 1786 zcmV;nISrhJ8T}ayrqB2|7Xm;kI2TVG2s*|uSFF(K za?W%+W5QqL6pwlELCndl{2Y-5Z8hG{#cX0D(1G)`pRm36g`-YxZ6b~UhJL|;m3WBk zaK(Tul|=BCkz-C6cVKdak{shbo`6|d@$XIr$wP1z7mdIEzz%B6s$`X8s-}o62^T&% z1|T9T2O?gnON}+erE^^}9B{@sE&_!tc%InojgyVAcO#I>0N)dtBEVgo66y>5c~c1i z6>Q=X(cVG;CztNZQ8d(bf~c2jf`5zde)5DzSm$n}T4mjkE%BH{h9vJ|7tU;zZRZmR z@NkismX47HJ*o!BE0>wyXvRb$yT{&QdRKKx%rcIz)s{Y;g${|hU7(`Nc9Qsi?jlIG zrKtJP0lM}LQ5yyqqan+tfWm<)<)LS6uVgTEF6bBPjXQvU=cQ8iWxKk|0Elx>qnVWg zq2mYQ#Wtl}`*5ewxSVda6WPvy)vih`U2BxnHA>f+=!W@0LXab~mEk_vCeF^;cM+=7 zV%kPiFzsi_q6i15a}Tvv+@+*8h@2tRcz^Umgfs?SzUD4?={(hbc%(omJX6u~=T%v_ zj?e`rG`htpyU>!mZia9FX40;%&(HIe(}QQ4**iOaSo^2&T+8)vl&6i*oa!5{Bfn^f z0Z?Gn96+JF_gfz?8IM;WzOzdm-CYQPk(-G6U777>PAGaKPOwFsaJQ-Leqa{7A0<0P zMM!RQg{2gSh<%d|NKvVP&77jFPv$yUi{pTEK#dEtQL9~hMn_P{5oXAsT7Bnp)}3W2 z`GlkHc@gfUrHrz&NY9p&9k--Cvs=ck@|CWdsXiMD&@IEq3ehiNN`);ODm=A2k?W&8Em7((DbwaOx5JOR%0C$r7wCzWn?BLs`334B7(@ z|2vr)=kX@OOK}IAP!`wK8NA9rm|q5fBpA8 zzP!I#m;`UvJ(l$C@lgBiWhvfj*Da0tG+EXr(VMyNjt-Te-2}Ac#8rL30TSCaWKgVf z3hu5ui`~HTNW?<=L81;gzT#*7+r1QsOW*(}TX0SjKB`}x0q`+{-#I0GU?gsMwsw}Y!Tln`}Fa=t{R zriW;$84?mn1vuD-+ABQ#$Q#-)J2=@0xAfLqk8V*BdoR&&yGlqHTsQmkx&*&a#g$KQ zha=%o6Dv#F*^*o!@V#N_XlJ#&hYO}wy3Qh)#A)AshC4=uJAnB?lCn#(CS-NN-S2QD zF>5BU_`eFb( z0OyY81+{Kt7&U7&ZBw;&kx_yqg7uQutl7_&LP!)AfozyrngJwR4wo(NcH*AkL3N{b zX)Z+k_UkWD;4woBmS%JJNY&ciHS4`4dr#CN!OP40Bi|L;HuYZQ>>gLdh)d_b>F>4L z^Q60wie2i|a%-_F-iA!+0wU3-;?oY~4Pxa?d}^PFH~D`iaZ)h z%$+r<)v3AOJ-JHT_dTN7%fl?6YK&Fy3GNDUWN@qM8p*8$XHKJc&s_x!4PeQ&>etdU zsZ^X^`C@7sS~y-WiDVoWmpC2C=q8zzuVy^&e5@Tcn6V8?iV<7%%7HT?>g-o90GzOd+pWY-Q* z1W~lnstr?bNLlRniwM`aOM61r4Ax>!qm*FsiUw8QX~$)b2MQh}IL&&%tGOX{?{=mGpWp2Or!Cj3VEvxe0vb c9sytf1EG|0?^|}7>Hq)$07*qoM6N<$f)I>&Bme*a literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/back.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/back.png new file mode 100644 index 0000000000000000000000000000000000000000..ad552cd873eb7f6a3089c68fdba979bf5857cdf3 GIT binary patch literal 2177 zcmV-{2!8j8P)C zc9*;T&bsINgQ%VUGduU+^FO}t|IRu8xmP3o4{d>OoQwO9YiB)h?tkpPO26~^A+Lw+ z{XhZ?EP{#v<27+EuYVAcQ3R}3s~0sDT1(ca4&IDG%|{kLrq%js3Zu?kA4_U=#xuIV z?6nVj`r0N7a4Bk(nu&-xPB$(+w_cx(=km;{>xSPmv3Dxd}dAAt8W zxash3=D{`tzX`nge*L+3U=J(a^vC+vEm9ZRgL399ZOZ)no4jsawtoQDOo8nZE943brg5a83dW?xdk-Gds%9ielTF$R1ogGq%wrRTB8-vR}tTl~S6g)9I%3 zy70WY>yM{@*e%8b*##1PAn^z=ouq=I0Hhk?O(654TH`;@0i3=G2hgT@Os-d7-T3nWyE0x-zp$qAe%V}rwS zr3=zrE|+(C!rK-Czh5c>JfHhP))^@vtblK=dUZ)(U*9#`mUln$kf4C{8kGgXmglBU zoH%hBCjE^U((_P!XZ~18$7|wvlUXX{c{}P?r{VxpPN!XKkI4V|Q|+03S9y(wQiQ=| z*VI-|+D82;w7^)*x-u>8U^JZ`r&4_Zj24PIQ55?BxRRtqh)4x2gs zmf!>91>{k^l*s<2wyx;u(&i*7p6BF+ztJYf$S4;8T)DdutyOGC>X}8b%%*ikrC}G7 zMIfkBN1lKxp*)Yq5DW1<=YFYsm%y2*$pZrePYezYKG~3P`7O4mRIjk1_~<=AwzBZ9 zBymGGPJVUu0+(Af{2W< z&1@&NUJGfB#5k7RF6eok&ff|EkfD)B-GRUtNt0lE<$Cekxn`CpFzMpVrLTvVy} ze*i^DK9SgKVlbS%0pOtt4Zr9B=wjLn2a|EHEJ13v(;UJc{Z_oO<8u+1Pe}JWTu=ZP zq>{ZpUNVv$CEH!~>f`^F%=4)s2+Of%GW|aoDlJCf)s}?3zaEF{!+p>$2CbU_q)~(A z2+JB$GAjrtdUSZ$S9Nyh^$Mh?3%6q`ic&86cDyBJN#nH0g8AliyKY!fY>Y_5O12ZY zp(bEE(zA#$Q2sTYCJzCmIZ5^y3e8QLfV-dx0T^hv+qE>gC0WX&XI-4MrAGq7k7qQ}{DB$hw?M?)w zlpmt|lBbZgq9iX1%MDmYwcpF@d9M?@dd{5PDcN35(=8KEj`2Qr7d^2qvTd7GgUjt3 z#78t-TP2YF3FeOwoa<~oY=7ar3T7Zzm6XN;oM^A=?~EG5pkH)W3$e z+$DI?bo;k$+t)SAb01&T-`_7+ZGG>w2#%BA!u(7H1F89_q*5~9@&2ka0kc}xc#0l zBe;PS_znc@$VPSE>B!0HD{BTA1fO0v#7G}o6#?ACa}f_+;!6jV(@`b$$Swn1d1F!t z`1||Qprfa!#|alvfVlXp_W%7n2e8UyGPycU_n-e?Nu~UN8`FyX00000NkvXXu0mjf D)vhEx literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/barrier.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..5371583bc981daca69b7d9b3f175b24a0fb959aa GIT binary patch literal 619 zcmV-x0+juUP)C`V~_;td(|cm zSentV&CpKB+}d61>%ra?>#4QNk?oRzfC;*`TDVvG6_J!cSC+B$*T@&%-LA>=@%dkS zWGf>P5)ilpR3gCs+n|T%A&DIU2k!=CY?>Sw9u=1CL6eUkxMq;SI`~SrXi(z(|6L31?BsM8<@Tl_TZ6uz5>d6_`9q4@~ zG$NweJ`o`am-W5p{)#~6eHM`g`R_75E1o)x8q+qRu8t<*4qS>JF+Crx^?aX4WjG4I zgJfw?_*t|Ws2u3nVFapTq(P=Z6&~5}qNFX(fm_yI0`pWT8qyPJ6a~kS?k)lvJZICw zf~q8I;~jxB#$3*jyUnUF6*`@CeO3kk>pJBQFIQdFm~xz2RZRyb9DK!9862{c$?zs?8k8X1$`6jbH9- z!QRnYl@S{Hnam4lG{^n6Gh6=s;E4tnTM$F-;#acWJ&w8d3kk!W9oHhRG=-y>QK;H1 zo9F(XW1H<~o$J`2;*9 z;3T4Jc2t;Av^Xt4`ZOa6d0CBK0!JURfBHD3;(vage*;wOe))1zc5(m!002ovPDHLk FV1h}&8ixP? literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_barrage.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_barrage.png new file mode 100644 index 0000000000000000000000000000000000000000..50800e7490572e9bf8f0f6e0c98e7b9246a42906 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0t4( z#WAE}&fBZLTrCDXtPgm0%-qV&|7hVeAGwRI+0)O7%nI_VzhvT@nBgEI`a3lD9#eBR z(?8|{1{?W?=~@SPx{gOPFOq6te!u_iw&&~ET*MmqzohT3zJ6b9V-(BsO$>8-?N?us zeh~Im-NEMv{~X3G(h4mKZndII44fHsmvVK~u6oxHbodq90yCY9IuA^AE`}b+j98gbH1ruu`9o8(Fyk1JcNkG}uLUO_(9!8Jr eEItPc4v4pTgrw)GBqFF$K@gHgh;S0?(?YE*g;f44 zE+ANlf`wX$g`ijn!llwwDeMG61T}?~hgYODoy{5lK=dRgNOHb!d2gAWo0*;6LO)n$ z=4N-l-@JKmHrY!5S)~DfHm17TAD(IU{Zjy#SE}cYF?GvA6b7)(A&kpH6ap~KKODPE zN8dkA+p-XaBe2%_OoNrZbolkHWUMWIFQY;LSRGbLY>b0R{=>O zAnu1Cq5)v8tG3M{P0lnC1wy0YgNOo9b6u5fZYom^5fHfm*wa{Zt&k!RUI5MJbT7sH z#T>u9HAlnMbLsCoMrCxk8q9+#F*I``F9I%OHAl8X+s032<}hAuFVaT4m5kAM9Zaq$ zWB_U&Qkcs_2^_*~3gcCr3uK%XW0Mr4U=F|-k~*g{ss+Ly1kjKplnANTd7e-)TgIx< zfEj>6gVdz%-?5vBU#feo0@#ohYMA4G%$d~_1yG^hkZ5TkyKN0Q_8E}<{H;i!Bb4!b zM$~tK6KzDsw|U?1H26cq{rlX%-k3^E?Un1e!{+9j zBtOvFdkzRK=Ry%sJz@y7*92srHIMLa2!xJJxia6i`W}E;Hmr*|^nm-b$`d?)b^8xg}>W&b7zwi zvPl!3dp_|s&0q_j`O^QGT#}>tP~e`ge9iE+OuhLP4e(pqBa&LK@AK_{4}eR)2a725j=#&FnQDq2=RE)b002ovPDHLkV1m(sbtC`) literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_spells.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/blood_spells.png new file mode 100644 index 0000000000000000000000000000000000000000..351357825631216cfa4ede5248e81cdb2fd27efc GIT binary patch literal 883 zcmV-(1C0EMP)@xS}6gc76OS#t>M5$OeBUxLL{0P zPu`T^h5x~z2?_C}cMmomG$tPKDg+D{qJabmL{gO&S_-U`w%hV^YnSJ~b+;*XxAa#e zF-+3V>)YwfXXeekwiG8U|1UtB(@B~Rcno_z%s&Tcu-S;^kU>~qcC2kt0c=JiIZFsG zq6EhBa;&WTq)N;#E^1bxC;)boiBN6P>(SBOg-9%h5EsRHqX9v2zteGrOt`(MTMDj->&0`} z8XLjI1@Pk7%`UCv6g(#YN0k*dwRPawb)2iU;pN~{G&!AkKQe~7B~Q+Qa{{neT1iLG zZRxD*?HBOj^(zQxba?l16bqi^yn|;1Z~>%2UiTjg(wNaspP!nN_Qq!yFe)~jC}dQ8 zqqbc@agJaN(qu_8)ZBt=LPA=z;V{BJFTRQ0zqssU>@sM#sO@#%^#6BhxeR zvcV%xx?~7{hD_;mhYG|IfPkEZU3N&rGHX|X75(nPXf@4-LjK(BR(DnjC$Dj4se6# zF(BIZX=JIEy-Ne?2mlqWGYlo-__P&8RMgiEW%yiC0c>w0TcK0p)_9f#pe54kU^dDz ztf=S3SGi6{II#+99etdr*(U+Ao#VSPE_t5WKqyD6Ro$F_j+KDQlmz4e6iP`V^%ixc zeXn4EbPy$&QV}JflC^T5X!$AlKVe^e1yaqFlT@bT*U%b$O~VE z4V=NZz#IV9$Qp20Wd`x$lT|ZjB#X4WyCyp`;>C+^_b(oQ^h?u8ukAG_Q4=Dy2WBQF zqN(;NOu|C@zLVO%j$wO5Ki*vEce}tisP>Y$LlmFbBK3EBwjEadcNzHp<87y|`-Lv9 z3HR8P3~D5P7^f7ksrETZOu>M1J15fY!o}tPY5O?mpha+dDc1s1&w1{H8Nj-lDG>7g z&ENF4>)E4+Kozz+P@xyiK(%f!W5mB>nx?1$iv2lY!V9_i;5ipQMGh%2*d8aPPejEyE&9*_~VTrRjxFYJ|x zLnu7mQQ>)<&UvvZLOi0`*>ZJ)x-#5SKVryqi0^OP7Rpr@pIsPvJQnhA|JfEpYL)Ip z{958cR{pb#ZiqcKE`WGU7xR9_jr9>Dh1 z+)_M8j?j+iA5kkPLFN69qJ{5Jd|UxXYSmtIfYIOZHDW>TF!bSwEZ1e%?Iz?{_5{EI ze)WPMUR4viTlw!>#d-MsvoY^Eciz8WUVqu-jbo1gq+~sMNu?E}pP2Gz*AJpF;T+P= zT^^kf={HA|;t8rTXP7=wxRvSYs~bX|(I3KD)tTxk{FzZpS^bhFK#qQHO@?D28MceF z;zf+SejrfMe!Yb`K=N)GR%Q&8-7k8JiwLk82b%4HVfEq>`Hl5t8;8dd0IYf2_1xx( zYJlDC(xaH@NG>$`0;mEgFUib{{wM>WT4UeVOF8@cw%;Wgta+lR>w9?}lgqA=M|0(q zdVXsLK}(kaaJfTmP8_FZ_UpUXp&L!j12#*$y}r(X=PS#t?UoCmoSfzusWgU(v_dlS zFayM>xTcW^OgRAf6-&9v(bBG9Xos?WKW2n*PQ-;~g`g1CRtuJ=D;-z)L5akh69Q-?zSAm z$>)S@REuq0&8%bI_W-dMQfkCF zaq%967VXGeOh_3p7_+?7@nJQ$Bjq>?PVYTiWw=4JxJAfCR;(cO9M8$eCq($(6pu2? zad4d3XiZKI+<(h0$@I<5Yd;{eg())uR0yQZ@<&XQa!^D%z#mn==RLgrB6-`x_g;kbMlw%OJi_hPCl&yMZ zT@c@YfWYRu54Of~dAPuYy}w6}mT;|raYZx0lR|3d`y|MPk z4S?*eN)W&(RcFS=OrQ;b_-ce!A_!n+?u{!x49vj8lt wgfouzF=8$B`j(H;n*Q&HTqTLxd07*qoM6N<$ Ef+rjFgq!<9^+}JsHX41B8z#M_(Ac_FEd2CFgae#bnKaI6Ec<+-C z#XBIG#~=WXk7zW&)KUTPw69kmr{|Ki4+5An?Zp78v?E-o80Tq^LFoH~0Hn0znIH%R zX+N5s#&g{w0?-d@S}g(c^I2-YEPzG?!m|S7hsOoIGVMi_6IKiuWQPO*RJ-#EPz|zXqJHR30UMKb4 z5ioc;)Mw|6WABowdIvZJDuJZtxzX}?-bN`^7ij+dAZe>d0ca&{^`8I?Q3d!0J`>BI TVqMnk00000NkvXXu0mjfe+RZq literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/cult_mark.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/cult_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8d14932639c8ea2eca0ca6d65dcbeb5fd8e234 GIT binary patch literal 352 zcmV-m0iXVfP)|Vj0000xywb0;D)xB&5PJ;z*tml63+Z0s92 z=c$ES+iu2Yswh+PXr`y9^>LRr?2*!Q-0jj~p3^?1FN~e?Sf9rto3h_e_50rKo_PM9 z=dZ0Cs{jySpC>=&`FWLqFaU}SV81g!g1G=dox27k1b_)hGF1k8OFFJF;67u1o^k;g zKjc_s@go2js_rZOo-|i?jOJvYyMw{JYyMx_mY)v;vH(D;raD1`c+&j-jxjzR7{HXu z^RLctvCvk6XaI`f(tnX{C1=NyoM97LUSOfR*E$;remzaJ#F3bT_*iW0#Vg2K2a(uDdS zKBLTuT7vPi!~vjHZ#_o!Kz_D~mwCRgiIP5ANQof;X{WlxyM674RsUuhxC*qffvS@w zkIY#p8i*WQ4`pNV>JG1^+Wh<-LHv`LQE}a=Zk>+wQiXHNl%K06G_Wucj;Z(nFiMWx zor{l1K`;8v02-W(I6E|5=Pahg!_(Rjwty34IW8(SEi7n{`mf^Eww4ySvsT9C7%BX) zp$}Nmhp>Q^=E*|7F%s_>4MABs@4D6Z}fi* z{AtL&Xn|I;wk3OY5hFB>!ClkYEXVO=0evDjDC~%2Arjr9`kGL0OL|8@PUJ2O;PyHO zmHMSaZEG3ozTtNT8ggP^=x`$8VlXYm(hd%8$qc4dI|Eud=Us&n6(3LG!a)1z$TyWO z5Rn*Zjea>L*OK?VnCfxNub?d^oJPLWE0`ajQ*Ja z+cIQtd}XK*bu}pc3dpYYrSd-bL|XtLEs9!qI~u?YGR8wE`g~*ZwF4`>4-_CZ*h4=i zth%UL8WZnHdvFx50#M`SkpXy{jm$sK$Bo3aU+{Ks>WzNZzyJUM07*qoM6N<$f*l=~ APyhe` literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/gone.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/gone.png new file mode 100644 index 0000000000000000000000000000000000000000..869eba7ffd005e73cdd93aa9ff606edcd954528f GIT binary patch literal 2025 zcmVF+fB_)(o_>zL|N?@0;E` zUM3a2$;-Xxyt8~~yKhFf{g2hZ^-N2iA8~bkpzJN)>>DcJH0{`^AdsU)-Hv{c<0vGir6m zUUl>TILotiPCYswS@d{oI{Rq(&vyhb0uX87Mc^wUL8uwf0Kfz1_oVZj%`f%>uM3_O zX?%6o=U;6quD3T$)4g_DeJ%N8);&6{Cdamw&SzCVKO0%uKsmSD-BId|FMV?2u0`j* zQ~QB@1%wwMTEJ(NSx966sR~LXNb|s**}on|vuSgx8BO;xdW)E8=5^-g( z?>80Qy^Z|WH+5UFYRaXBYKG=*9aN6K$U~`$(IXz5^KmXk$recDmdWSe zmB8wYx?Yii(RU&P7#r8#r9T>KL`d7JRZ|WnoG;w@>iSqL7F{{{vpg7I5{*V}>|Qu8 zqw_bn4PF%vhhylEeCl9q7je(p)}v&_#7_#FE1g;bEBSJP^99m*!3V=D;Y-70IFQnE z0C50-MF5(nS^4k3vJ$)$yf?E}_kIUuTr72~r`ihD3>Mam_Eb$g7mNdtFVfPUwgwcr z+JM*n*z(2`GuHJj*qn1JUVB7Vi5l9wqwv;Iy|M7mcN8%a4;Ts;{{1mqM8R^UBnL-%5XC$9=QEkQ< zMBhj9xR90KSPAgEs-Vydy;Qm6jBsZLPR9WpoK)P<(9qWB^R>rKH&hDe?HJYyA0Mx9 z)Cw7hNgcVslgDc!)oF;+2bxg!{0KNA1*t#K-PXI@FC>XXQ@sXLkY2dl{-Z*-P zXVh%$TYE-545b>3T!xf?(1LSLOeW+V0KbPk>}77#?c3C%)P`c`6NAolS}-hI14XGmbVfA@)EZ z5CVV@{PaaOuTfSHVF77N3Sp0bBJqL-Ev;$Uc?}C5Ki3A%VaU>f1=^$1g6H695)>a{ zQ*%0Dnlf&HvUI=SZ$O!mTHNKrjTnY-3O~iHL{nnyDNrOB(qWOURF$StMo%3o zNPElq8lA>A+xA}7K)2q7N^ZSd9;QByJgYX*DVFKt>)X|YsV@F=SZ;0^)6 zAxgvd1Yw8o5Nl=^LT;G>ylbR@$-Ks5E^Lh4F4AgB2jCN6Sf!~$n({OycAF>#v%qt_ zS6F_XS1TIH1x5>ILG(f+6+x39#S>vi0}NjqFc1~JVUefOW>XY))H?>-i7E&H{M8j> z79r+@UsFe?J3;6$q)PzoY~JZOripHj+h$3Swjcq)fyT6gj;OTA0Q)Bj{Zu?oQC5P9 zG4lj0?1c!xg@$8}|Ji);i_ zQc_F+^1%KJF!?2Hgs@ZAPhYTg6;D7HvmSwPLrfOgFqjoLQ8Q`+VCvyK2HGhaHX=qh zpwd)l7R04vdOV&6fV=8w8Xso)9_U*b|G!|%t^=)!R1hs^(-b|R!J!QZ3w^>FMdl`Sa%^{8~{M zhmN^+I4?euZIrM+vV~qSGK;COfP?5yWMQza6ArdZ3&t0 z>$Q77o$dgXVd-Mpl7Ma?@r_4ul`=<>GnR!EKs0_^B4e_M|1^j!NpEY_ zYDB)ZD$fi|c@SCWK9$H(#rabP>>xtq4M&~PQjBmARW}%~Q>_m)9rgdEk7JY zb_!ZY(cwfLMC*vs6OjjD9kKODU$c;&h_Yx8AkXyD&QAGg?As1c1`~_^kdb6lQ!0nP2SEt`0;3PD20y002ovPDHLkV1mSe@cRG& literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json new file mode 100644 index 00000000000..57c5432a245 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json @@ -0,0 +1,83 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Bee Station 13", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "back" + }, + { + "name": "barrier" + }, + { + "name": "blood_barrage" + }, + { + "name": "blood_rites" + }, + { + "name": "blood_spells" + }, + { + "name": "create_cult_floor" + }, + { + "name": "create_emp" + }, + { + "name": "create_soul_stone" + }, + { + "name": "cuff" + }, + { + "name": "cult_mark" + }, + { + "name": "final_reckoning" + }, + { + "name": "gone" + }, + { + "name": "lesser_construct" + }, + { + "name": "phase_shift" + }, + { + "name": "revealing" + }, + { + "name": "shackles" + }, + { + "name": "stun" + }, + { + "name": "summon_blood_spear" + }, + { + "name": "summon_combat_equipment" + }, + { + "name": "summon_dagger" + }, + { + "name": "summon_force_wall" + }, + { + "name": "teleport" + }, + { + "name": "transmute" + }, + { + "name": "veiling" + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/phase_shift.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/phase_shift.png new file mode 100644 index 0000000000000000000000000000000000000000..b50beeb5cc350e5b3b7f9d9a5300d075059ff35f GIT binary patch literal 1378 zcmV-o1)chdP)5=!+f=2MqKfqA ziX>bRl?&$~`W}6UL<*IB5rZmKgevV7w4taFTs0I#f^idqp>2Y}YqM*gesjEwjIlAX zkfM%|*5_~Lo0)Is95i~v^8W)M@h6DH8w21NKPezpr{JWba4Z0Y-a5aXZ^Y%2H?mn# zE+Um8RdouSZy*q$$jXWo08z?trIb~j0!N`?7}VC*Mlv2h5Sin0rRpm9&gCM?X31J# zCr@Kz+5MHcQdI;v?=Jgy|D8KDf9ux%JcB9(T6F~Ox!vxDTu%SoGc9B_R`FHmf+G7 zE$F(W2M@@^IPv^BIcvpL!D*Tfh3MlV<7EN7m&tJ0#bX%gSy-UyU@**JGN(^d@6wWZ z*xs(Z?nMNC35Dc`SPNo2gGgOoTcafQ(Tf-R`WC^FcQtL8ueVZn*LAAd-K81;3?c$S`)rSCs(pWUbja>lOk8I!|boSpVn|bRTMJN8q<|aCuYNy$052W!BRY!!_z?h#L_)~X zQ8^U~g-O?233J7ru`GbCTyA{ zP63zU6)suG4!Cd?{2AZaQ2MxBkBq>C%jGln_O@pbRu34i1Yh30QdhV8buy`1uhG;* zv+y!!Upy=pn$NUp$~cJHhw(Q)pB_l1xJgno{Fczeq$H$^?R=TdCJzA+LU`dNF>|N1 z{8AF$T!W$esg#$8>N48gR8`e>=FI-tztD;cUq%zDl+U?A`lC^rLPPt+vhwR}2f7Xc zkWw1_<>qr$)2^d+jx`|~<7ls5`;bxqL)--|q+zDLo%l<3*d6&Io84wTENJC)3Hruh zK=lOM&LIFCmWX|5Qp$-2UH9#-ttAV=Ir(F6BZ-7Wqfs~DjiM*neV6MkfZgV`dLev2 zX0xq4Z|_Z(1mGyPz0Ba7W-p`-P64q){D;@;eFo3D&Koe#<9GOdR^$w$`dib)SB9}1 zDFO7zR%{zQbchAlb$t`a)rZ@14pqTpOdEw~uiGTW!!b!^^c>lWox7kMI3?%@rOuYx zTk3gMF#_elrBI+fF4quR^SvIAXJ{4UN=8rQS?(y|eB-kEo{5TvV-BU$nPP*LoT&;x kp$z38f(M>iulq0Ce=vWWME=qevj6}907*qoM6N<$f}}`}zW@LL literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/revealing.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/revealing.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b68d8f470bbb3b153a07f836b2d7ca25d1765f GIT binary patch literal 400 zcmV;B0dM|^P)&tyJcFhDUXy`K1L!6iYsb`>0SwL{%mCsP_#t9~L0qjm za|pmM>Sq=P*>m6^KW1i)p_E^98S?EL3Ce3v@3bJ`LxKaKX2YcngL2S`LmdQrfJgz+ zW==t^g6ACTvpK(J2AJX?`{+;!W&n+>E&132fTos3qiN&YLv*o39~dP-5Fq{RFjOB) zbwboLZ1_I=dCyD~VE|n&tQ>|5H>5KFG`0el5INbKxQOziDU zpz{@c0E?ppq0q|2SaLlkc4poGywPEAXKzsJDpw3_0(jwyj}^&$X=V8Sa9mudPrcA6y07N4!=5lsY0 z(^Pl6-TeNbRx3e3^iJ#29EoENHXe_4k|c3EK;ku%T$@C+8XH0qCx41ZJ_(`(z*o-A zUhT{RqA~bEm>cp*5S32>Pc~!YT%6UrBwl5e0Gh3cL~Zdl`%AT_*k}N3ldB9;y=^G? z5d`&sX+#y=0~~@@&{pm(r@r6-)SQ^B5*GnD1b@a!n9cwsr+fHuSU_OTC+-En$!3ew zp^_A0f@y*%;&t>%$dA>~6OBwbL3QxU$QBP3c0lC9tbd#kD*!(6<*=i-2GdFy?#Ewh z5=7AJ7)duBR$B4Wp3=o!>OqbMqu+ zX5IzD#~LOM{@aHq`5Zmk(Lc)<=F%+29?a+IrjJs5)|5m!40>jx(Nep|qm@{e*S`Z6 zM7|5SEGAcZck@1Qm4fR3e0!#LjxO>s>{_N|^Y#FOu_{~KX9V#$>;%PBHesmncVpJ` dKcjyI@D2+GF^m9uDxClT002ovPDHLkV1k2mA?yGE literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/stun.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/stun.png new file mode 100644 index 0000000000000000000000000000000000000000..d19d7ff79743e193749ae85a274a6a6c6267734e GIT binary patch literal 1428 zcmV;F1#9|=P)6TWEncKxrAUNrA9Arffmn79@%xOZ`F; zgYjW%I(_hI4|{@#J(xY}6H9#F*aMoVF&UCf2{SQS zuiG~R5CExgjUGD_z#RncG*hWodi#YxUa36^>?H38qZ2UKzZre#m=Po@5`N2B3v%?i zI!bCWY4Sy=XS8@p325v^jfwdXAb!NgKcw$*e)29_+CxtEoz6Od+e>rs>U1W0v_%x< ztOj12Qz*!>S|8U|AC9Uw}dn@~vs~ zKmB53=~y3=xZ#(Bkd+WP0al2wm%497%N1wa2*lSo%UTfgcaQeMU*QmqG&tHyj8BRv?eMasOa>jY)4rIN(F1q6E_&UAS}m zCtP?qa7~5j+_MR}!D^{y49?71%DTEUs1DfS9vH&#iW`0c3drk_NrffPJT?N$u%@PA zeANeiN;E9{B{e4Zhec7oNo?jV1mYX)Gd%C)+Hn)zT$n;<*LOJeej`HjqyiCOAU2aE zVbS9Tj5^4fsmMo$@E1B>#$4ZBq|SQ5y|R;SQ(#DKHYOpSa~ho7<(mA)!*&!5?a0z9D&JY%+r#%;1#ia+&uCbtntoO`Wf+2kLl zaKdawxFlaR8XHT_;13A=kv{u~C#r$5%#I1kaItx$$NgSq zLreTRjwuk^T58=j<9Sw&+Qqnq+-|IswDQ6tl(lv7J%eXhtm@)}&e_aM4F$g*F535!(UCCYgAW)GI`k6^=M5;fM5 z0`bx(v&`p?A#-pX0|UQ6qRG(f=tJsWJyIH5$w|jBRswYdPo6%7;Mf!lPmwaz1FN3R z%vg3Ub5Q~^R)QFE32n3S8cwuw|H60<0r5S9@;zN|s9(F| z&x$EXbRda|_7b{8Ix$%={O)~ zV^iI>WM{uJo4-(RCu0fhVEg);kh5sAT8rac#XB600qzFAZvu${o74@s+nK%WFa2Y( iAE1APz~5p26ZivF`k%Q&KNws90000_iUywPl)KaW*F!ZWTregPF;Q~F0Hu#LY7i75&Aprg%E%W83NulGjN^DMjl8a;UIMo-Oh@7Za!;@O z6@ME#qkq~F2px5z0xFzFO$A5O(a7h!YGPypDqN0MPDelZr3J#^a@(cCjPsA71;XGI zIpZd<>@B#zct?ER-%36Mxuv3bw^s%Uf4{m8u(NUg&Y7NqR{IQ2e>EXa3?z_SE{aFH z0sN@+3R2<>=2zFn!OjNL91T;!K<5^)bR&5Ig3tQ!4}}ug*c!|PNM+z*;kjT8@puV= z>wxiO1=KmGkz4IQaB}(+?9?O}+yohiVEHBN!qg4K`WqLE6~$eI_&O>}LN=VnAP* z&d%&R^ZedtcQ&1&e;ofWz*{1x!9ChXZdIa$>82H4o8!JH+u4Yvy*=%ppZ#K#cgs%K{=-DZ3MRLeGd z=KSNS0OW?96LkJju`U|sfchT90^oUc<;#K>MZGXSQE?y78ZInmv$WQ3i(a2Ub@GI> z@uB5`E^2*N>UjYC$qj800gNjwpFb_$d>lI=#y2j^&XRL%UX0bTyt;Ie^X465hjQc< z4|PCyp&j4=#8qU{N8Ic0ySsFlhTj5xUchRPNQwKa4|G5ewXpW!DV1+s7nMGLQKc)F zD?0-w4jvtB(o~K#&Vz5V|W$98UPfqpA;dAP!5#tlj`X0AQ#3KR1AQm4! zq8d9;X1ftJ34?jkAWXz#0T6i>fW7DB=E?!YHT+=^K+I_3Zy4qhLz0C2D*yzZ`7&<` zhynL|tE=J&>H-7l0K}1R8nFPI+jb(8v>dT1S8B01VlQRU>(tPRUf-t2Ja5ApDUNkh z0nj0EZTJ6FZAavjVHp1$dBz)F;F0{e@B`rgi!C+KkDnYzZif4rq@|Dj)qD020@(76 g$2!vnkR$v52EMF;G!2Z*`~Uy|07*qoM6N<$g09$t2><{9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_dagger.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/summon_dagger.png new file mode 100644 index 0000000000000000000000000000000000000000..9159067b56639a6dde7b64846b07865c69a2c024 GIT binary patch literal 531 zcmV+u0_^>XP)kvU;9ZfF@K@r$ehp;5HJ%~$f^A1cbK{~VSC|D23%nk$3?|J8a z4|<`?`UmJufWq{wl`Q5xT>}u26o69ogS!gSDlj&Y0x0I&-g6ybXMECv2LF9&6}Y>} zbsk_QF=a*HeUJ$ELC2>6&6mwjy8nAki0SpR4lpuGzt`r|5Io$I{{(1^E1GW-^JpVL z&v_frF+f}iS#1B)T%-Yo0Wfi$7%mz$c<}eb95$WJ+=;jW?B*Nf`=Hr??9(G`4aL6i zh^FTTK=Z58wFgU&$(>rgm5r=`#3F2OCe1;FHJj-^j7rRf=K zO6dS-j_+;+*o{gLg{R)8Zj8$OfGSasMU=Sc#z4^yPL|>t8 V)J?hqU|;|M002ovPDHLkV1lUB6nP)t(m+0jpar8QB4ZL}N{_0?D?TM^qAF^;lWurRQNu32?0=qKz*si(AAFj(A98j`Ag{Y30nMXMR6ClPV@YAtOK*Y?Rc&kZK>D5 ziHyt*p6vk2CMp*ySX({dTW@89qL)&<`W|ozVkhcmv~NY7x}2Ab;!)JyCUBE_T{v_# zG#0Bbv_#(72`dNMUPO`w2+DC_&W;fHg9yB+WvjGfPSH0nB76b83y~O*;jzMv4A~AltL>QAY(NvYRIO{tS+Og=7~6h$vJC5{ iWUPJ9LQMbb=lNgBi;xegC@W(C0000#Asj?gh9h7$Qx({9QtnHuhr zi+Uh~05RCTONkj1qSRV(3{!;=0JdJbl)$6O>^CfKLbw4eiPLA74A(>fC^;s@T}g6R z5YW2C3!wFV8GmxEN#Gw&5&%C(novy|odv1~nv@;HNPZ3~4DVp_nDBHwar(#y{ro{M zeCr5T7Z4?Q;a;2+*5U@`0-$|vCEe-)1_1}yp?L&m6`&9-AqM({7UGHx!BhY~Vw=3Y zaDOK9^RX<3seqIOjVYY@eh&L}bLk&)^ce6~TWBx!)~f^$f?gs$HWx*R24Z_yu@ptpC27(>yUv?r!UnN3O}4Z` zK3HbvJQDGuP^T5DBTds%^2${=vuLR&ME<^@r<bY-o!56hx+joR?BGmj)7sm`98j0yKUejv-+*; zcw9fi>rjw^NAW>YUkYGZ7PfCh;IS>3wg(%mBk%luxM^wl;`8F(;UUla90&j>Cr$I~ zFf|?HiG3_|3-C4;!|2`~!XBMH1&bGdVpfp%`EYuCgdeFC&pTaRfyPWpdUG^2kF31f zYj|y90)}B=ESW_9)dr8nW@g%QqR(de_?=xtl?u-_yR6Y;_hPz;^yw;;0tv089Mp`4o>bm zNuiISt5qCaoSgL!<{-3csl8Z){&3`aJ;--SF4v@rRRjDVKtyyO5H%_TNIXLn2AIO} z0swjq-yzHyg2`4ZuE-K7d zI>dbXJw1ED)S?e?1*>_O-pr@pdvu-w$PubIt47(*I$XRpwB`qbPHS&s@t$G+YJkM!j9BH zBH!s|We&j7kr0URUCo#Pu+)>h5*vJ~9q#~6KYxyWs|Kh6DhGG~a_C=@TN9W~00000 LNkvXXu0mjfk$$XQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/cult_leader.png b/Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/cult_leader.png new file mode 100644 index 0000000000000000000000000000000000000000..b31b12ad50832d99b08d386893d5f081079e7af7 GIT binary patch literal 343 zcmV-d0jU0oP)D%45PgnHO&oBjU}PUKvuJEADF0BNeM?9BCj--9;SyYx3{D1%)P!_kx`D->Q?Xj3&;nufmV}bq!x1YnB{NeyKM{6^+7Z z;wM-(n)rq;I6hBtlaSd850?%AKBKKf!-E0_cu^FC_&o&x-VdS#(F(xZem{uf22JNw zx+Uz|767noTcleOzlDH)XVLCw{44a&xMZL-n%IAFZHzzjNvdfX`$4*{m#>|>of43E zvM5a^kK^vWmlG7Q&6?cR{&poO!OxIw)@1kg3d1l6!;rzlODPkvyV|-ur>d$P zDGFbCPL`%Ty}lhxQ}MSeQMW86(>XHBSPaL=EMqdAQ@5;xDJq`s%6_jyyVYbln(@5) zU^$x6ZZ+xmI(WJ(_ZbKY@>F-Z>E5y4Y*-A(9ABK_Iu4J6d)}ipqVTI<2?PjV(+J|2 z9B{l7av+Ffd`;WC3{V9~(v&cY_)HRlI7U%bcKy=WW=&o<8nUS6w+kjk{pYXn4dNwi Uo`ojYh($ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/meta.json new file mode 100644 index 00000000000..b7a1a585963 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/cult_hud.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "version": 1, + "size": { + "x": 16, + "y": 16 + }, + "states": [ + { + "name": "cult_member" + }, + { + "name": "cult_leader", + "delays": [ + [ + 1, + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/artificer.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/artificer.png new file mode 100644 index 0000000000000000000000000000000000000000..b09a19ccc380d33973a4c45fa0ee1307cfcf0dbe GIT binary patch literal 1380 zcmV-q1)KVbP)-y2Z!CWfAY;tl1X-Ee!G!lGJqR7CIh&U zqsRbDOG{t=wU3XFUv5sQ$)9Zik#B5lxYgBFx45|IK0iO*>+7p~dV2brhY@P?XBhzU zZ?Z;!g@uJi0R8{DKBy6f;7>MywY+e5cju0ekDH^tK9mtGzZCXS%AaHa-|~=MU0wOg z4>A&bex3UrP|82k0HL1W-`{t8dwb1Kczb&rY$SB?3$_DF`Lle06~c!luMPF==H_Pm zA0z0Re1KJ6jxi)(7m^IX(6hb2wzk&Ze|dRnM}h8#=4c;CshgV{cX)W%czmwO35K3y zbx1*y0hn{w*Vpdo=&18K?lWI&VR?DEIZ8Q(KL*i}-bZ;oU(EoTN19I}K{-JR-rwK5 zot>TbnpM7*6SVw-^#N9ST}SyG{$wA(@&lQae|&s&=jZ3{?Ch)^`d!OZU#LxSXbQx9 zK+gOZf(8g}H6dmBQO~2i{>vkCKh#FfhzRjp893Jz=u$qF|1SgRMS2%JKR-7|Da$-R zJw0vy>v(Z-(O#EPg!T3H_WiA`Eg39nS&H#LJUqC|%ggpU^IW4tzmt;_x4pfc#s8N9 z^pGCz5|DW=r3D@F4;U$g)DbX?U(j3^nD>H=VU3f@ADjZAht)GIFaCPZyyt#j2N>fQ z#KF1$KbJpiBgAsVTwGaMY1jYU<);L@ySt4O6bD@PSj`Fgko9qNb~$1%ZkL~*=c<1T z;9zlrj5zlHcBA%vtotp1@(_zqR#)!}C@<)_nntk73wF0j@7tcwHA2(?EF~yPgM4T} zVn00e4$tenj}hQ!`%7CsuT@s>@O%n?rvZ5R_V)Hm9^N+OH|pP$Kw1_L4i0{m8lexr z43o+~a|+N%=w7U0z2_=mX#P$E*ddkMgL(?{Tmfo+3=R3-loxO#$7BFE za!dwrBgbR_H*!n{D0ykL^#KqQfFL47e!j0TDcrO8=aL>*(7})W6RGJVOc$??eu6Z_ zUs5QM91~loJpTAWV(?Ac0uHDlCL# zfZNFY)jJ?!!_7j>0ovyT1k4=;^ghY~Uk)F>94VcUyb3^QGcx|YuKIzJkd}<*U$^bY zH?x1(Y(N{JiS0!8XkCvA}L#+ zWb1)q^#GvPGU&hTe}%E-75vQY5JggcF_hBf{xBcxW5_m+A*|BON7WDxQ6!~yZ8qAk z1(<8OypE*I+3ZN^pRI58&tdijY>w!OS(%g1ZpR2vFzXwY-v~}^3Bre+yt%V1y7A7%6B%$E)n8nY<EW%_&O`RHELjAv4Z7P2^4OkvLbi9CtbQ)E z?-C^QskFbeRgDlFTu z@HcbY1o>Wu&(0}t)*o{ID(|9vKxf*gdyN4zm(5Z9#lNVHp}a2sZYt}!fC+O>=G>co zM$O_ilOChl;%nVc7nU>pbzJ(fNL_zftxPY=jaOf$I=0APGfw!%IW==ySg-I4#<)-0 zzN!b>GyL85l|`WDmyi_ahN~|*I}M8-Iv>$2w%GdeQMLEuHU9BUn~knqjN|z#wdG{* zLT_P3V5|vL73kz{tbNO&lmMg+-@s|U#+Mv&^-l5DU!dMQBK(1S+lgPhE_XN-0FxDi Mr>mdKI;Vst042K}fdBvi literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_artificer_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_artificer_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..d37abeddc4cce0a3004e13e8f25a8b308e773fdd GIT binary patch literal 654 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_cult.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_cult.png new file mode 100644 index 0000000000000000000000000000000000000000..15718566306e2849051e42b971804385ba269df7 GIT binary patch literal 794 zcmV+#1LgdQP)X4kH=ovco6q#~{Am>Pi zOa_Vq>5zkDF3=DS16h%5i)3Ug)*I?NwnXvCe4;)Dj2xK&NEn;f>C=2y{YdIamH>2q z_Writ0F)9Ek|hA~_4#pfe=4dYX#zBm3BW%ZViE$|9@l>L3osGdFYxAZU+quVG6o5@ zJ+A$8+2A(Y_6lxAT-f#`_PJ$Ddj+>532b{@``pkm%Oop;IS+sy^8hUs9|D32&{A;? zaECz?!31ckxCB~uSs|dM;!K%$OtRaTq%M zf=NnLEqGZhVY^z3>Ie#fn(&=^9-W^&*98$Gf!fg9icnwbZ?{2O2P+S7^?0huQ1B?= z5}rPjAt{12z~$r+!hs7`CK&Sj(2?|PPy?9&7&$TlFmhx9VC2XIm^YZx;x*NzrU^dZ zuD$?`wf3Qb)-SfJb!k7V5kPb7R3|nr&_r#!a(C+07eEu6dmw?FKbC$!oFYghz#X8; zd4zWqXzTf*EPyn%qf7hPTVq2A5sh}RH%2xC&c3Fv$Qp-Qbe!jMQF!S9PV5dtNIDz)|q(^gNE>2RnsF}3H4 z01^#pLtJs(7TcUMUD`qadnZHYOQe<(5p>0I+p#v+bEzJfB6z;P%x|1|0D{y~B7$}t z*K9N#Ys2TW#qvUeR1ZuML{R5?^8hLY3NY)bohN80gJ0cowJzhk!)EAp-Ko2#g$=02nzk0Wfm> Y0WhEq!dz%zEC2ui07*qoM6N<$f*xI0q5uE@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/glow_juggernaut_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..15d7433c1d4222f5428f3fc1df4293d02fb8190b GIT binary patch literal 804 zcmV+<1Ka$GP)F+Y}s!QgL5LIBJ9K%XRV1T#k<06a$Wet1YXt8dB}-Vz|3 ze|>pA0UVYT61*iq;O*lRl9)Dz*934N5FkD{#KZ==J+%Ex3J@N(zuV5kFNz&e0U#YX^Z0=QJ1 z1;{k0!kPe16{mp9E-D1LRGbP9yH*6W#s1J0B?g@dFvY%_hK8;vvEy_mK#e)+yhuZE zIjf{N)q?H%33mG9RpVf7_PXl#gKg# zFbL0}#SjtJ8enpA4B>zUsuHyMf9&wO8{|MB0A`Lr0L&bL0GK%f0qTY*X~nm%MNJdx ze7m^=IG(kS4f6TLZhu_r`zi#KJ+`NfjR~?*gUor8KR0(k+1N~ggtAMGe{20Pil8I` zCV(dA1!}WE+m#>71CXY9beSLi)z}C^gkv7)7bD3C^nqg@)bk?s z8NU?1bhDaF4IoiEo`sBfpCD_UNalX=o;}Z({|8To2-Wd?JIe~uxw zoZDs$t_+ip^L0MKeUdva{%b6SD@4Q#V4H-6QgddQYd!M|)`bu-!B(lcGfdk!PTFBx zXIyH}4FOU#s1q^8aa(L-&gn7_`Mb6msvK0PB}D{Haoo17&9tAY2dW4b+hu=atON3c z3bmw&pdQDSTBBiEo7lfyUrC_qfhvOec5!iQ>i~HYFhCtgT~E-ssw=zecKd4g#*qo+ zZ+QpQ)&YH@?P|K{FFHLC;YQth0uzQ{VdW?P%fs;pqPtAh7`+mrY5kDpvTS7esI zMD}`zUf=&P#*PPft3+k)9?rLNlY1Y3?um-UzugDE%J(oRdCVt}nmxah7W3cKMClL>7f7+COo= zUer{fFHoh~W-E4oP>&FeUy;P!7S!85nzrat5|C z_dPn4p(`g~=>>?>IJhQuBwI>r>~DZNZ6xcH{3~5R<|qU}<|qU}<|qU}<|qU}=7=I- z_OiNOKi_{s!U!fn8UOfjw*^>LDU;AkfHF?~cNwOQe|r4@_}XpjcIEr6PZrlZp|YG2 z;PdX`*{W)cznNA;L@nRmD{99%q6?$HmjG?x`uo!9UG;3p^Xh%5l~awt=pO=BzcT_l z1KUmS zzBU!4t*{;Pu4gHMd=_x;4AVr?$6=1sXtD$}#&34PTV;*3?*p!8^`Cu|h^YGj4iB6f zaYKN?1E)r^bAZBPehc+kKT1Y00Ymoz(&+9CPPq!4dhB!PPkIP&pb!9=qYwa@qYwa@ zqYwa@gOvd3v9$@_^f)y~KXy{Y1xjrKDm{)NK_V#{qC+G-jwKJRuL;7sNK zDp(Ig65+2QReZsI9G2*$e3Gy&&m zyhaQO=u+9{ZXlraeJp4asMlub2w0x6@fzLD6anbdAS42@IpDwI2Xc`y1`0mPvj6}9 M07*qoM6N<$f+V$H3;+NC literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/harvester.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/harvester.png new file mode 100644 index 0000000000000000000000000000000000000000..ce11dba2ce19167346904f56282579057c7c8e69 GIT binary patch literal 2584 zcmV+z3g`8SP)P01xwQ#=Fh5 zFpgSuV25q zF=NK~cLd`b#m{wsrQ5h_)f>NZBT=ckbM|hVe5UKqEVM?sVhEjq`Nd_wBdt=+UFzcxG6MX4+j* zKIQ0vfq?;c>eQ*GoB%$~{_^FEZ+GwBz3$ktV~!yh4Y{}+?-)-$<#-=EcC5R8{d%?Z zBnUW$yn6KtL)@lKo4oNFU+dSe_dSm@E?v45r&Ereb$O1miIh zY;=$_$fw-Zt5^Md5&T34sOJHvLFCPwH*up@F`H(~ef;>*oj-rx(N3dGu=tA>Epqqn z-Sb8*Tei$inKH$fxp3h^Tz=!mjWM>2rylk5@KYH8?X7fmb@``yc;CK#o)LPIj=?II z)=p7TJtjGXp)hsoR5x?xOpk{nIyyRBHJW#D26`|jfFDsmu9t^D!U6I=)EAwmO`GPQ zmi~tiA9l~4J#({X&vrX@?C{1bU*)M!JB_d)2_L#+oF+M(fZzmrT~0yPu3a0?5k>Ip z8~`{y34Qs!e*M~~<9R$Pnx8&>+8fViLWFVWI7=Y zpI*Iu`LgTn?e*jS$&)93INZK{JATfcJJ-(#l+&;+f?u)V>OmTy^5e&k{rB|#{rlB< z^X9oZbLP0GPoKIqYu5Olm+`zaPRVEXjmrCaQT_N6W*C&ZmQTZv>Q))ka16@deq1WvwfOiHd>x6Xs}WFew-l@IIL_Aw~jxa8qS4)*QPop%*V+_zC6n=g)P8w8Z@D_usoU(Ij)_$`#iiQGQkAb)E>r z;PSsBTK@Q>U$WXBR(oncNs8cW?Qe~@?-;Kob5Z=*0c6%HRrRe6Wgz z;XO*PM&G5xdMNPn<;%GJq%uYDCBk32bZOmtTKO#eO46wbpBBA`yDOFFFw`81#){y5 zJK2PwYQyf`%is&k)+>XbyB7$-1&Hy`t>?Rg{!rBBhg(=zQnK*Pu!s#UgP-VtRv&KU zQM8@-6$@w!*)ui!S+Tt^fBt-D%iD5zKRnY@nNXp2;*Vf}^?uTsT3YWUl>^+q7h%C@ z<5$8;c|eUwQRUl-Uugzt@#4j0tJcxFo%p3AL;f?^*Eckpr@>Z4@n-Q$JD?U2ZHw`e zRyhB+@VNVxOKAs;b~GqUezC|<7GNu4^R19(bt%mNj>B59-fu>uCY{3klA^6J_X9X33UM158im8- zazdDo;V9D%k@4XsN6aV^B`!1xDio%}367sR{^oSmwOMqcOaPTrVQYL5$(;iTN(>DR z#ZJ)SB<~X@Oz?pU9afIU+CaSxrUJCnr%#V{Lu5R<=joIf8q?pL^dgfcP4bP=uo?3{ z9!D5lW$A$;PDmtlEKn`a);U)G*Sj-wvD2z^f|NgyC^9Qyy2{A^5#&|M&GJ%9N z+O}<*H{6bS6i|Sa{A<^)k(>yab!{!}fYf#fA-YwoR=Klh&w9*I&KFtaWd|Ll zV>4aisO61}3?a})kyROHDUSdK2vJwg((0JYrdlZP;j~&H-U;4JBkavV8gSm<1|}pa|f))KD|Jj;2MT!@|^E0|F#smfGaW z*p?oO4E85SfTzY2w1S!vdWz6E zl-0L*;lhPJk2LiZKiwzD6DHlQTetdKCl4P!^oD9kU_5sZba{(3!s6&)hosfF;dOvD zT&t?2H8*864s|gKK|${A*()W=xLc zZ*CvJ#pfM{{~|``MS%SXS^*N)%90%VBqfEyGIyr>m@m% zrc37k3}jxH57V?TN!y0<{oTHOyZ1T@Gx-e;4%Wr>vXlw)6 z%aFoHV)g(cX+A&!K3#U~t+6(#QlT;TF1PecEGwp>5GW=@hDr6ACdvJE^pzCq&Mn_jt#6^*G~L z|J0zgG@-sec`6Hg#E3k)+q(fpq|iT1a_D>bByJKvN88cU-U)I{XiUZf*X%KN=JO0000z4m?{KL>nkx7W*D<2%NfV~+W{(){K4 z=YaKmymRNy$=9!6H#L6<8^OP{10X+l?p*Wm;ln@T1o)pkdD5Ibd2(I+Qw~6=*L^}Q zbM)xZ#{U;DUQEV(GgM|#e(?0^)2V06@ULVcjRF`|7LHn?PT|4J4*c<^BR zaQE)r6r5^fdhyMhH%$#buYI!`rp>2MpL&(}ll&_df)E8DzjyCmvt!4O=G(V#osgR6 zxliv#xh~|8gS-nDF0@L(Q!2VF|EpK8W*jk=U$hZ$`}XbT^5x4@j20Rv?wyH#sZ$w*hTqu{FN(L znwvLoPF297{H+5B?*(uj4U3 z@B8@6uuuMl#sL{_cpTw+9)Y~?OHvyFovl;X#sMAwB9S0QIpDy715;i!^d$BknO^9QpSzF`1w~0{RHpsmR&TNb$?E*`F@`{^m=;VaLXD; z4$ukml+aQ6UGm#iX09Pp?b3|EvWrbQX=mpEMqtR`SYs2d9OVFb+&x%IDqzGVZw-7a-_Er&`E?Zj^LN$ z0Qj>K_U_$VjRK6#C__(2pFFQQBYQOD8i6zG0jXpr8t3i&m}h6=0e<82axsE(4<0<| z+NjP|ZdtP^oJlkJS6|Pp4W#iTzU0rOp537DyCi5RmEBm)3CyE&WaY@M&v=uP-|(Mv ziA1f|Q(2vG?AWoXwFoMqG(NvqCi2S!ykcmX+zg{yGFcSaHGw|EQ&DTG<_KYJ>r}eE zAq>fE9gxOn6rj9IQ^KaewaG8X)`IUeKBKDU1j=R->>Dh}->fwSk+ok#4zl1$n`W9o zMu7!O;bq&cy+_F;O2daD!M-|&%zgao+4tUv>T_o601B@v(}6Uy4p zh{${%{K6GU=M%?2%;wK8OUp~SrRt#dJ2NAyL^lJW=NXQb-fnSFsV!j{EY zxqpiP-|lepm*bxU@@C#HYnCbTUv7~vqeGuosL*mhd4_x^Uah4 z_z>fB?@R%b*0!cgvftr^to1$}LdPlHu?OR8dd)@~!Vs3~1|c=HlALCN0y+L(o3}6I1dMmS|KrDxPM-2bu2e6x zy$`Am$g?Tw)>usC^Z8Lu1UD z!oE{r$Sb$h;4N!?2pUe4VL!pK&We4%F9BgSFL?kG;86IBc}rml7iG%w$gMSlG4e{= zz|4BU+RM%nY(2B?Z#eO9=-IZc{aRR(yg+%LU>?fz2Fgju2fsZ*cEjom*t|J>`0$M3 zVrC?mj;KKr!YFG$Vf!!l@Wvp|8~DA=Nn{kzCAxlDgWGls4}?6th+w>V`t<4M%a{rmT>-%bP8104s)wr$&*?c2AvxgfdO?^C};G2?(7ckAWz=g)U5tB?>0 z!WzMNYpL8gS>*H<<;sJY_6)hlSM~~NJo?_he}C#!D*wHcp)}fTX%YkoqX__wPx2hA zt8BT2mgfnEjORVSGJhx+Cp$1oJD-l?^z2kuN3@|cm`z99wIW<6S zkOOkup5aS(<#~c35OsOr$|E@riwXNO2M8<0L|C(@8UbaYG@csAi+VTP9sMgP<`x zId0Pp4W8tKA3ZK!yx2LxZV|o5bc?+XKpDcvF7VW;Q*BsjJf!@m@eW%vX^k~Ld1-!r zmkS%pcW8a<)~!wt{sDRdyTWzt4Ds=*kcq+)lIA$SOiU`i=!%d|C})P5e=-6RRMJ@E z!Q7FcPAGFhEdqc_FKc}AGJP)Pfm#Fz^c-tE7&R2mgH+DJAw7Hc>{JG(hBm_ZOUE#-K#XQkak|MV1UAW*7`Yma%ozTgWb1vP2?l zyk;1$WC~VQ(u2&vHF9=6VoC@v7 zdP`@|RO9+H*dfEZ-%8JCBmW^U0}c^7uMv@nw(SK93d$C%Jp|txPQ@iBWnN$k>zdg3 zJ0jR-4c|^uKFD~GMZcPauGNm#ZkE4keOK8U;aA>lJh`^AT2Q;%UWq~K&gQl}66d%; zCwBQj1w=`p6D7fD%SPv#MQpRt*N7+;uv!djo<)g`A6n=cfOIie{Y5Ss7y(NEsD-J` zfD%c$ySv-zFr($Il~Lc8fT%pEwCdcY@9~(&+f>21_>Vx*=cIE3)pzF+C*IthGSyB^ z-3ZhC>Ma-H&FMXT?`vCaIC}<=e`k=#fVep2k8w^dz~F^pl+E z?Z)H~IS-o(W@hsw3AuYB*^=^88*x*p8tI zxL_IunI8a<nK%tu>C3THoO(Vb)t*T;c>_7e2Q6(t$KUQr zc?-mM@E0OAis37)2h?p_rEg+w>8o~r926P(izg6+8BVM#NuM{P5Tu}y9j3eNYx?SNZ**K*F3}%|9AFR8*pC(uoq6W_|CVl2sN2Z zUd+2#F@>_G-g85qTOon7Wnb7ycgykYcw>)(`od|L?hsz-Y3P+Mq~2Us+-9>F4YNcP z*-g;6$s@p&PbI4%)|dx{A&=YKoG5~S(fsfZlVSPhOnHi}R0zHxz}=HjxUAXug1oBe z?P}-%(CwgdhCA1|SJippH=%`zse{Q*Dj2iB?N~ZI4dOV^h)F>-~7q7{?9F^%!|40nTSPvD_|TsII{mgYFZ0d>Rm$D;4$V5(p%%4;cH= zKw3i_%#kP(tgbQm!`$q>r9?`Nu%rjF?Nku5e3m%{tSL)|N0nCTOrMguSSYNNk&!XF z&6v0)mQtlQ>imp?R&Xacs5)<3FarQ0SV!-S^z^=i)Ml@}ad{s~ot)Q{+TWZD4}Bci z^@V|;$$M6Ydq;=+qt?r3M)f6ueuJ2uMSOXyg@nBqKmr?v2!R=eU0!^%&Sn1fhQqTO z@uxchWmDx9BY<+6pKRaOR_FovM$5gwTI8-@dCwm6|1mK;(%Z`cgNG`g?Zj<(-gqhW zF1(K%RqO|vM1L|#Sa=hg1wvC;Z9>fpVX8wa@O6-bXcq^9Rl512ynKYdOr&w&eVvfD zxH4^g823$%?n#{|E=o^6AxByDR_PGA*~#Y|&EmyD>+vj;+{dq=KJ{3!urMiWk>lIi>}$n6iLRj8cIqJ3)CMtzJtkM6Z=Nfp{g z5;lE-*y~UFer4DUm7UQP!oN`|1xg+?O#t5cXdfQcuzXN-V-90s9n~ z8MvibET{yjYxEb%PnWbDuZ0XZy?j^zA;b95OGeNDBPi#G7|TG^-U-)2!`7V+L4V=%%+%nJK$im^H4PBoL}whSomrwkT?d&s@G(x6OIf? zs2wOQ86N8gaH#Tyi+jk6sycqzXtI0C4l_~r37@KpP-RnR z8nR_dzdVExvqa=RS8@)&_taTUOBm|*w^^mDCm~VTNBOtfPWN)EXL~E{+6@I8GvE>+ z`zFaokDf#vbzUIQVs}G?X22IMA$s;gMZ1yBGt%Y&T;`A8Q&b0hzJ*(fXLR}74U()g z^P0aOY6{QgdRx98_b1e(IQkw>G;tz#&c{H?9Sc~R8Y>DqiPE;F2Crtlb$YCmTbry$ ztw*6AhdwbI=T!dM_ZZKPZX4?TBmLeC_XKnI=7_yVuVZRsMj~E+$BS^cN(U_&{u!7P z{!E#asAIL0wM_C zViW?TZ&12;qNtgMj3Uk#HBT(1|xA{!Rx^^jT_v-SmU3Z1D4RBB8DDD>op zB%Y0X^4v)}VtWPo5_J@R?ZtA{MuPHD{=`5}z)4-6UC8!s4$EbLzRAWIpj8Dii}N^yQ3ep>B=FuW<}Q4T5GWj_q|T{O|+ZnS($jxk#`TeR4oY~e6j%?ApAjr;OuVM|x`QCc=v$L7z@0xRexPbPFuLDekXu0tn3kD> zM?F^D;jcQ5-Ty0a&kOd6*&^zA=g3?{_&=KL|FrtIU^9CvWvj&N8jYUOu-^sV?;TzM zkDW5hlCr(SOE@Mqf0GYFqS40NyY~~XMWatwjx0@xecA=8UA`LA1*~8(=nNjl0f6s9 zt5i_M)dDxn^(8QKvvUu`M}}^1RKb4k0!^hp7|&_Am`Zhio_{PQy|wXL;kRdf7kJ`u zZ;uW4tYCpw9~M#gE3`RL#)az|d%z^yy@PQg?SPnhjB&9?z@%~F`vYQYOccTAUxj^K hj{B`N|9h(q<2rd|#JZ7r&apNISYEI`|H{-o?w@W4k9Yt8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_artificer_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_artificer_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f5f7d436005c9075f3cd5a082dd60dd0f9eed3 GIT binary patch literal 2904 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_juggernaut_cult.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_juggernaut_cult.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f4eb1c357664b57a601070c608473a1037c3c5 GIT binary patch literal 3258 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 M07*qoM6N<$g7=h2y#N3J literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_cult.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_cult.png new file mode 100644 index 0000000000000000000000000000000000000000..e954c96627876331c03bb51a4e99678c0f345e29 GIT binary patch literal 2678 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/make_wraith_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c37fa335b4637e13910783264f42d3344eff64 GIT binary patch literal 2685 zcmV-@3WD{CP)dR}?-LyJ)Kt$s$c~A=tPnVvDT{L4r`|Qb@b% zGDW4(l8tTxB2o~fZbAwriFQ-$N&+s0ZbBE*idYLS>TAJ8n~;V08l;0~od5p5^AM~Xw~m>a8CYLm7nc_a;7ffM z?y=<$hR)4xn4X@7si`UDd=z10V*@&!PH9`jBLEHPL{3oKP6vhwYJA*i2mx~b<@IN9 zX=c9?L1Ig30l4}|h+Bk2eHU)(dBft?LC(ji5I(#D>vtAJ^@v6QIbe2n7S`6*#Ol|L z8$nYb@?+0O=Z{6sCwt0HiKPUf9+-uADjHZ%ByR3}+76PN9FBGKwQq-i$N9VrKR?ed zYXPV->}~i@cY;n19>KYZkLF&^Kd1${d+rBZ^m~(&ldxycp2Uvv@p1J#Zh2>T{`@%} z?#1PD>n;?48c*aj1?ZqF0U}q1J32$>#)gygY3{`yh~N$P!A(#-nK_@VE< zo~;dq0>lcY=6+Kz_o5mB z$CA;%a}4^NUt~j}0P2|wDjqK;I2|B(FT~zQ$5ro-7N5mWj)|VtaOY=nqu6}$r)e*X z+m{GBsMq7ahl`)4rlhhc6o8!Ag_q8W7rH(t&~eq+tM9@5)zY?re%YoP6#cDp>(IF` zEvHA2R0O^EU*=N|O+yPe`lg@D+BB5MpDO?_$a^F9G`b7r52N&+FKIZPk7eVA^pXZM zZW3PSW)4u?`t`d6R7cdVbJ2F0PeV8YPy_@yozAo2HVVKUfECe@HeF@VW!L=Geg{gY z0QJQ4WrO;-`NGS&lP9I%hN7D&-oyEQkdC5JXcFKo{+HDdHP33#K5!p0o`taTSlzW4 zY)wfX58##-X>G0PD_>OtOjT);=7v<{O1=H4T7g0l#w#nsoM>tL7DXvq@5=={8eSzBsj9Lp2Iy~J6zmotV9e~{NE6E@>_~Lg;&;BA zPLTqge{EtvEG~Tw^Iv=p=eMF+0A&2)1dZFz4kQMgo&v89z!)Ul>XCKy4%U>Nl66sF zsw)qss0ccqI3M{Z--c`O2*$Ru`HR9^G6g7dK;rz^fZLm(-iG;d058j5ds04{DMDIb zkBD0W{S_Uh|8*nFh+m!LmMg}=u(A$J6r95DCRzbON7f9+TB<^bfRNIcw9 z$T#JqWkpEy-_ZsdAu4d7r1bM8!+w%M;BC0FHXwL@81*;`*p-Be=bZhV*x!2N<8n@y z#>3z*3{MZ~01iI-QXL@vo49Q<6RX5;eIGDv2XOJ#zBc-h5AVc@SLbF4B;w?ZVeseX z2ZVBf&YgsJvk`}OV6GbRl8yX)sSU&A&lDh}1334-efwa0dpo%S#C>2LfSv_Wr^q_L ztPR8FH;w?G22jI_9Kah->9NVw7Vl%76B84ua(L;xwY8w0+v}YGy z3@DSMMQKN51HNzI`w(Zs6EH)PbJKBVb6>qx;?G@#eHvhkta5x`w;_vL7hP{hmH0CS z7=!_mOhwbQ#cj~Jbxzm&fI;(%9!J|4Agz}tv*p!Gp9ff6_zds3^Xx2qBrM@q=W7Xi z5`N=VP?3T~4&dd>^!`%kXD7%R>#ZXH?yM7SdrXl58B>=Pd`uq%X|njR_;YW>d>J4q zSHzt>tu1)qCvAh(bY+pABw7P(hM}zkY>bd1=HdjJ>Tc{hoVzy8YuIPm@}qWJjI{NOh}U&3z_o^Q*a z`#9PdA0LbG(TNi&=S$+_Mf~6|K3~dT6rS&#AHa>kzx%?|=f)!=zJu90xA=H5zo+>8 z(EQd{L4%5qZ#sXa!_%9VVbd%!qL-VHuXkvVRX#Tzt z(6spc(ENP@G%Y?qG=JfJK-Q4uM$|n%KQwqiYvpRW(`{r*vd`1AE4zu!MfD4!ny<-Xr9iO+8mO6LcZ z`F_7ke1207)en8Vusr-N@qH_5GO+)4K1Db|P=La+amC6rjA}W_3&@@ys rKcGpdY<@sfQ0x4FQ9v7-7#RNp=8;wL#?W-k00000NkvXXu0mjf@o^AJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/meta.json new file mode 100644 index 00000000000..39650685b14 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/meta.json @@ -0,0 +1,401 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13, commit https://github.com/tgstation/tgstation/commit/4eaa299c0b20ae8629910a6a25be4be9d58a559e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "shade_cult", + "directions": 4 + }, + { + "name": "shade_holy", + "directions": 4 + }, + { + "name": "artificer", + "directions": 4 + }, + { + "name": "wraith", + "directions": 4 + }, + { + "name": "juggernaut", + "directions": 4 + }, + { + "name": "harvester", + "directions": 4 + }, + { + "name": "glow_artificer_cult", + "directions": 4 + }, + { + "name": "glow_wraith_cult", + "directions": 4 + }, + { + "name": "glow_juggernaut_cult", + "directions": 4 + }, + { + "name": "glow_harvester_cult", + "directions": 4 + }, + { + "name": "make_artificer_cult", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "make_wraith_cult", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "make_juggernaut_cult", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "phase_shift_cult", + "directions": 4, + "delays": [ + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ] + ] + }, + { + "name": "phase_shift2_cult", + "directions": 4, + "delays": [ + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ] + ] + }, + { + "name": "glow_artificer_holy", + "directions": 4 + }, + { + "name": "glow_wraith_holy", + "directions": 4 + }, + { + "name": "glow_juggernaut_holy", + "directions": 4 + }, + { + "name": "glow_harvester_holy", + "directions": 4 + }, + { + "name": "make_artificer_holy", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "make_wraith_holy", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "make_juggernaut_holy", + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.35 + ] + ] + }, + { + "name": "phase_shift_holy", + "directions": 4, + "delays": [ + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ] + ] + }, + { + "name": "phase_shift2_holy", + "directions": 4, + "delays": [ + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ], + [ + 0.01, + 0.05, + 0.030000001, + 0.07, + 0.1, + 0.08, + 0.060000002, + 0.060000002, + 0.04, + 0.04, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_cult.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_cult.png new file mode 100644 index 0000000000000000000000000000000000000000..df2e97e72e1911b1952238942bf8244886c9265e GIT binary patch literal 12974 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift2_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..80b04eec97e40075bc06541d40dcaeed33e66e4c GIT binary patch literal 13359 zcmaL8cQjmI`2TxmWMmjEqL&Ow1koahn!$(^5=8GMdhdNOq9r7V2ohcN-n-GFg&0JS zUNX8tFr)r_zW1)*y6djry?>m&|2S)(_3ZuZ^1R;rIq%g}o>7vskOKff`QrH#^{aZ} zzXwWsRk8@!EnZb*F3mwnG%@7CJ%1VZH_|wRgg{@1Htsm+2%7J@7sGy`W>=g3V zZBfEWFVC#Z%CnhzXvBtZS1@p@JUD;TP2)f8y}>)y`mYrmFnC;WdN>X@9xN%;z>T)- z635&z>Db2Y@vl3(R>#MN$H$SbTT!w(f}TM_tUXdGNFmRlM3TjO9^X%;o8Es=O_8XO zkdiw2@W;$i8a-6fyZ2~4C7DVt{Sj!sXLi0dYx!evJ#UQ<$l)fMcYKqBGg>HB_oN_! zj{!GSVv<~qwoeo!Bv*!FWez?xd2Q=!vHSsZEDXgih_oqJptPlUT_Or&P?+3ENy|eI zqmhK2Hg*vZ;W`}UvR;3;#1RymSz-DDv`Z1zfR|?oEt&QzSYOetau4*el2bH^&1=o)HhCsEWUMnC_`GU%Zue zD`KG8bG`JDAK@lE`ExCUj;&UZ!2-=^0W#mO5ioCw$E6sJjg7tDlv;@Tc*E`;AqlGx zLHAc*4lx*vH}|G~!YAYM^~#eT4K&)bLiih@;23J8lO)+6~b-Gf?5=>V~+x3cq}IZ*Ae^Iqjzm1ml}D7srzs$do;rs zMja{t&WBLk$>QTL9BSlK0%Jx-|7^)fxrD-V%-gxANdbYVo(Jp8B$2x*^Wc+il0#qn z-uAZ-tU#+LnMEPgl^K;BqX{trro~crFBEueA3QnHBls%dEyZB!{G6Rb9d3dJAvvu= zAmsTB3r3hd=4vXHY9rC_1#ZFZmAw}de!s6_CZh7chyHQU7RoO*ewfYh;RKP68dGiS zA;C-hrP))u=O_{?oKKiSCJ5DR*Jsla+?G~tLf>;(B&~j{J`bl#!Y)WMVZPYqXF388 zvSaB@*N{rg*8k-5BiQ~8e0F!L!MA2bdtU#jI<9t2!CJnzHMmTwP{6E^AC|x99v>lO zd;^uG%}~zcUW>X0M|w1WV1I~8U4&`MD*ho|U|u$)KtA^#TbA&Qm9+r5vQ^1Q@qcnE zlB~0vA|!PsP!F*;u0|)*h4Fvey=fn5S7dwXvYrBS15MVQaDmKP6!g%OO<`)N z&l;8+3mKg#IVivm>j*?_;F8&&3{5g@Wi+`gzHRb546A5tw4lG^Ztm_yaxkei=O z=Yb%y%?=avZS9Es9Q-WgsQYv&R)wPc1;lbo{tC38TH2qtgHvMEMN);!me}lJqYIP( zPNI(FsgCgJ#+@8)9O%zjk`YXd0b7B!P7=Pjf3?jAV}jxH1lYG0u_#oG=Q?57Y?u z2y9*(BTHnPr{K&q%U@)YI{j+l-E{Y0^ML5x5x)<*-8cGE8PtzJm+PRsV* zrOiyAVn^_UYtU&AjH?{xI6>-2er@wzaPb^gttYbfNx~|uhD3}b!UK^*-e(?yC`!6R z+EeKFH}`e+$YA`)DRSXQ#{C9w1K_2eU-tDWqXpfVo8yA7_dQE(lzGVY>gf6t|LApK z+n3TNXE>p=7t2#Zyfi0&W30;ZdDe%Ew?SjJi;}tZ)&{`nPow9_QumT>JJz^G(7kC% zt=L3FMQqp=iqmigPBquR{O*g>LYvc6>-zM&`X(qlU5E<& zI(5i$B*9y)d~>?A4I{VSco3SOJ@L>RKwNoci)pZj7FU*+;o2x{rbWUxp1JhL?X4`g zj(kAaY~=&aHl+z#C7YT*Z?Ih*3ju4AwUD;tPv!|@-)*%%d-!n@Q1*cDkusG31O3K} z35OTT;%_SXb)iT@>r{8&ZMj>gAxs?oEOusIFTI|O^t`beoJ8R(oAH1<3aN z4U#3-C0^ImqH5NA3TrF=sqarS02+QW75H)M8_Yk3!e3&VMLGQL%uRk^pwvs1zLP^8RohHe4y4UyZvdE5I>JB^EmGh_PaK)cglbssYsj^E{yZ_5G< z_S9(~*_JOzu%2b(ARx+LSNMqW!)49x&+N^@f3@sw;|W+L6Tb1NcqsMtX zo)eokUqo5aKQ;^2SMS%33n~7g;#lzSx~cD~u&&El7HLh)*zfXJVL$bg*YJ=$@DoVN zO5!@`l4Wg3`!>e|R&;J$b(dezM49+C5Di#N>J^$NF=hV4q$!@w^sKnqdzQqAVzA4G z)3RQV67R2%EeF(k5L4LoFtKkYfd8F&FV5y6eMFuvVt&V4*hL}v;Q{g6qsyNyia^#v zor{|8cOs-*JaT*LbK@y{han+DjoZM{I{B;07l^}RM){Ki*h1;i79_UHH6fwQJvW=t zNFmGnsmnh}`sZa)jkf`~|CX@#`N^THy%SrRK@Slkclu>ZDwOxMwtMH9Prm@Qz!xer zJsOoIcqOzg0v=dTeR=UK$ZI}uNo0Aiv6@l{0LcLkHTzQH&cwmE*3dfV`8i9dhWL=w zGFgptZ0bI>BzVm~$^a+abo%Gg#eH4E%VZ4|ea+{^Gh-m=cpzQi(H@wl4+f;iXi%Dh zyEy)pSjhYILk)VTvnmUMdT+=DFP-iRGNdXR?B(TVHZ*ark97?@&+jbv?tS6YG2B9= zVzlp9gPZA4z95;gFvO)p!8%R}eL1@uI57bj6O;2M^hwZ%pJgs5WHCFKlbmO#2hvWE z%+Zp&hli<$)D4=D?L`jN%<3c;vU^jp)nzBm7fAS<5cL~NB@(%7Bb4nCXX?ga@R|Q^ zi+CgSFQXjqnUw6jFWF+ef-!)TrqQkyNT&(>)OI{x7PyQ#`0PC!WfGJXQBE?nT_2qj z)I0VlqwN`u9d{U;78~8gmbL7r?7@gX46)5Tnm4H|H%NvDqX)YD>tU-B2|?tjdf9)p zvCEmH3o|&(cxS}2J|XjSOh5w`M_m`xP&uNHY?}}VVfJ4gj|&CX|4ZSub^OYdWxfg@ z*$Fj+HsSRd?Vu|H{Ei$Tkn?;_hw5=&hxOmxtwc24S-ZlzkAc7$jWL+p_=GRwMRQ82 zW^2Szp2EAg*gZcE!PZ5$g%HxsT0kP-@2B(mM38H39SS_(M}?5Y_#F-^MSN(x&ezZ- zHGaW)-jZRIxebfGj%*<*hs^r~y$?tELmQDF&OW7+%KacNBXp8vcXm5&`7~dPZC&9N z0#-hnfdXGp99v_P7}xv=f`+c#WyXf6lb$A*%o5&l?cyDK+3P5s#8O!3@netazH{(= zfg!ay$R@JEs2h*2#}Wj6j4?Zp$(CI;1=zoIEu&dRl@7UGXuLpkUUlZU>re zsb$!gWl4)D<9rgx%@Z^$Z4fUT5EM+_dR;258+Y>=8;Qp|lVn+rcTw7(tYv79|w1X$kDOTmHy6C6+&boxoIbX z)SdTRzt@&zIgSJV4abEI@KVgw?8dL&&?8oHxrth+9e{_32g;@c{S8;qpR}3thW`E1 zK#Z8C2&8f%9E)~#5ZQ@#I|`VUzKrDqvf8p<9j|;=ZSc~(+~lSU3HKYMp{dBVwHq zt#ZtKA8&HD#MnZNVJKLFv;k|0=)u-jo%XUny#*XLgp>J>hOQTdZshOcE+>ggGf;S- z^a)iHU`Mg4z1}BE#4R*BV~&FQ&X-4`W)=$WsxRJ??#fI(r4FEP4uNVV0gYlBfFn*8=ZZNe%{1ay^(x-{<>>>15SWLQ! zR4jnr5k3rXCe>=S(cW(j_%mQKpRPe^sb<#adBJ9K528zSKQzc|>YV-`hgYtS01J(f z_;6K{*oXJJKbI&Po~sl2)#`n36{-}~-U$yLCoWH3Hz~*&URbME-=Da=L%GkuS6jFF zpZ~yW28g0U-pY%1Z5be*1jxHW>u;@E?=%D|4j&4a3gOuUe7lVGg^7VeD?-ZwaLQCc z?G*NDk-t_eNtTB;JH+Y@)gN0zJA z)42Ne0~c*^;WcR9^~P=bwkSQ!)w#~R1#uMqQb>o62mk4iezi5Xa3~~`s+BX?*Q9mm z`m8XM_i>u8&t}y-ilsrqRsUR)f#-3$XtL20No9K=b931(r#CW!9WA8Db?QH!TX#+A zZRDB4xTN)zIiRjtHCG;XQU1sN+^xFqg7fn<8j-`$7636-E$)9*RI^$&G7(v`jWU>E z5Bmi?lh7ODqAYzm!;(R?UJBg?F-NZl}TRAY~|_7e@e(NA@r;c zA0Yk)B+g}o7l(9gu~{A0MBQ?$$>~pp*B>C;(_0j_FJNup2R+}`xmZwTLaFAK0(qk$ zRsQv5rzVR}s$PRR9s2X=lF9u@y(oj0p~F$bzD9UN7PeW5Dvgj*N!9p{(5kK2=$xiD6`Tbjlx~H zzgmf{iG-6Fz0kPrXIO!;;g*4e%visof5^9Ug@h;pj-x+A_;pIPfH*=#_qlKqGZmSb zXb#P7_Q!^qF)e(Ib{sFmsEM|4hRib!{*2=bL3qEB991!|5SrJX0Z;w@pVyS^UH*)B z;w{7Y7w;^YgqRm4vFF0jRo%|6A>9YLz22APC^coM`vNPMn#^fPnE#=H`9*@g#A^!R zhl#7^opt|5dFrCP)?o@?h)|wh*}aT7ru-Qd9(^w$6R)Px!^1@ zg9h_l;}m)>^Z!s0iiwSuGnW-O3=c|;0{LV4K23xe{^-sBgb62SB5p!FI9Y~3C2rFB zeD-~6GT_l)_(+4@Wh^F`Fo`%r^!G44&}Og6=8P9*%8E6Qra|dRTjl5?1wRPznVsG;K3Ka`B%s(2?|A;Fy|sWI1E=A2sh1BN{b9dl^fSAx76eq(`%V ziw(1pUmIFb$)6F9eSHh#qlka6uh*6}FtvXJ1r-C7CzvrQ8{E8q;p+CGL9Z@2YrMu} zvn@fM2CuROSm9NZ`=CaJx*6BcS+R--puzvG0jM2)le`V}RG3d}WfMUKNI{4_X9^pH zW#W{qMM6;TXy0T(Y0~6FeaCjT%>QrZZyo-R`K$MC>X7&{I@VGINa$kPX&VePPb5ww zQpRO1@+o_jJiC4*RQv#M$oo3Mq^!N$bjMz^3;EysxU-M5m+WZ>Q~lpy&q|)IC%{^m z+8Fumgsm#5w+Z{8Ca6~(wss}&AQ7;n5r&n*?VgQk`EFM&R+pO{#SFTtMr%)aMP373 zIR*L2^eWLNyo6vBa({~v7s3;DmWJ;$lg`ZCtLM)1G!CS8dg%+uubbr`aycmJ`V ztA(8rjntg}s_th3O<~d$J4Rj^7Et!Yp0b%l>v~TQ==H4xH(HVRIB2 z8F%Z~^eweihBWh^{u%$7a;|U^&dCpb&Hk#!sexfMPArOxG*b+p<{)`!pmfD%bIynH zjo?K{Y;sT(W7`(o&F^Xo((fhIYj8c2#M{DFt1Pxi(Af1`nkwAN?G=JCZub^*v)ii- z-461;^3GWwyax?+K6JX;Ax5tT`)0R(KHq-Brl(WGbix0Dw-rbRX>;}KX#0B(*xl2k zx|Y2Pu3dCgaus(iU-|i| zWMX8sTgKW_RM|dEBsd>YGwaID_R3~s!N%I@CJ&>{GXI^(!7U2#Tte(h@wM4gA^Q!$ z7jW}K==^i8kUaroxt#6SML^<8RI_q2ASSe=2^B-v{DBxpv(?ST(TroK2VV5NFRWQD zdL^q}^D#$9!{^O<=)O=%bWU!%n~|o$>IeNz(hE)njbXc^fBaLUyre2SG)O1w;mBHM zH1BSNoyl`CfIz;be)bsuUx$*{?Tl2KcMi%@8wJ%o78)4-aNqL?QWF7^uXDWcU$`Yy zL(WpD6wc57e*k4G;Py$!7QAx&v9ZHLui{sX8r$c*O0$Pj`dq(AIrdI8f%wwHDBeTK zt66k7&zHj}y88b@U@SGv`V&+@s6C>97U=1}?NzV*TtCh`_uq4?K3_OxiS_B;VSiVl5SXwB+x zvyc3y$kT?6`b^1oNpeuaba(Q#A>MvpVRW^=?*yksn;XYyC5J!-nnodCAf0MzdbJiL zX4)`UqThF2w^u%92g+9&$Jyp1e?(W6771KKRm!gmhpH7ZRL6>jB4D}(s}^lY{Cd|= z4y;5ElZt=BdHr#5;VoOZDGO%k+FrxWTw`JAgn;AuT?)N6|LR$QER&`5;)IHVx#E`}(^@smxIGGO*^{HpTwM-1e(%T?9$R8Mpp^+(viT}35V4;h?~j+X%JnW&V>Jf*L$;|PP zE%z}DC2e)iL1_j>+%RaLsWlS}Z7_Gv*?t0q+vQOsymWvu3IhVi=ot2ebz3M$^-^Lr zq=i8(;|75gI{Vqg&!f4UYJ*dvFcDv3a^Ag&VGoPx%IM-)IWjN3nia`!!ir;e+WKxt zy@?HsT(!5P6bs$*8;q+trXJx(GnR~# z8SZCyP(h8Cp`S5~h^I1bjmt}O*d(sej9c}UUS?2a$>dRNN}7taPD&y*vNp0LH($PB zOvMnV^36*70WK}xM;@?koT3c{vv=mkKroM)Sw|IU5Ku)dv#VXv_cJ|(ByhTWErh=& zbSpYVVe@PKFI|zak{_M)Gb4M5O8XEs9Rmf|&pn{7{X?3-)#RNOp+FyT(P*x@JSU-* z5O-3TdfP-OTWi67 z@#bE2HBBhS+IGsESy}n=$nSbfpFn2Wa(ARX*v1hOczU!AVSD{gnNA8NvSIVN6i z9qAzqe^l_M-dDLT%1%_{UDLXQOm}@+W&? zwHgRNGixYn_6)#EUcNEH?MoZ;>)tKX<<{s0|3&8G(E6Jo&oL8!J;7SEq`SPLmZKac z747SE#`E${9nAWSP~aLu3$LdgD?fK5NAB(W$%+mey|$UYX$%!}tqkVS3=pnTFNV+{104uQF4P@e1vDj7KRmGs`v{2di&zfUD+lES`;GF#QnkM}{q znEHFZh2N_z%#_gx6EL+Wj$c1n8h4oKXXi%0I|%Vy9%8w)uavQkJe9RqbgKCx)e0f_ z^nW2Yu}LQ9D|J7_n+ZEPP+9d0ke6)S5t4t)^wR!j9xaUNEw|-|nyI0X(3}I=s&0^h zis-9=cLM4Z-b;4mqVGO+vYm0kDjH&2!1|4A+mO1NcMBdRSE9WI!Y#GQ$rCZy*-!eWXHDHp*?k}w8Uvpr@41l zJQa2L2k*hZ4-|!!SN~9V`$pS;5eXfdQGIe>t&!xOqE=JZcAwjK&DEV)cJ=k*Bv0OJ z>0=4f|3U?k|<=t=n#5?H*yD6!almQj+-XuDixmth5-BzkaJ^FE> z-jC})cA^h|eH&Ba_5bm0`@#;eX@~NB63oXs+HEU4iLq>krFG$xR}Cz|$rRq1MHjJwFw{oC-L7f0!8j3Iq70|9sU9+*S1j zvE76U=yBZZ5PT{*mRv2ZRv+(Uehw5|v=3skcFgwbgh}%3ztUx#x?->K?_<5gY zN?>7JK-WZ$FpYKQkDl7fkIllrPbkU&&sWLn*6Xxd3f_|mIQh3Um@2JIlL6GOg?nPq}ze zfoEb8j3O*XluDbV25nqP&z_LhAP^J~n2-rK2A|P_flA2)nO*#hligxd)`?Kl9Vlx4 zA|iQbUDo?FUl*H)RfQVJ@tYaM&61hR_2M~4G2rAE3#=SZE-2v0S|CfC{YHTh2n3ui zLf>8P1f7|Gw#(nWx?SAeXPa(%}Q;&#a({ZS+rEp+~DIW=IL^6_`%YkE}Hngqw?at&nV zz75<9LX-MXfOFw(4+G65s`*oyH?eMq)*2dqe*#Pd$%TUD`p-`1jTa0Cg9dH_z0T1s z`UZc?P)`J}J?Iy=D7%iBKMk8X;3TVFelwc>)mz zMwsW_UQ*DwT;%&z0(bos^9IvnAmnGHB?nhFwkk#IH;|uPq#pb4>Xv!B9zl^#r+T-_ z)cH+ZzC58tJ3t_hh{GixldqB?knoMnNPX9f#y#g3cE0kP#A>q+HHlw?;%NxXI^XtuwSk+`U^&-C<3k^muF;ceS`!7?G*6b?q*%JVZU_*j@pg zIIOnLHK=6J#Pd#XrUUCDtWzIo@mAl&@X`l!ILa7W1$rWnmoL9Id$knVUaJ-s(JjP1 z;xWuz-!$hQx^^{q_~85lhV?U}JL_i<@QuKTx&6!&$@UpTIVeFQs224`z`OZ8?~h|9 zds|5`cG7U@wH{#CZ`Gw&iR#pS!v`I%jqk8-0Zc*Nk8I4L5<#;&tf{{#I`3)7WgI-S z{vgv6Kc*_s)-!LC@#p(S-j2*L!_Y=(#ZDA5X%<$93k_egg&O7fJdGTqinlkCH{{pD zgkKruRxIFRqIk9k@wU#|C>u=om)%49ZR7=QmWtOl>#zBCSy#W1W#O1{UH47NN}~Rt z>ulWuc^T%+@8UpY>Ffzvlu|LF;m!}#|2sV2^X2HGZy* z%}elRri~Y+|Cq>8LHL+=xn~ZtQ9GwIBcs8I50J5^TUL%S-vA;0wW*}SrSzqM?&g!e z$xdfcuFy&)q?EqJ(7DEP9hK*hV?l8=EpCZ{-!?Z&si>GTf8tU;$*s1OeHeAAdmk0W z3o}XInf3h|Aa4#-AAZfE5nNUE^@1}RlDOO?!ymS!RwI%7-5oYBXS|#4%*V01QV>VV(y2W`Qq?ga&j+N79~R-4?>*jzeqdljlp`^m zEvW(+)Cfp)+O4rsoEOkdpzDQyTY;FalpQSO7?f6sqWE=@_WjWe*xPtYdy-c%x@a|O zO7`t&u2F`eX_zKSq+;C`AMJy1O;eC)3^|ncVrRqn33{fHff>O(Df(0m!KGxd* z)DsU77Lsq5QSx~Ho}E0OQlNJQNbu{0lXrn92$`%8vaoQ@D)6Dv-bEt7jzb@hAmzsvHlyS;shGD}2n-?O1_2U0^8<3sIRb21uRm z_j{|bi&(HAU>&p%%uUxHz2OP<_k(CS>d<@ zSAkJ^4N8*@%{I06d|pvulUNOdyFPD6G;U1fBnY8dV9;_DL+tWP-r1XxWBnR!c?V`M z(!j~#F`T1#`u2QS{n#y-ye{Q)QwJ|Qf})E&%{1M>tNg2$bb!LPWIAN@xCSgt`f;w| z=i35Cn_2YQkF8+DSyWbv`JW!15{_kRSGAu>>&0v@;eVg(pcL(AV1R;0p!>2RIqxoCW zHF&)tluULq7``*B*WaT*4c_ndnyUhveD9h9&xKGUBu>KPkC-~Gk&}9J40urBIy%_- z`O0f>5Db=|X!c{FsN@?a8`&1&LQZ(24?|@h%}6bpXRXQ>$KHbrqB;?8m8(#8Fpt=+d08je4+ zy;GK_9+aas{>mObYAhO@K1w9Nq??K%M*RyPm`wh1aO?=r$^lu}q(tc`Ozpd{pqya@ zQA2*mD}L44ws?n7c^7kJcE9|^o1z4F)uOZE?$0y`jzdqfl2?WLt1%sL+D>uHiv;Hn zBWKKV>0Ob1cGk96U20hJN~!fqY1P2#7t^m4en$zezi_lVcjIs{A{1|wjK|}1P{+KB zo4+@wKff8{cnr%G4FYUxrc$Z|OnbrdiJH21iu{)Hko&=6A3jr>0C@+52?Th~pLScX;Lpj4+TEc)lL4UpDav3%^585Hq zj|p(Qcz8kl^r=ol=}T+enK=VZT*t59zxdlkQCuWM2AST=p%U#E0guybX!buOBtb?s z=Ks-V^AmHwthP;L(^MKrPSekd-)NJ*nTwp>N39Uqe}H|hvow`(&Z`3Vf0l|t?e;q06^_48P?!_(2Y z?Jj?6I(|IGc$ck)H1E4szN$6TP~F9K!*ipr?>}cuS~%Dbm-KG14gWMcUnoL!hZ?Jf z(v0v-xgpDTLy)Qbep25&gW^P=@H|Hhp^nGskfq^`0D)rWZh{(l>o*H@>X4!ggATd; z^Aqp*L58mvxh6nLkjhB`%`>CStT1t=Nzrf(HaXHc0(UT16>)$1>0j0Yi#Xcnu zod$!SAbQ&N0wPLFxAVS`#8@&%Ercj74r{yLC!!Q?UnbxS7|Dg2jo$xhyxDzBAtBTW zmmxM52{L+j=vI=hXxuZ9)*&?`7oFY@-*EqXLU6&zUe4d8_D zD3-|Cq=^Rwg}c~NXfE^*$X2s-)UB7go5gx?zj`4in(hAS;N*hg^lh4!8Bf}rQ0{y6 zxh)y1$!T%|@E|Wk%$S5{KOpbRSq@&@I9xQ>QKsi7Zs05cz!Z1j)+8YJT7)&C9C-$P zqZJr#6ox&>dmOR(D&Q#rz;~rO$nYzIP0XPh025bO>y6Mx1(>7k4z#eZwX3^1L8%)E z086ll+E432D;fOJ$U04%0y`cgA7lOttK1=Xm$Cll%p0MKz&jTC{8o5wnj#M6Ma*>o zYc+}mkQ*z`@^u^}!@i`OfX)A*Dc1R@fWN|(|LcPy<@}5(; z%eYDrRE{o?D6@JdtBh7%Naswc*}M;?ar(NDde0Ku%^-E9Q!@sgGg?23V1ru!n%1%; z;bDMMJ)D&OH99tw*LoZTzZAN>m~Uiky$JPR`Ekzbt}0`%t!zmmQGfkbVjA8pc1UT3 z0Uc=`y?ePbd#gj05*O<L!(sKSCR<1|;V^3F3Qen}eX3<4 zjIZ(WKZkRE-d}_}UAl$4k89s=rJR)KfEYLbes_3<&2rp5ehO^-u@0d5KiJDve|ELU zs1$LTRU0S-vr94VHeT$g#efc|IXGmT*$q#9Cwzy!G>hh$z_7Q#5pTjjQIyXO8!}W- zy-QAnb8TQ%tzI86GHDQ0eB9l0@$Nep81=C>{ByI(DUtHHcl}xRVgv1U?f(Sq+=$(k zu_zH#RjqL!@DSyKz1svLK@jy@-?Bq6WpelZ*lFD+hRBLlRJ$W&?Mp+50#z8|c z9b2GSe$+rt`auJVC(~tmi~deEcz}se!Qy{S^D2T?w%Z{H-hY$t=-4?}uDvcY0|k@g z19m>&IldSs!|lipuLjuhrUASYc`l#D?8h}D!BD~i{3A?4&LU{hMQ>)G6EvSLg$M4m zURycP^u>M?%NdzQufQqC)NV)_19JA44z~+bj#|nr$Yjr#Q*)X@ixl(4MjCFcYB~y# zrykAkl+M5BtRW!q{hNB2#w%~rbAh0Qw3GFDDc+4OcDlzIITyp~5CS0EMEVz7WwjkQ za($`EZtZ$Vj6;GhylrBHj}oReNR7}7kBLD3-M|$aX=>BQ2Y85F8@Z{!^o{qK%z@Q- zalmUg`q6y~l8T_}0{$C*622gpR@&uY?6KpMiSlLZ@nTQjvYXwr2411|F4$12Zv`vv z1ABSWyWc~sgsI!G(_)stAYatvVgra>$~*=?0yp%6gR1E&Ouz*v9YS(Jm@3p`lt^fm zms;Od+E~P18yD0i03S0>j%=BySolq{1D>T=ys~UxQ#5q+cf$w+zo+`zXQu4Nh&tS^b*6VW}lA`GL1f>^I#vfvdqA$;NR0 hZQs+Y>NvT4d7~^d@-6$rt3QB%7m6xRN|B~-{})kf`^*3U literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_cult.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_cult.png new file mode 100644 index 0000000000000000000000000000000000000000..25e5af357be5398f562232ad5bcb73afb351869a GIT binary patch literal 12769 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/phase_shift_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..bc1ed67559b7bc8d1b2c8e899a76c37928f6f4d2 GIT binary patch literal 13063 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 N002ovPDHLkV1oNh8-f4; literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/shade_holy.png b/Resources/Textures/WhiteDream/BloodCult/mobs.rsi/shade_holy.png new file mode 100644 index 0000000000000000000000000000000000000000..448324cbd63d89b9ea3e29356f65dfde414099ff GIT binary patch literal 677 zcmV;W0$TlvP)zq+mjO@m=Xbtz?z z96bk-y1hV(@yBn4Ir6)~EQIW!{$TM`i~@hA%YxZAw->H7(kt47(kt47(kr^(;u)vyGH=TkLeGv z-)Wfupqb4_%N3$nFi=vB6K9&{;rsn_OVe0o5Py3{Yy201IFP zd;ySIU~ed70f8|kgg9Ep{z3p&)etur42sHln_0^S% zQ1l5vfZvW}0oeMxySwiC`nqcYU{PM6tq+uXL6!%=_#Z;|`1t6KkB_?w{0QI{g@=a+ zx3jb3-rwK5EADgQ6#y#ZY87QVjemN2a#vSZ?(*`oe?F8arFBC5o12^N>+7peg9x}s z`VW%%2R&fgx_yCkeYEuH>1o&UG#>YNcXx9gBJ$8nQsLu=k!W%JsmFm=ki_p500n^j z_V(7Dot=G?1g;OjSQu@M=W~dFEAoRp_1pCE(|BU~-8=0M+*+(hrQuU z)Aw^l;N*osUJR`|-g7R1G)#sxjr>|(^h8LFr#rDQx*>p;=URYizV}l_(3Zy^zhyk* z)EB^T2V*(>@j1&tK6+2c6J`WZ!`CxpE2x`1-Me^gf<)`t= zulZp7kO*@gfH7S&Q+-u!1xTP0IC@&72(@{OJOGv8 zbrB+{@ycIPBcOvO{EW<^DUaJT7kul1m#d|@)N zu?fNb06nAksb~*ETZYZ4_%vQ)1MIu8u?bPf;}l_tkboF1Mgu*sFwr1A)C;N}kJ~eP z`~C3~(D;FxBB=2!pCZ_PC?zn0h#CbnP(oc^PhwFidw^OC)_4t!vatxMff-4|pavxX z8nDFl79waI0E46Kr$GLcqj4Zw06iOI@2inoTFKfT;0uCKA@G~eQ$M>T51yf zZTVWAAh*bE1c-98J~^COGeIR)wCV!@TdwthTx1EL!=XlOp_N(~57-z4or9DFW+e;2 zlU5Et8m6X0Vr^*ePd<%LtiBe=L23`20vcZ%*#dA%s_+Fc)PgViqsEdr>;DBp9o-^N zcOi<54(ty^t|rj*M)jFj@DSA*`Cpy^uRFXBI5 W`b%K+gF`6*0000M literal 0 HcmV?d00001 diff --git a/Resources/Textures/WhiteDream/BloodCult/narsie.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/narsie.rsi/meta.json new file mode 100644 index 00000000000..380599c7fa7 --- /dev/null +++ b/Resources/Textures/WhiteDream/BloodCult/narsie.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TG station 13", + "version": 1, + "size": { + "x": 504, + "y": 532 + }, + "states": [ + { + "name": "narsie", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "narsie_spawn_anim", + "delays": [ + [ + 0.3, + 0.1, + 0.1, + 0.1, + 0.1, + 1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/WhiteDream/BloodCult/narsie.rsi/narsie.png b/Resources/Textures/WhiteDream/BloodCult/narsie.rsi/narsie.png new file mode 100644 index 0000000000000000000000000000000000000000..e5643681cc224c7796fd87e284cc5591f24bd224 GIT binary patch literal 114966 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 yEbpeSDTbz;W7B&k6WfQjl2!= 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�mAMld?;4xeOFJ)V)=wcC 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�Dk37j$oAeT1zk&MRvys_Po#oSEAm7vf%<;xkbr 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 ObNYd>o3qRJ(*FTbr*%~T literal 0 HcmV?d00001 From a179e186fa812e5dbce34983e11ef7af56ccdcf4 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 22 Nov 2024 21:54:36 +0000 Subject: [PATCH 051/182] Automatic Changelog Update (#1001) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1261aa5e002..ec256963110 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8122,3 +8122,10 @@ Entries: id: 6538 time: '2024-11-22T20:09:21.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1259 +- author: Remuchi + changes: + - type: Add + message: Added Blood Cult Gamemode. + id: 6539 + time: '2024-11-22T21:54:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1001 From dcc1c38fb729b00fdb15b79b38372f3e1e8bc951 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:24:04 -0400 Subject: [PATCH 052/182] Engine Update v237.2.0 (#1270) # Description Updates to engine version v237.2.0. Fixes disposals systems breaking and not using the proper direction. --------- Co-authored-by: sleepyyapril --- .../Disposal/Unit/EntitySystems/DisposableSystem.cs | 9 +++++---- RobustToolbox | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs index e7c83c8ac6a..bcf240df533 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs @@ -137,12 +137,13 @@ public void ExitDisposals(EntityUid uid, DisposalHolderComponent? holder = null, else { _xformSystem.AttachToGridOrMap(entity, xform); + var direction = holder.CurrentDirection == Direction.Invalid ? holder.PreviousDirection : holder.CurrentDirection; - if (holder.PreviousDirection != Direction.Invalid && _xformQuery.TryGetComponent(xform.ParentUid, out var parentXform)) + if (direction != Direction.Invalid && _xformQuery.TryGetComponent(gridUid, out var gridXform)) { - var direction = holder.PreviousDirection.ToAngle(); - direction += _xformSystem.GetWorldRotation(parentXform); - _throwing.TryThrow(entity, direction.ToWorldVec() * 3f, 10f); + var directionAngle = direction.ToAngle(); + directionAngle += _xformSystem.GetWorldRotation(gridXform); + _throwing.TryThrow(entity, directionAngle.ToWorldVec() * 3f, 10f); } } } diff --git a/RobustToolbox b/RobustToolbox index 32bca7cfd41..92b0e7f1a85 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af +Subproject commit 92b0e7f1a853979a1361ed24d2fb5ffc11f43f66 From 613e7937392d5d4fd9bf906f571adc237c706367 Mon Sep 17 00:00:00 2001 From: Skubman Date: Mon, 25 Nov 2024 02:44:47 +0800 Subject: [PATCH 053/182] [QoL] Show Oni Damage Bonus In Damage Examine (#1268) # Description Examining an item's damage values as an Oni now calculates your bonus damage, and it also works with all of the Oni combat traits. ## Technical details `OniSystem`, instead of adding melee damage through `MeleeHitEvent`, now adds damage through `GetMeleeDamageEvent`, the same event that examining melee weapon damage raises through `GetDamage`. ## Media **Normal damage values** **Oni damage values** # Changelog :cl: Skubman - tweak: As an Oni, examining the damage values of weapons now takes into account the melee damage bonus from your species or trait. --- .../Nyanotrasen/Abilities/Oni/OniSystem.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Content.Server/Nyanotrasen/Abilities/Oni/OniSystem.cs b/Content.Server/Nyanotrasen/Abilities/Oni/OniSystem.cs index 4fc078e85bc..a7e2295b751 100644 --- a/Content.Server/Nyanotrasen/Abilities/Oni/OniSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Oni/OniSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Tools.Components; using Content.Shared.Damage.Events; using Content.Shared.Nyanotrasen.Abilities.Oni; +using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Containers; @@ -19,8 +20,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnEntInserted); SubscribeLocalEvent(OnEntRemoved); - SubscribeLocalEvent(OnOniMeleeHit); - SubscribeLocalEvent(OnHeldMeleeHit); + SubscribeLocalEvent(OnGetMeleeDamage); SubscribeLocalEvent(OnStamHit); } @@ -55,17 +55,12 @@ private void OnEntRemoved(EntityUid uid, OniComponent component, EntRemovedFromC RemComp(args.Entity); } - private void OnOniMeleeHit(EntityUid uid, OniComponent component, MeleeHitEvent args) + private void OnGetMeleeDamage(EntityUid uid, MeleeWeaponComponent component, ref GetMeleeDamageEvent args) { - args.ModifiersList.Add(component.MeleeModifiers); - } - - private void OnHeldMeleeHit(EntityUid uid, HeldByOniComponent component, MeleeHitEvent args) - { - if (!TryComp(component.Holder, out var oni)) + if (!TryComp(args.User, out var oni)) return; - args.ModifiersList.Add(oni.MeleeModifiers); + args.Modifiers.Add(oni.MeleeModifiers); } private void OnStamHit(EntityUid uid, HeldByOniComponent component, TakeStaminaDamageEvent args) From 5fe4b1e94b987f787807cc10df06f667b87d124e Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 24 Nov 2024 18:45:12 +0000 Subject: [PATCH 054/182] Automatic Changelog Update (#1268) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ec256963110..ddc14396ae2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8129,3 +8129,12 @@ Entries: id: 6539 time: '2024-11-22T21:54:10.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1001 +- author: Skubman + changes: + - type: Tweak + message: >- + As an Oni, examining the damage values of weapons now takes into account + the melee damage bonus from your species or trait. + id: 6540 + time: '2024-11-24T18:44:48.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1268 From f0463062812428625da9e8adad60c8a567fdacbe Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Sun, 24 Nov 2024 21:43:25 -0800 Subject: [PATCH 055/182] Loadouts V4 (#1164) # Description # TODO - [x] Custom name/desc/color tint, toggleable individually per-loadout - [x] Fix them not changing correctly between profiles in-editor - [x] Preview colors in the lobby - [x] Allow the users to null the color themselves (and default it to such) - [x] Pick what should be allowed to be recolored - [x] Guidebook links - [x] Make an example - [x] Special components for loadouts - [x] Heirlooms - [x] Pick what should have heirlooms - [x] Decimate lag - [x] Fix live character preview - Maybe do characters per job - Rethink unusable ---

Media

https://github.com/user-attachments/assets/bcf61517-6b64-40d2-b299-7462e2469fe2

--- # Changelog :cl: - add: Players can set custom names, descriptions, and color tints for their loadout items - add: Certain loadouts may have Guidebook pages shown in the editor - add: Players can pick a list of loadout items to have one randomly be their family heirloom for a mood bonus or deficit if they are carrying it - fix: Loadouts have almost as little lag as possible (hopefully none) - fix: Everything properly updates your character editor's live preview --------- Signed-off-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: VMSolidus Co-authored-by: Pspritechologist <81725545+Pspritechologist@users.noreply.github.com> --- Content.Client/Lobby/LobbyUIController.cs | 24 +- .../Lobby/UI/CharacterPickerButton.xaml.cs | 2 +- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 73 +- .../Lobby/UI/LoadoutPreferenceSelector.xaml | 81 +- .../UI/LoadoutPreferenceSelector.xaml.cs | 160 +- .../Lobby/UI/TraitPreferenceSelector.xaml.cs | 2 +- .../Controls/ResizableControl.cs | 151 ++ .../Controls/StyledButtonGroup.cs | 43 + .../Controls/StyledButtonGroup.xaml | 5 + .../Content.Server.Database.csproj | 1 + ...tomLoadoutNameDescriptionColor.Designer.cs | 1908 ++++++++++++++++ ...25707_CustomLoadoutNameDescriptionColor.cs | 48 + ...6073335_CustomLoadoutHeirlooms.Designer.cs | 1912 +++++++++++++++++ .../20241106073335_CustomLoadoutHeirlooms.cs | 28 + .../PostgresServerDbContextModelSnapshot.cs | 16 + ...tomLoadoutNameDescriptionColor.Designer.cs | 1835 ++++++++++++++++ ...25658_CustomLoadoutNameDescriptionColor.cs | 48 + ...6073327_CustomLoadoutHeirlooms.Designer.cs | 1839 ++++++++++++++++ .../20241106073327_CustomLoadoutHeirlooms.cs | 28 + .../SqliteServerDbContextModelSnapshot.cs | 16 + Content.Server.Database/Model.cs | 13 +- Content.Server.Database/remove-migration.ps1 | 12 + Content.Server.Database/remove-migration.sh | 9 + .../Clothing/Systems/LoadoutSystem.cs | 84 +- Content.Server/Database/ServerDbBase.cs | 15 +- Content.Server/Paint/PaintSystem.cs | 10 +- .../Traits/Assorted/HeirloomSystem.cs | 56 + .../Loadouts/Prototypes/LoadoutPrototype.cs | 26 +- ...oadoutSystem.cs => SharedLoadoutSystem.cs} | 98 +- .../Systems/CharacterRequirements.Job.cs | 116 +- .../Systems/CharacterRequirements.Logic.cs | 77 +- .../Systems/CharacterRequirements.Profile.cs | 182 +- .../CharacterRequirements.Whitelist.cs | 16 +- .../Systems/CharacterRequirements.cs | 2 +- .../Systems/CharacterRequirementsSystem.cs | 12 +- .../Preferences/HumanoidCharacterProfile.cs | 26 +- .../Prototypes/CharacterItemGroupPrototype.cs | 3 +- .../Assorted/Components/HeirloomComponents.cs | 22 + Resources/Locale/en-US/guidebook/guides.ftl | 3 + Resources/Locale/en-US/loadouts/eyes.ftl | 4 +- Resources/Locale/en-US/mood/mood.ftl | 3 + .../ui/humanoid-profile-editor.ftl | 10 +- .../Jobs/Medical/uncategorized.yml | 2 + .../Guidebook/Loadouts/loadoutInfo.yml | 11 + Resources/Prototypes/Guidebook/ss14.yml | 3 +- .../Prototypes/Loadouts/Generic/eyes.yml | 3 + .../Prototypes/Loadouts/Generic/hands.yml | 4 + .../Prototypes/Loadouts/Generic/head.yml | 9 + .../Prototypes/Loadouts/Generic/items.yml | 3 + .../Prototypes/Loadouts/Generic/mask.yml | 2 + .../Prototypes/Loadouts/Generic/neck.yml | 12 + .../Loadouts/Generic/outerClothing.yml | 4 + .../Prototypes/Loadouts/Generic/shoes.yml | 9 + .../Prototypes/Loadouts/Generic/uniform.yml | 19 + .../Loadouts/Jobs/Command/captain.yml | 5 + .../Loadouts/Jobs/Command/headOfPersonnel.yml | 4 + .../Loadouts/Jobs/Command/uncategorized.yml | 1 + .../Engineering/atmosphericTechnician.yml | 1 + .../Jobs/Engineering/uncategorized.yml | 1 + .../Loadouts/Jobs/Epistemics/chaplain.yml | 3 + .../Loadouts/Jobs/Epistemics/mystic.yml | 1 + .../Jobs/Epistemics/uncategorized.yml | 3 + .../Jobs/Logistics/salvageSpecialist.yml | 1 + .../Loadouts/Jobs/Medical/chemist.yml | 1 + .../Loadouts/Jobs/Medical/uncategorized.yml | 17 + .../Loadouts/Jobs/Security/headOfSecurity.yml | 7 + .../Loadouts/Jobs/Security/uncategorized.yml | 26 + .../Loadouts/Jobs/Service/bartender.yml | 2 + .../Loadouts/Jobs/Service/clown.yml | 20 + .../Prototypes/Loadouts/Jobs/Service/mime.yml | 12 + .../Loadouts/Jobs/Service/musician.yml | 47 + Resources/Prototypes/Mood/categories.yml | 11 +- Resources/Prototypes/Mood/drugs.yml | 6 - .../Mood/genericNegativeEffects.yml | 5 + .../Mood/genericPositiveEffects.yml | 7 + .../Eyes/LoadoutInfoLoadoutEyesEyepatch.xml | 4 + .../Guidebook/LoadoutInfo/LoadoutInfo.xml | 4 + 77 files changed, 9009 insertions(+), 280 deletions(-) create mode 100644 Content.Client/UserInterface/Controls/ResizableControl.cs create mode 100644 Content.Client/UserInterface/Controls/StyledButtonGroup.cs create mode 100644 Content.Client/UserInterface/Controls/StyledButtonGroup.xaml create mode 100644 Content.Server.Database/Migrations/Postgres/20241029025707_CustomLoadoutNameDescriptionColor.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20241029025707_CustomLoadoutNameDescriptionColor.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20241106073335_CustomLoadoutHeirlooms.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20241106073335_CustomLoadoutHeirlooms.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20241029025658_CustomLoadoutNameDescriptionColor.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20241029025658_CustomLoadoutNameDescriptionColor.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20241106073327_CustomLoadoutHeirlooms.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20241106073327_CustomLoadoutHeirlooms.cs create mode 100755 Content.Server.Database/remove-migration.ps1 create mode 100755 Content.Server.Database/remove-migration.sh create mode 100644 Content.Server/Traits/Assorted/HeirloomSystem.cs rename Content.Shared/Clothing/Loadouts/Systems/{LoadoutSystem.cs => SharedLoadoutSystem.cs} (58%) create mode 100644 Content.Shared/Traits/Assorted/Components/HeirloomComponents.cs create mode 100644 Resources/Prototypes/Guidebook/Loadouts/loadoutInfo.yml create mode 100644 Resources/ServerInfo/Guidebook/LoadoutInfo/Eyes/LoadoutInfoLoadoutEyesEyepatch.xml create mode 100644 Resources/ServerInfo/Guidebook/LoadoutInfo/LoadoutInfo.xml diff --git a/Content.Client/Lobby/LobbyUIController.cs b/Content.Client/Lobby/LobbyUIController.cs index 26643cb603c..7f3ad60c3da 100644 --- a/Content.Client/Lobby/LobbyUIController.cs +++ b/Content.Client/Lobby/LobbyUIController.cs @@ -41,7 +41,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered() - .LoadProfileEntity(humanoid, true); + .LoadProfileEntity(humanoid, true, true); var highPriorityJob = humanoid.JobPriorities.SingleOrDefault(p => p.Value == JobPriority.High).Key; if (highPriorityJob != null) diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index c4e1e1fc13b..f23fd6b4a0d 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -11,6 +11,7 @@ using Content.Shared.CCVar; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.Loadouts.Prototypes; +using Content.Shared.Clothing.Loadouts.Systems; using Content.Shared.Customization.Systems; using Content.Shared.GameTicking; using Content.Shared.Humanoid; @@ -76,7 +77,7 @@ public sealed partial class HumanoidProfileEditor : BoxContainer private Dictionary _confirmationData = new(); private List _traitPreferences = new(); private int _traitCount; - private List _loadoutPreferences = new(); + private HashSet _loadoutPreferences = new(); private Direction _previewRotation = Direction.North; private ColorSelectorSliders _rgbSkinColorSelector; @@ -427,7 +428,7 @@ public HumanoidProfileEditor( // Set up the loadouts tab LoadoutsTab.Orphan(); CTabContainer.AddTab(LoadoutsTab, Loc.GetString("humanoid-profile-editor-loadouts-tab")); - _loadoutPreferences = new List(); + _loadoutPreferences = new(); // Show/Hide the loadouts tab if they ever get enabled/disabled var loadoutsEnabled = cfgManager.GetCVar(CCVars.GameLoadoutsEnabled); @@ -473,7 +474,8 @@ public HumanoidProfileEditor( #endregion Left - ShowClothes.OnToggled += args => { ReloadProfilePreview(); }; + ShowClothes.OnToggled += _ => { SetProfile(Profile, CharacterSlot); }; + ShowLoadouts.OnToggled += _ => { SetProfile(Profile, CharacterSlot); }; SpeciesInfoButton.OnPressed += OnSpeciesInfoButtonPressed; UpdateSpeciesGuidebookIcon(); @@ -614,7 +616,7 @@ private void ReloadPreview() if (Profile == null || !_prototypeManager.HasIndex(Profile.Species)) return; - PreviewDummy = _controller.LoadProfileEntity(Profile, ShowClothes.Pressed); + PreviewDummy = _controller.LoadProfileEntity(Profile, ShowClothes.Pressed, ShowLoadouts.Pressed); SpriteView.SetEntity(PreviewDummy); } @@ -823,20 +825,6 @@ public void RefreshJobs() UpdateJobPriorities(); } - private void ToggleClothes(BaseButton.ButtonEventArgs _) - { - //TODO: Optimization - // _controller.ShowClothes = ShowClothes.Pressed; - // _controller.UpdateCharacterUI(); - } - - private void ToggleLoadouts(BaseButton.ButtonEventArgs _) - { - //TODO: Optimization - // _controller.ShowLoadouts = ShowLoadouts.Pressed; - // _controller.UpdateCharacterUI(); - } - private void UpdateRoleRequirements() { JobList.DisposeAllChildren(); @@ -959,7 +947,7 @@ private void UpdateRoleRequirements() Profile = Profile?.WithJobPriority(job.ID, (JobPriority) priority); ReloadPreview(); SetDirty(); - UpdateCharacterRequired(); + SetProfile(Profile, CharacterSlot); }; _jobPriorities.Add((job.ID, selector)); @@ -1610,7 +1598,7 @@ private async void ExportProfile() } catch (Exception exc) { - Logger.Error($"Error when exporting profile\n{exc.StackTrace}"); + Logger.Error($"Error when exporting profile: {exc.Message}\n{exc.StackTrace}"); } finally { @@ -1882,7 +1870,7 @@ void AddSelector(TraitPreferenceSelector selector) Profile = Profile?.WithTraitPreference(selector.Trait.ID, preference); IsDirty = true; UpdateTraitPreferences(); - UpdateCharacterRequired(); + SetProfile(Profile, CharacterSlot); }; } @@ -1969,11 +1957,18 @@ private void UpdateLoadoutPreferences() foreach (var preferenceSelector in _loadoutPreferences) { var loadoutId = preferenceSelector.Loadout.ID; - var preference = Profile?.LoadoutPreferences.Contains(loadoutId) ?? false; + var loadoutPreference = Profile?.LoadoutPreferences.FirstOrDefault(l => l.LoadoutName == loadoutId) ?? preferenceSelector.Preference; + var preference = new LoadoutPreference( + loadoutPreference.LoadoutName, + loadoutPreference.CustomName, + loadoutPreference.CustomDescription, + loadoutPreference.CustomColorTint, + loadoutPreference.CustomHeirloom) + { Selected = loadoutPreference.Selected }; preferenceSelector.Preference = preference; - if (preference) + if (preference.Selected) { points -= preferenceSelector.Loadout.Cost; LoadoutPointsBar.Value = points; @@ -1985,14 +1980,12 @@ private void UpdateLoadoutPreferences() LoadoutsRemoveUnusableButton.Text = Loc.GetString("humanoid-profile-editor-loadouts-remove-unusable-button", ("count", _loadouts .Where(l => _loadoutPreferences - .Where(lps => lps.Preference).Select(lps => lps.Loadout).Contains(l.Key)) + .Where(lps => lps.Preference.Selected).Select(lps => lps.Loadout).Contains(l.Key)) .Count(l => !l.Value - || !_loadoutPreferences.Find(lps => lps.Loadout == l.Key)!.Wearable))); + || !_loadoutPreferences.First(lps => lps.Loadout == l.Key).Wearable))); AdminUIHelpers.RemoveConfirm(LoadoutsRemoveUnusableButton, _confirmationData); IsDirty = true; - //TODO: Optimization - // _controller.UpdateClothes = true; ReloadProfilePreview(); } @@ -2039,10 +2032,11 @@ out _ ); _loadouts.Add(loadout, usable); - if (_loadoutPreferences.FindIndex(lps => lps.Loadout.ID == loadout.ID) is not (not -1 and var i)) + var list = _loadoutPreferences.ToList(); + if (list.FindIndex(lps => lps.Loadout.ID == loadout.ID) is not (not -1 and var i)) continue; - var selector = _loadoutPreferences[i]; + var selector = list[i]; UpdateSelector(selector, usable); } @@ -2108,6 +2102,8 @@ out _ if (_loadoutPreferences.Select(lps => lps.Loadout.ID).Contains(loadout.ID)) { var first = _loadoutPreferences.First(lps => lps.Loadout.ID == loadout.ID); + var prof = Profile?.LoadoutPreferences.FirstOrDefault(lp => lp.LoadoutName == loadout.ID); + first.Preference = new(loadout.ID, prof?.CustomName, prof?.CustomDescription, prof?.CustomColorTint, prof?.CustomHeirloom); UpdateSelector(first, usable); continue; } @@ -2115,7 +2111,8 @@ out _ var selector = new LoadoutPreferenceSelector( loadout, highJob ?? new JobPrototype(), Profile ?? HumanoidCharacterProfile.DefaultWithSpecies(), ref _dummyLoadouts, - _entManager, _prototypeManager, _cfgManager, _characterRequirementsSystem, _requirements); + _entManager, _prototypeManager, _cfgManager, _characterRequirementsSystem, _requirements) + { Preference = new(loadout.ID) }; UpdateSelector(selector, usable); AddSelector(selector); @@ -2226,13 +2223,21 @@ void AddSelector(LoadoutPreferenceSelector selector) selector.PreferenceChanged += preference => { // Make sure they have enough loadout points - preference = preference ? CheckPoints(-selector.Loadout.Cost, preference) : CheckPoints(selector.Loadout.Cost, preference); + var selected = preference.Selected + ? CheckPoints(-selector.Loadout.Cost, preference.Selected) + : CheckPoints(selector.Loadout.Cost, preference.Selected); // Update Preferences - Profile = Profile?.WithLoadoutPreference(selector.Loadout.ID, preference); + Profile = Profile?.WithLoadoutPreference( + selector.Loadout.ID, + selected, + preference.CustomName, + preference.CustomDescription, + preference.CustomColorTint, + preference.CustomHeirloom); IsDirty = true; UpdateLoadoutPreferences(); - UpdateCharacterRequired(); + SetProfile(Profile, CharacterSlot); }; } @@ -2320,7 +2325,7 @@ private void TryRemoveUnusableLoadouts() // Remove unusable and unwearable loadouts foreach (var (loadout, _) in _loadouts.Where(l => - !l.Value || !_loadoutPreferences.Find(lps => lps.Loadout.ID == l.Key.ID)!.Wearable).ToList()) + !l.Value || !_loadoutPreferences.First(lps => lps.Loadout.ID == l.Key.ID).Wearable).ToList()) Profile = Profile?.WithLoadoutPreference(loadout.ID, false); UpdateCharacterRequired(); } diff --git a/Content.Client/Lobby/UI/LoadoutPreferenceSelector.xaml b/Content.Client/Lobby/UI/LoadoutPreferenceSelector.xaml index a6fbf162bc1..e04fdc1c69b 100644 --- a/Content.Client/Lobby/UI/LoadoutPreferenceSelector.xaml +++ b/Content.Client/Lobby/UI/LoadoutPreferenceSelector.xaml @@ -1,10 +1,77 @@ - - + + + + +
- [DataField("whitelist", required: true)] + [DataField(required: true)] public EntityWhitelist? ToolWhitelist; /// @@ -18,14 +20,20 @@ public sealed partial class GatherableComponent : Component /// (Tag1, Tag2, LootTableID1, LootTableID2 are placeholders for example) /// -------------------- /// useMappedLoot: true - /// whitelist: + /// toolWhitelist: /// tags: /// - Tag1 /// - Tag2 - /// mappedLoot: + /// loot: /// Tag1: LootTableID1 /// Tag2: LootTableID2 /// - [DataField("loot")] - public Dictionary? MappedLoot = new(); + [DataField] + public Dictionary>? Loot = new(); + + /// + /// Random shift of the appearing entity during gathering + /// + [DataField] + public float GatherOffset = 0.3f; } diff --git a/Content.Server/Gatherable/GatherableSystem.Projectile.cs b/Content.Server/Gatherable/GatherableSystem.Projectile.cs index f773ca2dbb9..3ab8872fd7d 100644 --- a/Content.Server/Gatherable/GatherableSystem.Projectile.cs +++ b/Content.Server/Gatherable/GatherableSystem.Projectile.cs @@ -1,7 +1,5 @@ using Content.Server.Gatherable.Components; -using Content.Server.Projectiles; using Content.Shared.Projectiles; -using Content.Shared.Weapons.Ranged.Systems; using Robust.Shared.Physics.Events; namespace Content.Server.Gatherable; @@ -13,20 +11,20 @@ private void InitializeProjectile() SubscribeLocalEvent(OnProjectileCollide); } - private void OnProjectileCollide(EntityUid uid, GatheringProjectileComponent component, ref StartCollideEvent args) + private void OnProjectileCollide(Entity gathering, ref StartCollideEvent args) { if (!args.OtherFixture.Hard || args.OurFixtureId != SharedProjectileSystem.ProjectileFixture || - component.Amount <= 0 || + gathering.Comp.Amount <= 0 || !TryComp(args.OtherEntity, out var gatherable)) { return; } - Gather(args.OtherEntity, uid, gatherable); - component.Amount--; + Gather(args.OtherEntity, gathering, gatherable); + gathering.Comp.Amount--; - if (component.Amount <= 0) - QueueDel(uid); + if (gathering.Comp.Amount <= 0) + QueueDel(gathering); } } diff --git a/Content.Server/Gatherable/GatherableSystem.cs b/Content.Server/Gatherable/GatherableSystem.cs index 7fbbf7f4f64..decb1e6500f 100644 --- a/Content.Server/Gatherable/GatherableSystem.cs +++ b/Content.Server/Gatherable/GatherableSystem.cs @@ -1,10 +1,10 @@ using Content.Server.Destructible; using Content.Server.Gatherable.Components; -using Content.Shared.EntityList; using Content.Shared.Interaction; using Content.Shared.Tag; using Content.Shared.Weapons.Melee.Events; -using Robust.Shared.Audio; +using Content.Shared.Whitelist; +using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -13,11 +13,13 @@ namespace Content.Server.Gatherable; public sealed partial class GatherableSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly DestructibleSystem _destructible = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -28,20 +30,24 @@ public override void Initialize() InitializeProjectile(); } - private void OnAttacked(EntityUid uid, GatherableComponent component, AttackedEvent args) + private void OnAttacked(Entity gatherable, ref AttackedEvent args) { - if (component.ToolWhitelist?.IsValid(args.Used, EntityManager) != true) + if (_whitelistSystem.IsWhitelistFailOrNull(gatherable.Comp.ToolWhitelist, args.Used)) return; - Gather(uid, args.User, component); + Gather(gatherable, args.User); } - private void OnActivate(EntityUid uid, GatherableComponent component, ActivateInWorldEvent args) + private void OnActivate(Entity gatherable, ref ActivateInWorldEvent args) { - if (component.ToolWhitelist?.IsValid(args.User, EntityManager) != true) + if (gatherable.Comp.ToolWhitelist?.IsValid(args.User, EntityManager) != true) return; - Gather(uid, args.User, component); + if (_whitelistSystem.IsWhitelistFailOrNull(gatherable.Comp.ToolWhitelist, args.User)) + return; + + Gather(gatherable, args.User); + args.Handled = true; } public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, GatherableComponent? component = null) @@ -58,25 +64,22 @@ public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, Gatherable _destructible.DestroyEntity(gatheredUid); // Spawn the loot! - if (component.MappedLoot == null) + if (component.Loot == null) return; var pos = Transform(gatheredUid).MapPosition; - foreach (var (tag, table) in component.MappedLoot) + foreach (var (tag, table) in component.Loot) { if (tag != "All") { if (gatherer != null && !_tagSystem.HasTag(gatherer.Value, tag)) continue; } - var getLoot = _prototypeManager.Index(table); + var getLoot = _proto.Index(table); var spawnLoot = getLoot.GetSpawns(_random); - var spawnPos = pos.Offset(_random.NextVector2(0.3f)); + var spawnPos = pos.Offset(_random.NextVector2(component.GatherOffset)); Spawn(spawnLoot[0], spawnPos); } } } - - - diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index 8650c1343a6..5075e037eac 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -18,6 +18,7 @@ using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; +using Content.Shared.Whitelist; using Microsoft.Extensions.ObjectPool; using Robust.Server.Containers; using Robust.Shared.Prototypes; @@ -45,6 +46,7 @@ public sealed class NPCUtilitySystem : EntitySystem [Dependency] private readonly SolutionContainerSystem _solutions = default!; [Dependency] private readonly WeldableSystem _weldable = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private EntityQuery _puddleQuery; private EntityQuery _xformQuery; @@ -248,7 +250,7 @@ private float GetScore(NPCBlackboard blackboard, EntityUid targetUid, UtilityCon return 0f; } - if (heldGun.Whitelist?.IsValid(targetUid, EntityManager) != true) + if (_whitelistSystem.IsWhitelistFailOrNull(heldGun.Whitelist, targetUid)) { return 0f; } diff --git a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs index 5acedf28abe..8bfb4aec8cc 100644 --- a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs +++ b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs @@ -44,6 +44,7 @@ using Content.Shared.Popups; using Content.Shared.Throwing; using Content.Shared.UserInterface; +using Content.Shared.Whitelist; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; @@ -78,6 +79,7 @@ public sealed partial class DeepFryerSystem : SharedDeepfryerSystem [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly AmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private static readonly string CookingDamageType = "Heat"; private static readonly float CookingDamageAmount = 10.0f; @@ -316,7 +318,7 @@ private void DeepFry(EntityUid uid, DeepFryerComponent component, EntityUid item // just in case the attempt is relevant to any system in the future. // // The blacklist overrides all. - if (component.Blacklist != null && component.Blacklist.IsValid(item, EntityManager)) + if (component.Blacklist != null && _whitelistSystem.IsWhitelistPass(component.Blacklist, item)) { _popupSystem.PopupEntity( Loc.GetString("deep-fryer-blacklist-item-failed", @@ -367,7 +369,7 @@ private void DeepFry(EntityUid uid, DeepFryerComponent component, EntityUid item oilToUse ); - if (component.Whitelist != null && component.Whitelist.IsValid(item, EntityManager) || + if (component.Whitelist != null && _whitelistSystem.IsWhitelistPass(component.Whitelist, item) || beingEvent.TurnIntoFood) MakeEdible(uid, component, item, solutionQuantity); else diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index 1ff13a24f2c..038295eac11 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -10,6 +10,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Storage.Components; using Robust.Server.Containers; +using Content.Shared.Whitelist; namespace Content.Server.Power.EntitySystems; @@ -20,6 +21,7 @@ internal sealed class ChargerSystem : EntitySystem [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly BatterySystem _battery = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -208,7 +210,7 @@ private void TransferPower(EntityUid uid, EntityUid targetEntity, ChargerCompone if (!receiverComponent.Powered) return; - if (component.Whitelist?.IsValid(targetEntity, EntityManager) == false) + if (_whitelistSystem.IsWhitelistFail(component.Whitelist, targetEntity)) return; if (!SearchForBattery(targetEntity, out var batteryUid, out var heldBattery)) diff --git a/Content.Server/Psionics/Invisibility/PsionicInvisibleContactsSystem.cs b/Content.Server/Psionics/Invisibility/PsionicInvisibleContactsSystem.cs index cec755e3260..c0c91fcc694 100644 --- a/Content.Server/Psionics/Invisibility/PsionicInvisibleContactsSystem.cs +++ b/Content.Server/Psionics/Invisibility/PsionicInvisibleContactsSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Stealth; using Content.Shared.Stealth.Components; +using Content.Shared.Whitelist; using Robust.Shared.Physics.Events; using Robust.Shared.Physics.Systems; using Robust.Shared.Timing; @@ -13,6 +14,7 @@ public sealed class PsionicInvisibleContactsSystem : EntitySystem { [Dependency] private readonly SharedStealthSystem _stealth = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -28,7 +30,7 @@ private void OnEntityEnter(EntityUid uid, PsionicInvisibleContactsComponent comp var otherUid = args.OtherEntity; var ourEntity = args.OurEntity; - if (!component.Whitelist.IsValid(otherUid)) + if (_whitelistSystem.IsWhitelistFail(component.Whitelist, otherUid)) return; // This will go up twice per web hit, since webs also have a flammable fixture. @@ -48,7 +50,7 @@ private void OnEntityExit(EntityUid uid, PsionicInvisibleContactsComponent compo var otherUid = args.OtherEntity; var ourEntity = args.OurEntity; - if (!component.Whitelist.IsValid(otherUid)) + if (_whitelistSystem.IsWhitelistFail(component.Whitelist, otherUid)) return; if (!HasComp(ourEntity)) diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs index 5d7c7514b84..75f81038945 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs @@ -28,6 +28,7 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Utility; using Robust.Shared.Map.Components; +using Content.Shared.Whitelist; namespace Content.Server.Revenant.EntitySystems; @@ -40,6 +41,7 @@ public sealed partial class RevenantSystem [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; [Dependency] private readonly GhostSystem _ghost = default!; [Dependency] private readonly TileSystem _tile = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private void InitializeAbilities() { @@ -326,10 +328,8 @@ private void OnMalfunctionAction(EntityUid uid, RevenantComponent component, Rev foreach (var ent in _lookup.GetEntitiesInRange(uid, component.MalfunctionRadius)) { - if (component.MalfunctionWhitelist?.IsValid(ent, EntityManager) == false) - continue; - - if (component.MalfunctionBlacklist?.IsValid(ent, EntityManager) == true) + if (_whitelistSystem.IsWhitelistFail(component.MalfunctionWhitelist, ent) || + _whitelistSystem.IsBlacklistPass(component.MalfunctionBlacklist, ent)) continue; _emag.DoEmagEffect(uid, ent); //it does not emag itself. adorable. diff --git a/Content.Server/Shipyard/MapDeleterShuttleComponent.cs b/Content.Server/Shipyard/MapDeleterShuttleComponent.cs new file mode 100644 index 00000000000..a95603216d2 --- /dev/null +++ b/Content.Server/Shipyard/MapDeleterShuttleComponent.cs @@ -0,0 +1,17 @@ +namespace Content.Server.Shipyard; + +/// +/// When added to a shuttle, once it FTLs the previous map is deleted. +/// After that the component is removed to prevent insane abuse. +/// +/// +/// Could be upstreamed at some point, loneop shuttle could use it. +/// +[RegisterComponent, Access(typeof(MapDeleterShuttleSystem))] +public sealed partial class MapDeleterShuttleComponent : Component +{ + /// + /// Only set by the system to prevent someone in VV deleting maps by mistake or otherwise. + /// + public bool Enabled; +} diff --git a/Content.Server/Shipyard/MapDeleterShuttleSystem.cs b/Content.Server/Shipyard/MapDeleterShuttleSystem.cs new file mode 100644 index 00000000000..88a2830c39e --- /dev/null +++ b/Content.Server/Shipyard/MapDeleterShuttleSystem.cs @@ -0,0 +1,25 @@ +using Content.Server.Shuttles.Events; + +namespace Content.Server.Shipyard; + +public sealed class MapDeleterShuttleSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnFTLStarted); + } + + private void OnFTLStarted(Entity ent, ref FTLStartedEvent args) + { + if (ent.Comp.Enabled) + Del(args.FromMapUid); + RemComp(ent); // prevent the shuttle becoming a WMD + } + + public void Enable(EntityUid shuttle) + { + EnsureComp(shuttle).Enabled = true; + } +} diff --git a/Content.Server/Shipyard/ShipyardConsoleSystem.cs b/Content.Server/Shipyard/ShipyardConsoleSystem.cs new file mode 100644 index 00000000000..63088f16b70 --- /dev/null +++ b/Content.Server/Shipyard/ShipyardConsoleSystem.cs @@ -0,0 +1,101 @@ +using Content.Server.Cargo.Components; +using Content.Server.Cargo.Systems; +using Content.Server.Radio.EntitySystems; +using Content.Server.Station.Systems; +using Content.Shared.Shipyard; +using Content.Shared.Shipyard.Prototypes; +using Content.Shared.Whitelist; +using Robust.Shared.Random; + +namespace Content.Server.Shipyard; + +public sealed class ShipyardConsoleSystem : SharedShipyardConsoleSystem +{ + [Dependency] private readonly CargoSystem _cargo = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly MetaDataSystem _meta = default!; + [Dependency] private readonly RadioSystem _radio = default!; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + [Dependency] private readonly ShipyardSystem _shipyard = default!; + [Dependency] private readonly StationSystem _station = default!; + + public override void Initialize() + { + base.Initialize(); + + Subs.BuiEvents(ShipyardConsoleUiKey.Key, subs => + { + subs.Event(OnOpened); + }); + } + + protected override void TryPurchase(Entity ent, EntityUid user, VesselPrototype vessel) + { + // client prevents asking for this so dont need feedback for validation + if (_whitelist.IsWhitelistFail(vessel.Whitelist, ent)) + return; + + if (GetBankAccount(ent) is not {} bank) + return; + + if (bank.Comp.Balance < vessel.Price) + { + var popup = Loc.GetString("cargo-console-insufficient-funds", ("cost", vessel.Price)); + Popup.PopupEntity(popup, ent, user); + Audio.PlayPvs(ent.Comp.DenySound, ent); + return; + } + + if (_shipyard.TrySendShuttle(bank.Owner, vessel.Path.ToString()) is not {} shuttle) + { + var popup = Loc.GetString("shipyard-console-error"); + Popup.PopupEntity(popup, ent, user); + Audio.PlayPvs(ent.Comp.DenySound, ent); + return; + } + + _meta.SetEntityName(shuttle, $"{vessel.Name} {_random.Next(1000):000}"); + + _cargo.UpdateBankAccount(bank, bank.Comp, -vessel.Price); + + var message = Loc.GetString("shipyard-console-docking", ("vessel", vessel.Name.ToString())); + _radio.SendRadioMessage(ent, message, ent.Comp.Channel, ent); + Audio.PlayPvs(ent.Comp.ConfirmSound, ent); + + // TODO: make the ui updating more robust, make pr upstream to have UpdateBankAccount support things that arent ordering consoles + // TODO: then have shipyard have that component and update the ui when it changes balance + UpdateUI(ent, bank.Comp.Balance); + } + + private void OnOpened(Entity ent, ref BoundUIOpenedEvent args) + { + UpdateUI(ent); + } + + private void UpdateUI(EntityUid uid) + { + if (GetBankAccount(uid) is {} bank) + UpdateUI(uid, bank.Comp.Balance); + } + + private void UpdateUI(EntityUid uid, int balance) + { + if (!_shipyard.Enabled) + return; + + var state = new ShipyardConsoleState(balance); + _ui.SetUiState(uid, ShipyardConsoleUiKey.Key, state); + } + + private Entity? GetBankAccount(EntityUid console) + { + if (_station.GetOwningStation(console) is not {} station) + return null; + + if (!TryComp(station, out var bank)) + return null; + + return (station, bank); + } +} diff --git a/Content.Server/Shipyard/ShipyardSystem.cs b/Content.Server/Shipyard/ShipyardSystem.cs new file mode 100644 index 00000000000..d627cfd546b --- /dev/null +++ b/Content.Server/Shipyard/ShipyardSystem.cs @@ -0,0 +1,96 @@ +using Content.Server.Shuttles.Components; +using Content.Server.Shuttles.Systems; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Shared.DeltaV.CCVars; +using Content.Shared.Tag; +using Robust.Server.GameObjects; +using Robust.Shared.Configuration; + +namespace Content.Server.Shipyard; + +/// +/// Handles spawning and ftling ships. +/// +public sealed class ShipyardSystem : EntitySystem +{ + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly MapDeleterShuttleSystem _mapDeleterShuttle = default!; + [Dependency] private readonly MapSystem _map = default!; + [Dependency] private readonly MapLoaderSystem _mapLoader = default!; + [Dependency] private readonly ShuttleSystem _shuttle = default!; + [Dependency] private readonly StationSystem _station = default!; + + [ValidatePrototypeId] + public string DockTag = "DockShipyard"; + + public bool Enabled; + + public override void Initialize() + { + base.Initialize(); + + Subs.CVar(_config, DCCVars.Shipyard, value => Enabled = value, true); + } + + /// + /// Creates a ship from its yaml path in the shipyard. + /// + public Entity? TryCreateShuttle(string path) + { + if (!Enabled) + return null; + + var map = _map.CreateMap(out var mapId); + _map.SetPaused(map, false); + + if (!_mapLoader.TryLoad(mapId, path, out var grids)) + { + Log.Error($"Failed to load shuttle {path}"); + Del(map); + return null; + } + + // only 1 grid is supported, no tramshuttle + if (grids.Count != 1) + { + var error = grids.Count < 1 ? "less" : "more"; + Log.Error($"Shuttle {path} had {error} than 1 grid, which is not supported."); + Del(map); + return null; + } + + var uid = grids[0]; + if (!TryComp(uid, out var comp)) + { + Log.Error($"Shuttle {path}'s grid was missing ShuttleComponent"); + Del(map); + return null; + } + + _mapDeleterShuttle.Enable(uid); + return (uid, comp); + } + + /// + /// Adds a ship to the shipyard and attempts to ftl-dock it to the given station. + /// + public Entity? TrySendShuttle(Entity station, string path) + { + if (!Resolve(station, ref station.Comp)) + return null; + + if (_station.GetLargestGrid(station.Comp) is not {} grid) + { + Log.Error($"Station {ToPrettyString(station):station} had no largest grid to FTL to"); + return null; + } + + if (TryCreateShuttle(path) is not {} shuttle) + return null; + + Log.Info($"Shuttle {path} was spawned for {ToPrettyString(station):station}, FTLing to {grid}"); + _shuttle.FTLToDock(shuttle, shuttle.Comp, grid, priorityTag: DockTag); + return shuttle; + } +} diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs index 7ede2342428..623b6ba9787 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs @@ -272,7 +272,7 @@ public bool CanInsertModule(EntityUid uid, EntityUid module, BorgChassisComponen return false; } - if (component.ModuleWhitelist?.IsValid(module, EntityManager) == false) + if (_whitelistSystem.IsWhitelistFail(component.ModuleWhitelist, module)) { if (user != null) Popup.PopupEntity(Loc.GetString("borg-module-whitelist-deny"), uid, user.Value); diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 97adfd00eb4..b6e5adbe2d4 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -23,6 +23,7 @@ using Content.Shared.Silicons.Borgs; using Content.Shared.Silicons.Borgs.Components; using Content.Shared.Throwing; +using Content.Shared.Whitelist; using Content.Shared.Wires; using Robust.Server.GameObjects; using Robust.Shared.Containers; @@ -54,6 +55,8 @@ public sealed partial class BorgSystem : SharedBorgSystem [Dependency] private readonly ThrowingSystem _throwing = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + [ValidatePrototypeId] public const string BorgJobId = "Borg"; @@ -106,9 +109,8 @@ private void OnChassisInteractUsing(EntityUid uid, BorgChassisComponent componen return; } - if (component.BrainEntity == null && - brain != null && - component.BrainWhitelist?.IsValid(used) != false) + if (component.BrainEntity == null && brain != null && + _whitelistSystem.IsWhitelistPassOrNull(component.BrainWhitelist, used)) { if (_mind.TryGetMind(used, out _, out var mind) && mind.Session != null) { diff --git a/Content.Server/Storage/EntitySystems/PickRandomSystem.cs b/Content.Server/Storage/EntitySystems/PickRandomSystem.cs index dbbe1dd7785..f0e986e199b 100644 --- a/Content.Server/Storage/EntitySystems/PickRandomSystem.cs +++ b/Content.Server/Storage/EntitySystems/PickRandomSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Storage; using Content.Shared.Verbs; +using Content.Shared.Whitelist; using Robust.Shared.Containers; using Robust.Shared.Random; @@ -15,6 +16,7 @@ public sealed class PickRandomSystem : EntitySystem [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -30,7 +32,7 @@ private void OnGetAlternativeVerbs(EntityUid uid, PickRandomComponent comp, GetV var user = args.User; - var enabled = storage.Container.ContainedEntities.Any(item => comp.Whitelist?.IsValid(item, EntityManager) ?? true); + var enabled = storage.Container.ContainedEntities.Any(item => _whitelistSystem.IsWhitelistPassOrNull(comp.Whitelist, item)); // alt-click / alt-z to pick an item args.Verbs.Add(new AlternativeVerb @@ -48,7 +50,7 @@ private void OnGetAlternativeVerbs(EntityUid uid, PickRandomComponent comp, GetV private void TryPick(EntityUid uid, PickRandomComponent comp, StorageComponent storage, EntityUid user) { - var entities = storage.Container.ContainedEntities.Where(item => comp.Whitelist?.IsValid(item, EntityManager) ?? true).ToArray(); + var entities = storage.Container.ContainedEntities.Where(item => _whitelistSystem.IsWhitelistPassOrNull(comp.Whitelist, item)).ToArray(); if (!entities.Any()) return; diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs index 895bb0217b3..65aaabdf0e9 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs @@ -1,15 +1,16 @@ using System.Linq; using Content.Server.Xenoarchaeology.XenoArtifacts.Events; +using Content.Shared.Whitelist; using Content.Shared.Xenoarchaeology.XenoArtifacts; using JetBrains.Annotations; -using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Serialization.Manager; namespace Content.Server.Xenoarchaeology.XenoArtifacts; public sealed partial class ArtifactSystem { + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + private const int MaxEdgesPerNode = 4; private readonly HashSet _usedNodeIds = new(); @@ -81,7 +82,8 @@ private int GetValidNodeId() private string GetRandomTrigger(EntityUid artifact, ref ArtifactNode node) { var allTriggers = _prototype.EnumeratePrototypes() - .Where(x => (x.Whitelist?.IsValid(artifact, EntityManager) ?? true) && (!x.Blacklist?.IsValid(artifact, EntityManager) ?? true)).ToList(); + .Where(x => _whitelistSystem.IsWhitelistPassOrNull(x.Whitelist, artifact) && + _whitelistSystem.IsBlacklistFailOrNull(x.Blacklist, artifact)).ToList(); var validDepth = allTriggers.Select(x => x.TargetDepth).Distinct().ToList(); var weights = GetDepthWeights(validDepth, node.Depth); @@ -95,7 +97,8 @@ private string GetRandomTrigger(EntityUid artifact, ref ArtifactNode node) private string GetRandomEffect(EntityUid artifact, ref ArtifactNode node) { var allEffects = _prototype.EnumeratePrototypes() - .Where(x => (x.Whitelist?.IsValid(artifact, EntityManager) ?? true) && (!x.Blacklist?.IsValid(artifact, EntityManager) ?? true)).ToList(); + .Where(x => _whitelistSystem.IsWhitelistPassOrNull(x.Whitelist, artifact) && + _whitelistSystem.IsBlacklistFailOrNull(x.Blacklist, artifact)).ToList(); var validDepth = allEffects.Select(x => x.TargetDepth).Distinct().ToList(); var weights = GetDepthWeights(validDepth, node.Depth); diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index 4bdcdf07695..c8745d17d49 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Interaction.Events; using Content.Shared.Popups; using Content.Shared.Verbs; +using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Containers; @@ -34,6 +35,7 @@ public sealed class ItemSlotsSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private bool _defaultQuickSwap; @@ -262,8 +264,7 @@ public bool CanInsert(EntityUid uid, EntityUid usedUid, EntityUid? user, ItemSlo if (slot.ContainerSlot == null) return false; - if ((!slot.Whitelist?.IsValid(usedUid) ?? false) || - (slot.Blacklist?.IsValid(usedUid) ?? false)) + if (_whitelistSystem.IsWhitelistFail(slot.Whitelist, usedUid) || _whitelistSystem.IsBlacklistPass(slot.Blacklist, usedUid)) { if (popup.HasValue && slot.WhitelistFailPopup.HasValue) _popupSystem.PopupClient(Loc.GetString(slot.WhitelistFailPopup), uid, popup.Value); diff --git a/Content.Shared/Damage/Systems/DamageContactsSystem.cs b/Content.Shared/Damage/Systems/DamageContactsSystem.cs index aec3d0766ae..b08ef77fed5 100644 --- a/Content.Shared/Damage/Systems/DamageContactsSystem.cs +++ b/Content.Shared/Damage/Systems/DamageContactsSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Damage.Components; +using Content.Shared.Whitelist; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; using Robust.Shared.Physics.Systems; @@ -11,6 +12,7 @@ public sealed class DamageContactsSystem : EntitySystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -63,7 +65,7 @@ private void OnEntityEnter(EntityUid uid, DamageContactsComponent component, ref if (HasComp(otherUid)) return; - if (component.IgnoreWhitelist?.IsValid(otherUid) ?? false) + if (_whitelistSystem.IsWhitelistFail(component.IgnoreWhitelist, otherUid)) return; var damagedByContact = EnsureComp(otherUid); diff --git a/Content.Shared/DeltaV/CCVars/DCCVars.cs b/Content.Shared/DeltaV/CCVars/DCCVars.cs index 89a14275bef..58c4186ff61 100644 --- a/Content.Shared/DeltaV/CCVars/DCCVars.cs +++ b/Content.Shared/DeltaV/CCVars/DCCVars.cs @@ -15,4 +15,10 @@ public sealed class DCCVars ///
public static readonly CVarDef RoundEndPacifist = CVarDef.Create("game.round_end_pacifist", false, CVar.SERVERONLY); + + /// + /// Whether the Shipyard is enabled. + /// + public static readonly CVarDef Shipyard = + CVarDef.Create("shuttle.shipyard", true, CVar.SERVERONLY); } diff --git a/Content.Shared/Devour/SharedDevourSystem.cs b/Content.Shared/Devour/SharedDevourSystem.cs index a2b788f3f38..124daeffaaa 100644 --- a/Content.Shared/Devour/SharedDevourSystem.cs +++ b/Content.Shared/Devour/SharedDevourSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Popups; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -18,6 +19,7 @@ public abstract class SharedDevourSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -41,7 +43,7 @@ protected void OnInit(EntityUid uid, DevourerComponent component, MapInitEvent a ///
protected void OnDevourAction(EntityUid uid, DevourerComponent component, DevourActionEvent args) { - if (args.Handled || component.Whitelist?.IsValid(args.Target, EntityManager) != true) + if (args.Handled || _whitelistSystem.IsWhitelistFailOrNull(component.Whitelist, args.Target)) return; args.Handled = true; diff --git a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs index c39139f9a57..9fdb4a6a804 100644 --- a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs +++ b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Emag.Systems; using Content.Shared.Item; using Content.Shared.Throwing; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; @@ -25,6 +26,7 @@ public abstract class SharedDisposalUnitSystem : EntitySystem [Dependency] protected readonly IGameTiming GameTiming = default!; [Dependency] protected readonly MetaDataSystem Metadata = default!; [Dependency] protected readonly SharedJointSystem Joints = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; protected static TimeSpan ExitAttemptDelay = TimeSpan.FromSeconds(0.5); @@ -113,10 +115,8 @@ public virtual bool CanInsert(EntityUid uid, SharedDisposalUnitComponent compone if (!storable && !HasComp(entity)) return false; - if (component.Blacklist?.IsValid(entity, EntityManager) == true) - return false; - - if (component.Whitelist != null && component.Whitelist?.IsValid(entity, EntityManager) != true) + if (_whitelistSystem.IsBlacklistPass(component.Blacklist, entity) || + _whitelistSystem.IsWhitelistFail(component.Whitelist, entity)) return false; if (TryComp(entity, out var physics) && (physics.CanCollide) || storable) diff --git a/Content.Shared/Implants/SharedImplanterSystem.cs b/Content.Shared/Implants/SharedImplanterSystem.cs index d78522b56cc..44803e721c0 100644 --- a/Content.Shared/Implants/SharedImplanterSystem.cs +++ b/Content.Shared/Implants/SharedImplanterSystem.cs @@ -20,6 +20,7 @@ public abstract class SharedImplanterSystem : EntitySystem [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -105,8 +106,8 @@ public bool CanImplant( protected bool CheckTarget(EntityUid target, EntityWhitelist? whitelist, EntityWhitelist? blacklist) { - return whitelist?.IsValid(target, EntityManager) != false && - blacklist?.IsValid(target, EntityManager) != true; + return _whitelistSystem.IsWhitelistPassOrNull(whitelist, target) && + _whitelistSystem.IsBlacklistFailOrNull(blacklist, target); } //Draw the implant out of the target diff --git a/Content.Shared/Interaction/SmartEquipSystem.cs b/Content.Shared/Interaction/SmartEquipSystem.cs index fb2bc3c4609..bba294db28d 100644 --- a/Content.Shared/Interaction/SmartEquipSystem.cs +++ b/Content.Shared/Interaction/SmartEquipSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.ActionBlocker; +using Content.Shared.ActionBlocker; using Content.Shared.Containers.ItemSlots; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; @@ -7,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; +using Content.Shared.Whitelist; using Robust.Shared.Containers; using Robust.Shared.Input.Binding; using Robust.Shared.Player; @@ -25,6 +26,7 @@ public sealed class SmartEquipSystem : EntitySystem [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; /// public override void Initialize() @@ -182,7 +184,7 @@ private void HandleSmartEquip(ICommonSession? session, string equipmentSlot) foreach (var slot in slots.Slots.Values) { if (!slot.HasItem - && (slot.Whitelist?.IsValid(handItem.Value, EntityManager) ?? true) + && _whitelistSystem.IsWhitelistPassOrNull(slot.Whitelist, handItem.Value) && slot.Priority > (toInsertTo?.Priority ?? int.MinValue)) { toInsertTo = slot; diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs index b1de77d971a..af815bdb2b7 100644 --- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs +++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Interaction; using Content.Shared.Interaction.Components; using Content.Shared.Stacks; +using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -17,6 +18,7 @@ public abstract class SharedMaterialStorageSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; /// /// Default volume for a sheet if the material's entity prototype has no material composition. @@ -121,7 +123,7 @@ public bool CanChangeMaterialAmount(EntityUid uid, string materialId, int volume if (!CanTakeVolume(uid, volume, component)) return false; - if (component.MaterialWhiteList != null && !component.MaterialWhiteList.Contains(materialId)) + if (component.MaterialWhiteList == null ? false : component.MaterialWhiteList.Contains(materialId)) return false; var amount = component.Storage.GetValueOrDefault(materialId); @@ -239,7 +241,7 @@ public virtual bool TryInsertMaterialEntity(EntityUid user, if (!Resolve(toInsert, ref material, ref composition, false)) return false; - if (storage.Whitelist?.IsValid(toInsert) == false) + if (_whitelistSystem.IsWhitelistFail(storage.Whitelist, toInsert)) return false; if (HasComp(toInsert)) diff --git a/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs index c1abfc526f5..0e96132b0be 100644 --- a/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs +++ b/Content.Shared/Polymorph/Systems/SharedChameleonProjectorSystem.cs @@ -6,6 +6,7 @@ using Robust.Shared.Serialization.Manager; using Robust.Shared.Prototypes; using System.Diagnostics.CodeAnalysis; +using Content.Shared.Whitelist; namespace Content.Shared.Polymorph.Systems; @@ -18,6 +19,8 @@ public abstract class SharedChameleonProjectorSystem : EntitySystem [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly ISerializationManager _serMan = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -49,8 +52,8 @@ private void OnInteract(Entity ent, ref AfterIntera /// public bool IsInvalid(ChameleonProjectorComponent comp, EntityUid target) { - return (comp.Whitelist?.IsValid(target, EntityManager) == false) - || (comp.Blacklist?.IsValid(target, EntityManager) == true); + return _whitelistSystem.IsWhitelistFail(comp.Whitelist, target) + || _whitelistSystem.IsBlacklistPass(comp.Blacklist, target); } /// diff --git a/Content.Shared/Salvage/Fulton/SharedFultonSystem.cs b/Content.Shared/Salvage/Fulton/SharedFultonSystem.cs index 0599482bbef..1ada22876b6 100644 --- a/Content.Shared/Salvage/Fulton/SharedFultonSystem.cs +++ b/Content.Shared/Salvage/Fulton/SharedFultonSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Popups; using Content.Shared.Stacks; using Content.Shared.Verbs; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -30,6 +31,7 @@ public abstract partial class SharedFultonSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedStackSystem _stack = default!; [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; [ValidatePrototypeId] public const string EffectProto = "FultonEffect"; protected static readonly Vector2 EffectOffset = Vector2.Zero; @@ -177,7 +179,7 @@ protected bool CanApplyFulton(EntityUid targetUid, FultonComponent component) if (!CanFulton(targetUid)) return false; - if (component.Whitelist?.IsValid(targetUid, EntityManager) != true) + if (_whitelistSystem.IsWhitelistFailOrNull(component.Whitelist, targetUid)) return false; return true; diff --git a/Content.Shared/Shipyard/Prototypes/VesselCategoryPrototype.cs b/Content.Shared/Shipyard/Prototypes/VesselCategoryPrototype.cs new file mode 100644 index 00000000000..c9e55c4643d --- /dev/null +++ b/Content.Shared/Shipyard/Prototypes/VesselCategoryPrototype.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Shipyard.Prototypes; + +/// +/// Like TagPrototype but for vessel categories. +/// Prevents making typos being silently ignored by the linter. +/// +[Prototype("vesselCategory")] +public sealed class VesselCategoryPrototype : IPrototype +{ + [ViewVariables, IdDataField] + public string ID { get; } = default!; +} diff --git a/Content.Shared/Shipyard/Prototypes/VesselPrototype.cs b/Content.Shared/Shipyard/Prototypes/VesselPrototype.cs new file mode 100644 index 00000000000..5bfe8cbdeb0 --- /dev/null +++ b/Content.Shared/Shipyard/Prototypes/VesselPrototype.cs @@ -0,0 +1,48 @@ +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.Shipyard.Prototypes; + +[Prototype("vessel")] +public sealed class VesselPrototype : IPrototype +{ + [ViewVariables, IdDataField] + public string ID { get; } = default!; + + /// + /// Already localized name of the vessel. + /// + [DataField(required: true)] + public string Name = string.Empty; + + /// + /// Already localized short description of the vessel. + /// + [DataField(required: true)] + public string Description = string.Empty; + + /// + /// How much the vessel costs to purchase. + /// + [DataField(required: true)] + public int Price; + + /// + /// Path to the shuttle yml to load, e.g. `/Maps/Shuttles/yourshittle.yml` + /// + [DataField(required: true)] + public ResPath Path = default!; + + /// + /// Categories that can be filtered in the UI. + /// + [DataField] + public List> Categories = new(); + + /// + /// If the console does not match this whitelist, the vessel is hidden and can't be bought. + /// + [DataField] + public EntityWhitelist? Whitelist; +} diff --git a/Content.Shared/Shipyard/SharedShipyardConsoleSystem.cs b/Content.Shared/Shipyard/SharedShipyardConsoleSystem.cs new file mode 100644 index 00000000000..ed04fb4944a --- /dev/null +++ b/Content.Shared/Shipyard/SharedShipyardConsoleSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared.Access.Systems; +using Content.Shared.Popups; +using Content.Shared.Shipyard.Prototypes; +using Content.Shared.Whitelist; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Shipyard; + +/// +/// Handles shipyard console interaction. +/// ShipyardSystem does the heavy lifting serverside. +/// +public abstract class SharedShipyardConsoleSystem : EntitySystem +{ + [Dependency] protected readonly AccessReaderSystem _access = default!; + [Dependency] protected readonly IPrototypeManager _proto = default!; + [Dependency] protected readonly SharedAudioSystem Audio = default!; + [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + Subs.BuiEvents(ShipyardConsoleUiKey.Key, subs => + { + subs.Event(OnPurchase); + }); + } + + private void OnPurchase(Entity ent, ref ShipyardConsolePurchaseMessage msg) + { + var user = msg.Actor; + if (!_access.IsAllowed(user, ent.Owner)) + { + Popup.PopupClient(Loc.GetString("comms-console-permission-denied"), ent, user); + Audio.PlayPredicted(ent.Comp.DenySound, ent, user); + return; + } + + if (!_proto.TryIndex(msg.Vessel, out var vessel) || _whitelistSystem.IsWhitelistFail(vessel.Whitelist, ent)) + return; + + TryPurchase(ent, user, vessel); + } + + protected virtual void TryPurchase(Entity ent, EntityUid user, VesselPrototype vessel) + { + } +} diff --git a/Content.Shared/Shipyard/ShipyardConsoleComponent.cs b/Content.Shared/Shipyard/ShipyardConsoleComponent.cs new file mode 100644 index 00000000000..c3887e5709a --- /dev/null +++ b/Content.Shared/Shipyard/ShipyardConsoleComponent.cs @@ -0,0 +1,31 @@ +using Content.Shared.Radio; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Shipyard; + +/// +/// Component for the shipyard console. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedShipyardConsoleSystem))] +public sealed partial class ShipyardConsoleComponent : Component +{ + /// + /// Sound played when the ship can't be bought for any reason. + /// + [DataField] + public SoundSpecifier DenySound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); + + /// + /// Sound played when a ship is purchased. + /// + [DataField] + public SoundSpecifier ConfirmSound = new SoundPathSpecifier("/Audio/Effects/Cargo/ping.ogg"); + + /// + /// Radio channel to send the purchase announcement to. + /// + [DataField] + public ProtoId Channel = "Command"; +} diff --git a/Content.Shared/Shipyard/ShipyardUi.cs b/Content.Shared/Shipyard/ShipyardUi.cs new file mode 100644 index 00000000000..fbe085fb5dd --- /dev/null +++ b/Content.Shared/Shipyard/ShipyardUi.cs @@ -0,0 +1,36 @@ +using Content.Shared.Shipyard.Prototypes; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Shipyard; + +[Serializable, NetSerializable] +public enum ShipyardConsoleUiKey : byte +{ + Key +} + +[Serializable, NetSerializable] +public sealed class ShipyardConsoleState : BoundUserInterfaceState +{ + public readonly int Balance; + + public ShipyardConsoleState(int balance) + { + Balance = balance; + } +} + +/// +/// Ask the server to purchase a vessel. +/// +[Serializable, NetSerializable] +public sealed class ShipyardConsolePurchaseMessage : BoundUserInterfaceMessage +{ + public readonly ProtoId Vessel; + + public ShipyardConsolePurchaseMessage(string vessel) + { + Vessel = vessel; + } +} diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs index d859d9f4859..a382e943ff9 100644 --- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs +++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Shuttles.BUIStates; using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.UI.MapObjects; +using Content.Shared.Whitelist; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Physics.Collision.Shapes; @@ -15,6 +16,7 @@ public abstract partial class SharedShuttleSystem : EntitySystem [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] protected readonly SharedMapSystem Maps = default!; [Dependency] protected readonly SharedTransformSystem XformSystem = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public const float FTLRange = 512f; public const float FTLBufferRange = 8f; @@ -83,7 +85,7 @@ public bool CanFTLTo(EntityUid shuttleUid, MapId targetMap, EntityUid consoleUid if (HasComp(mapUid)) return false; - return destination.Whitelist?.IsValid(shuttleUid, EntityManager) != false; + return _whitelistSystem.IsWhitelistPassOrNull(destination.Whitelist, shuttleUid); } /// diff --git a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs index 21861f57dab..bb1efba8692 100644 --- a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs +++ b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Storage.Components; using Content.Shared.Inventory; +using Content.Shared.Whitelist; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Timing; @@ -16,6 +17,8 @@ public sealed class MagnetPickupSystem : EntitySystem [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedStorageSystem _storage = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + private static readonly TimeSpan ScanDelay = TimeSpan.FromSeconds(1); @@ -63,7 +66,7 @@ public override void Update(float frameTime) foreach (var near in _lookup.GetEntitiesInRange(uid, comp.Range, LookupFlags.Dynamic | LookupFlags.Sundries)) { - if (storage.Whitelist?.IsValid(near, EntityManager) == false) + if (_whitelistSystem.IsWhitelistFail(storage.Whitelist, near)) continue; if (!_physicsQuery.TryGetComponent(near, out var physics) || physics.BodyStatus != BodyStatus.OnGround) diff --git a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs index 636c6038348..620793f86bd 100644 --- a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs @@ -15,6 +15,7 @@ using Content.Shared.Tools.Systems; using Content.Shared.Verbs; using Content.Shared.Wall; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -45,6 +46,7 @@ public abstract class SharedEntityStorageSystem : EntitySystem [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; [Dependency] private readonly WeldableSystem _weldable = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public const string ContainerName = "entity_storage"; @@ -432,7 +434,7 @@ private bool CanFit(EntityUid toInsert, EntityUid container, SharedEntityStorage var targetIsMob = HasComp(toInsert); var storageIsItem = HasComp(container); - var allowedToEat = component.Whitelist?.IsValid(toInsert) ?? HasComp(toInsert); + var allowedToEat = component.Whitelist == null ? HasComp(toInsert) : _whitelistSystem.IsValid(component.Whitelist, toInsert); // BEFORE REPLACING THIS WITH, I.E. A PROPERTY: // Make absolutely 100% sure you have worked out how to stop people ending up in backpacks. diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 771eaf023fd..6bd66a0ff4e 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -24,6 +24,7 @@ using Content.Shared.Storage.Components; using Content.Shared.Timing; using Content.Shared.Verbs; +using Content.Shared.Whitelist; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.GameStates; @@ -58,6 +59,7 @@ public abstract class SharedStorageSystem : EntitySystem [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; [Dependency] protected readonly UseDelaySystem UseDelay = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private EntityQuery _itemQuery; private EntityQuery _stackQuery; @@ -864,13 +866,8 @@ public bool CanInsert( return false; } - if (storageComp.Whitelist?.IsValid(insertEnt, EntityManager) == false) - { - reason = "comp-storage-invalid-container"; - return false; - } - - if (storageComp.Blacklist?.IsValid(insertEnt, EntityManager) == true) + if (_whitelistSystem.IsWhitelistFail(storageComp.Whitelist, insertEnt) || + _whitelistSystem.IsBlacklistPass(storageComp.Blacklist, insertEnt)) { reason = "comp-storage-invalid-container"; return false; diff --git a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs index d1814020e6e..eab638a9fc2 100644 --- a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs +++ b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Damage; using Content.Shared.Projectiles; using Content.Shared.Weapons.Melee.Events; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; @@ -15,6 +16,7 @@ public abstract class SharedDamageMarkerSystem : EntitySystem [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -58,7 +60,7 @@ private void OnMarkerCollide(EntityUid uid, DamageMarkerOnCollideComponent compo if (!args.OtherFixture.Hard || args.OurFixtureId != SharedProjectileSystem.ProjectileFixture || component.Amount <= 0 || - component.Whitelist?.IsValid(args.OtherEntity, EntityManager) == false || + _whitelistSystem.IsWhitelistFail(component.Whitelist, args.OtherEntity) || !TryComp(uid, out var projectile) || projectile.Weapon == null) { diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs index 91aad895821..88acd81d5bd 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs @@ -41,7 +41,10 @@ private void OnBallisticUse(EntityUid uid, BallisticAmmoProviderComponent compon private void OnBallisticInteractUsing(EntityUid uid, BallisticAmmoProviderComponent component, InteractUsingEvent args) { - if (args.Handled || component.Whitelist?.IsValid(args.Used, EntityManager) != true) + if (args.Handled) + return; + + if (_whitelistSystem.IsWhitelistFailOrNull(component.Whitelist, args.Used)) return; if (GetBallisticShots(component) >= component.Capacity) diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs index b8b00799c1b..14aaff5bf70 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs @@ -89,7 +89,7 @@ private void OnRevolverHandleState(EntityUid uid, RevolverAmmoProviderComponent public bool TryRevolverInsert(EntityUid revolverUid, RevolverAmmoProviderComponent component, EntityUid uid, EntityUid? user) { - if (component.Whitelist?.IsValid(uid, EntityManager) == false) + if (_whitelistSystem.IsWhitelistFail(component.Whitelist, uid)) return false; // If it's a speedloader try to get ammo from it. diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index af295cc83ff..2fbb6785e29 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -22,6 +22,7 @@ using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; +using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; @@ -64,6 +65,7 @@ public abstract partial class SharedGunSystem : EntitySystem [Dependency] protected readonly TagSystem TagSystem = default!; [Dependency] protected readonly ThrowingSystem ThrowingSystem = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; private const float InteractNextFire = 0.3f; private const double SafetyNextFire = 0.5; diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index d73646b7e99..f311946cf98 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -60,6 +60,90 @@ public bool IsValid(EntityWhitelist list, EntityUid uid) return list.RequireAll; } + /// The following are a list of "helper functions" that are basically the same as each other + /// to help make code that uses EntityWhitelist a bit more readable because at the moment + /// it is quite clunky having to write out component.Whitelist == null ? true : _whitelist.IsValid(component.Whitelist, uid) + /// several times in a row and makes comparisons easier to read + + /// + /// Helper function to determine if Whitelist is not null and entity is on list + /// + public bool IsWhitelistPass(EntityWhitelist? whitelist, EntityUid uid) + { + if (whitelist == null) + return false; + + return IsValid(whitelist, uid); + } + + /// + /// Helper function to determine if Whitelist is not null and entity is not on the list + /// + public bool IsWhitelistFail(EntityWhitelist? whitelist, EntityUid uid) + { + if (whitelist == null) + return false; + + return !IsValid(whitelist, uid); + } + + /// + /// Helper function to determine if Whitelist is either null or the entity is on the list + /// + public bool IsWhitelistPassOrNull(EntityWhitelist? whitelist, EntityUid uid) + { + if (whitelist == null) + return true; + + return IsValid(whitelist, uid); + } + + /// + /// Helper function to determine if Whitelist is either null or the entity is not on the list + /// + public bool IsWhitelistFailOrNull(EntityWhitelist? whitelist, EntityUid uid) + { + if (whitelist == null) + return true; + + return !IsValid(whitelist, uid); + } + + /// + /// Helper function to determine if Blacklist is not null and entity is on list + /// Duplicate of equivalent Whitelist function + /// + public bool IsBlacklistPass(EntityWhitelist? blacklist, EntityUid uid) + { + return IsWhitelistPass(blacklist, uid); + } + + /// + /// Helper function to determine if Blacklist is not null and entity is not on the list + /// Duplicate of equivalent Whitelist function + /// + public bool IsBlacklistFail(EntityWhitelist? blacklist, EntityUid uid) + { + return IsWhitelistFail(blacklist, uid); + } + + /// + /// Helper function to determine if Blacklist is either null or the entity is on the list + /// Duplicate of equivalent Whitelist function + /// + public bool IsBlacklistPassOrNull(EntityWhitelist? blacklist, EntityUid uid) + { + return IsWhitelistPassOrNull(blacklist, uid); + } + + /// + /// Helper function to determine if Blacklist is either null or the entity is not on the list + /// Duplicate of equivalent Whitelist function + /// + public bool IsBlacklistFailOrNull(EntityWhitelist? blacklist, EntityUid uid) + { + return IsWhitelistFailOrNull(blacklist, uid); + } private void EnsureRegistrations(EntityWhitelist list) { diff --git a/Resources/Locale/en-US/deltav/shipyard/shipyard-console.ftl b/Resources/Locale/en-US/deltav/shipyard/shipyard-console.ftl new file mode 100644 index 00000000000..3ee9f4471a3 --- /dev/null +++ b/Resources/Locale/en-US/deltav/shipyard/shipyard-console.ftl @@ -0,0 +1,4 @@ +shipyard-console-menu-title = Shipyard Console + +shipyard-console-error = Temporary embargo is in place, try later? +shipyard-console-docking = {$vessel} is en route to the station, eta 60 seconds. diff --git a/Resources/Maps/Shuttles/DeltaV/barge.yml b/Resources/Maps/Shuttles/DeltaV/barge.yml new file mode 100644 index 00000000000..e64f9315ee1 --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/barge.yml @@ -0,0 +1,4367 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 24: FloorDark + 25: FloorDarkDiagonal + 29: FloorDarkMono + 71: FloorSteel + 77: FloorSteelMono + 81: FloorTechMaint + 94: FloorWood + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAARwAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAGQAAAAAAGQAAAAAAXgAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAXgAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAXgAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAXgAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGQAAAAAAGQAAAAAAGQAAAAAAXgAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAATQAAAAAAYQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: UQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAATQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAATQAAAAAATQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAATQAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAATQAAAAAATQAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAATQAAAAAATQAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAHQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: YQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAHQAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-2: + ind: -1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAA + version: 6 + 0,-2: + ind: 0,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 54: 4,3 + 55: 4,2 + 116: 4,0 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 98: 2,2 + 99: 2,1 + 100: 2,0 + 101: 3,0 + 102: 3,1 + 103: 3,2 + 104: -3,3 + 105: -3,2 + 106: -4,2 + 107: -4,3 + - node: + color: '#FFFFFFFF' + id: BotRight + decals: + 108: 3,-4 + 109: 3,-5 + 110: 3,-6 + 111: 3,-7 + 112: 4,-7 + 113: 4,-6 + 114: 4,-5 + 115: 4,-4 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineN + decals: + 56: -3,-16 + 57: -2,-16 + 58: -1,-16 + 59: 0,-16 + 60: 1,-16 + 94: -5,-9 + 95: -4,-9 + 127: -5,-2 + 128: -4,-2 + 129: -3,-2 + 130: -2,-2 + 131: -1,-2 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 40: -4,-10 + 41: -3,-10 + 42: -2,-10 + 43: -1,-10 + 44: 0,-10 + 45: 1,-10 + 46: 2,-10 + 66: -3,-14 + 67: -2,-14 + 68: -1,-14 + 69: 0,-14 + 70: 1,-14 + 87: -5,-3 + 88: -4,-3 + 138: -4,0 + 139: -3,0 + 140: -2,0 + 141: -1,0 + 156: -4,5 + 157: -3,5 + 158: -2,5 + 159: -1,5 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 132: 1,-2 + 133: 1,-3 + 134: 1,-4 + 135: 1,-5 + 136: 1,-6 + 137: 1,-7 + - node: + color: '#A4610696' + id: BrickTileWhiteLineN + decals: + 142: -5,-2 + 143: -4,-2 + 144: -3,-2 + 145: -2,-2 + 146: -1,-2 + 166: -5,-9 + 167: -4,-9 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineN + decals: + 61: -3,-16 + 62: -2,-16 + 63: -1,-16 + 64: 0,-16 + 65: 1,-16 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineS + decals: + 47: -4,-10 + 48: -3,-10 + 49: -2,-10 + 50: -1,-10 + 51: 0,-10 + 52: 1,-10 + 53: 2,-10 + - node: + color: '#A4610696' + id: BrickTileWhiteLineS + decals: + 147: -4,0 + 148: -3,0 + 149: -2,0 + 150: -1,0 + 160: -4,5 + 161: -3,5 + 162: -2,5 + 163: -1,5 + 164: -5,-3 + 165: -4,-3 + - node: + color: '#EFB34196' + id: BrickTileWhiteLineS + decals: + 71: -3,-14 + 72: -2,-14 + 73: -1,-14 + 74: 0,-14 + 75: 1,-14 + - node: + color: '#A4610696' + id: BrickTileWhiteLineW + decals: + 151: 1,-2 + 152: 1,-4 + 153: 1,-5 + 154: 1,-6 + 155: 1,-7 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 117: 4,1 + 118: 0,3 + 119: 0,2 + 120: 0,1 + - node: + color: '#79150096' + id: DiagonalCheckerBOverlay + decals: + 28: -6,-4 + 29: -6,-6 + 30: -6,-7 + 31: -5,-4 + 32: -6,-5 + 33: -5,-5 + 34: -5,-7 + 35: -5,-6 + 36: -4,-7 + 37: -4,-6 + 38: -4,-5 + 39: -4,-4 + 92: -5,-8 + 93: -4,-8 + - node: + color: '#334E6DC8' + id: HalfTileOverlayGreyscale + decals: + 2: -4,-12 + 3: 2,-12 + 4: -3,-12 + 5: -2,-12 + 6: -1,-12 + 7: 0,-12 + 8: 1,-12 + 9: -4,-12 + 10: -3,-12 + 11: -2,-12 + 12: -1,-12 + 13: 0,-12 + 14: 1,-12 + 15: 2,-12 + - node: + color: '#EFB34196' + id: HalfTileOverlayGreyscale180 + decals: + 0: -3,-18 + 1: 1,-18 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 121: 2,3 + 122: 2,-1 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 123: 1,-1 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 124: -5,3 + 125: -5,2 + 126: -5,1 + - node: + color: '#79150096' + id: WarnFull + decals: + 16: 5,3 + 17: 5,2 + 18: 5,1 + 19: 5,0 + 20: 5,-4 + 21: 5,-5 + 22: 5,-6 + 23: 5,-7 + 24: -7,-7 + 25: -7,-6 + 26: -7,-5 + 27: -7,-4 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNe + decals: + 97: -4,-9 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerNw + decals: + 82: -2,-9 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSe + decals: + 91: -4,-3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSw + decals: + 90: -2,-3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineE + decals: + 83: -4,-4 + 84: -4,-5 + 85: -4,-6 + 86: -4,-7 + 96: -4,-8 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 81: -3,-9 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineS + decals: + 89: -3,-3 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineW + decals: + 76: -2,-4 + 77: -2,-5 + 78: -2,-6 + 79: -2,-7 + 80: -2,-8 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,-4: + 0: 26146 + -2,-5: + 0: 26342 + -2,-3: + 1: 40960 + 0: 68 + -2,-2: + 1: 52424 + -2,-1: + 1: 2188 + 0: 8704 + -2,0: + 0: 26214 + -1,-4: + 1: 65102 + -1,-3: + 1: 65311 + -1,-2: + 1: 65535 + -1,-1: + 1: 20479 + -1,0: + 1: 65535 + -1,-5: + 1: 61124 + 0: 1 + 0,-4: + 1: 29459 + 0,-3: + 1: 63303 + 0,-5: + 1: 13073 + 0: 132 + 0,-2: + 1: 61156 + 0,-1: + 1: 60942 + 0,0: + 1: 61166 + 1,-4: + 0: 13090 + 1,-3: + 0: 17 + 1: 8192 + 1,-2: + 1: 4368 + 1,-1: + 1: 4353 + 1,0: + 1: 4883 + 1,-5: + 0: 13107 + -2,1: + 0: 17504 + -1,1: + 1: 53236 + -1,2: + 0: 1 + 0,1: + 1: 6094 + 0,2: + 0: 4 + 1,1: + 1: 4128 + -2,-6: + 0: 25668 + 1,-6: + 0: 12561 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: RadiationGridResistance + - type: GasTileOverlay + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 1 +- proto: AirlockCargoGlass + entities: + - uid: 3 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 4 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 5 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 +- proto: AirlockCommandGlass + entities: + - uid: 7 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 1 +- proto: AirlockEngineeringGlass + entities: + - uid: 9 + components: + - type: Transform + pos: -1.5,-14.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 1 +- proto: AirlockExternalShuttleLocked + entities: + - uid: 11 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,0.5 + parent: 1 + - uid: 12 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,2.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 13 + components: + - type: MetaData + name: Bow APC + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 14 + components: + - type: MetaData + name: Bridge APC + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-14.5 + parent: 1 + - uid: 157 + components: + - type: MetaData + name: Bar APC + - type: Transform + pos: -0.5,-0.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 15 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 17 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,0.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 +- proto: BarSign + entities: + - uid: 21 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 22 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 +- proto: BoozeDispenser + entities: + - uid: 249 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-5.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 27 + components: + - type: Transform + pos: -2.5,-14.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 4.5,6.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 3.5,6.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: -2.5,-13.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: -2.5,-12.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: -3.5,-12.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: -5.5,-9.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -0.5,-13.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: 1.5,-12.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 2.5,-11.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 2.5,-10.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 1.5,-18.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 2.5,-18.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -1.5,-14.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: -1.5,-15.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: -1.5,-16.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: -1.5,-18.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: -3.5,-18.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 121 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 1 +- proto: CableHV + entities: + - uid: 128 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: 0.5,-17.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: -0.5,-17.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: 1.5,-16.5 + parent: 1 + - uid: 133 + components: + - type: Transform + pos: 1.5,-16.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: -2.5,-17.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: -2.5,-16.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: -5.5,-22.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: -5.5,-21.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: -5.5,-20.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: -5.5,-19.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: -5.5,-18.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: -5.5,-17.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: -5.5,-16.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: -6.5,-20.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -6.5,-19.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -6.5,-18.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: -6.5,-17.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: -6.5,-16.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: -6.5,-15.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: -6.5,-14.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: -6.5,-13.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: -5.5,-13.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: -4.5,-13.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: -3.5,-13.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -2.5,-13.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -0.5,-13.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: 2.5,-13.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: 3.5,-13.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 4.5,-13.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: 5.5,-13.5 + parent: 1 + - uid: 166 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 5.5,-16.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 5.5,-17.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: 4.5,-17.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 4.5,-18.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 4.5,-19.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 4.5,-20.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: 4.5,-21.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: 4.5,-22.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: 4.5,-23.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: -5.5,-23.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 1 + - uid: 638 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 1 + - uid: 639 + components: + - type: Transform + pos: 0.5,-15.5 + parent: 1 +- proto: CableMV + entities: + - uid: 183 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: -1.5,-14.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: -1.5,-12.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: -3.5,-12.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 194 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 195 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 196 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 197 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 198 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 1 + - uid: 199 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 200 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 201 + components: + - type: Transform + pos: -1.5,-15.5 + parent: 1 + - uid: 202 + components: + - type: Transform + pos: -1.5,-13.5 + parent: 1 + - uid: 203 + components: + - type: Transform + pos: -2.5,-12.5 + parent: 1 + - uid: 204 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 1 + - uid: 205 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 1 + - uid: 206 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 207 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 209 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 210 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 211 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 214 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: -2.5,-14.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-17.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 217 + components: + - type: Transform + pos: -2.5,-16.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: -1.5,-16.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: -0.5,-16.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 0.5,-16.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 1.5,-16.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-12.5 + parent: 1 + - uid: 223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-12.5 + parent: 1 + - uid: 224 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-12.5 + parent: 1 +- proto: ComfyChair + entities: + - uid: 225 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 +- proto: ComputerFrame + entities: + - uid: 227 + components: + - type: Transform + pos: 0.5,-11.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 228 + components: + - type: Transform + pos: -0.5,-11.5 + parent: 1 +- proto: ComputerSolarControl + entities: + - uid: 229 + components: + - type: Transform + pos: -0.5,-15.5 + parent: 1 +- proto: ComputerStationRecords + entities: + - uid: 230 + components: + - type: Transform + pos: -1.5,-11.5 + parent: 1 +- proto: ConveyorBelt + entities: + - uid: 231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + - uid: 232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - uid: 233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - uid: 234 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 236 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 237 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 + - uid: 238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - uid: 239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + - uid: 240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,3.5 + parent: 1 + - uid: 241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,3.5 + parent: 1 + - uid: 242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + - uid: 243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 244 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-4.5 + parent: 1 + - uid: 245 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 1 +- proto: DrinkGinBottleFull + entities: + - uid: 246 + components: + - type: Transform + pos: -5.610529,-6.2079597 + parent: 1 +- proto: DrinkVacuumFlask + entities: + - uid: 252 + components: + - type: Transform + pos: -0.49386668,7.58623 + parent: 1 +- proto: DrinkWhiskeyBottleFull + entities: + - uid: 253 + components: + - type: Transform + pos: -5.752516,-5.9667106 + parent: 1 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 254 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 +- proto: FaxMachineBase + entities: + - uid: 255 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 1 +- proto: FireAlarm + entities: + - uid: 257 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-13.5 + parent: 1 + - type: DeviceList + devices: + - 261 + - 260 + - 270 + - 262 + - uid: 258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 1 + - type: DeviceList + devices: + - 264 + - 265 + - 266 + - 263 + - 262 + - uid: 259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,4.5 + parent: 1 + - type: DeviceList + devices: + - 269 + - 266 + - 265 + - 264 + - 267 + - 268 +- proto: Firelock + entities: + - uid: 260 + components: + - type: Transform + pos: -1.5,-14.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 262 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 264 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 266 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 267 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 268 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 269 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 270 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 +- proto: GasMixerFlipped + entities: + - uid: 271 + components: + - type: Transform + pos: 0.5,-18.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' +- proto: GasPassiveVent + entities: + - uid: 634 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 273 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-18.5 + parent: 1 + - uid: 275 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-16.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 306 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 630 + components: + - type: Transform + pos: -1.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 631 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 75 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 158 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 247 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 251 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 277 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 278 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 279 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 280 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 281 + components: + - type: Transform + pos: 0.5,-14.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 282 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-10.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 283 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 284 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-18.5 + parent: 1 + - uid: 290 + components: + - type: Transform + pos: 0.5,-13.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 292 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-11.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 293 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 295 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 296 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 297 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 298 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 299 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 475 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 589 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 590 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 591 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 603 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 604 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 605 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 606 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 613 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-16.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 614 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-15.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-14.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 619 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 621 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 622 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 623 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 625 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 626 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 627 + components: + - type: Transform + pos: -3.5,-10.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 628 + components: + - type: Transform + pos: -3.5,-11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 636 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 637 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 640 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeTJunction + entities: + - uid: 272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 276 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-17.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 303 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 307 + components: + - type: Transform + pos: 0.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-16.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 599 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 600 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 607 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 616 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-13.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 618 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 310 + components: + - type: Transform + pos: 1.5,-15.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 311 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-19.5 + parent: 1 + - uid: 312 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-19.5 + parent: 1 +- proto: GasPressurePump + entities: + - uid: 288 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-15.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 313 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 314 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-12.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-9.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 635 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 641 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 642 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-17.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' +- proto: GasVentScrubber + entities: + - uid: 598 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 601 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 608 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 609 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 610 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-13.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 612 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-17.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 318 + components: + - type: Transform + pos: -2.5,-16.5 + parent: 1 +- proto: Grille + entities: + - uid: 319 + components: + - type: Transform + pos: -0.5,-20.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 321 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + - uid: 322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: 4.5,5.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 325 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 329 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 1 + - uid: 330 + components: + - type: Transform + pos: -4.5,5.5 + parent: 1 + - uid: 331 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 332 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 333 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 335 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 + - uid: 336 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 + - uid: 337 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 1 + - uid: 338 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 + - uid: 341 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 342 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 343 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 344 + components: + - type: Transform + pos: 0.5,8.5 + parent: 1 + - uid: 345 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 346 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: -4.5,-11.5 + parent: 1 + - uid: 348 + components: + - type: Transform + pos: -4.5,-12.5 + parent: 1 + - uid: 349 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 1 + - uid: 350 + components: + - type: Transform + pos: 3.5,-12.5 + parent: 1 + - uid: 351 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 1 + - uid: 352 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 1 + - uid: 353 + components: + - type: Transform + pos: 2.5,-16.5 + parent: 1 + - uid: 354 + components: + - type: Transform + pos: 2.5,-17.5 + parent: 1 + - uid: 355 + components: + - type: Transform + pos: -1.5,-20.5 + parent: 1 + - uid: 356 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 1 + - uid: 357 + components: + - type: Transform + pos: -6.5,-5.5 + parent: 1 + - uid: 358 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 359 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 360 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 1 + - uid: 361 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 1 + - uid: 362 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 363 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 364 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 365 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 366 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 +- proto: HandLabeler + entities: + - uid: 367 + components: + - type: Transform + pos: 1.4998418,4.4436564 + parent: 1 +- proto: LockerBoozeFilled + entities: + - uid: 368 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 1 +- proto: LockerChiefEngineer + entities: + - uid: 369 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 370 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 371 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 +- proto: Paper + entities: + - uid: 372 + components: + - type: Transform + pos: -2.646852,-13.416534 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: -2.4338698,-13.530063 + parent: 1 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 374 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 +- proto: PortableGeneratorSuperPacman + entities: + - uid: 317 + components: + - type: Transform + pos: 1.5,-17.5 + parent: 1 +- proto: PowerCellRecharger + entities: + - uid: 375 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-18.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,8.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 378 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,8.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 379 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 380 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 381 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,0.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 383 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-18.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-18.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-13.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 387 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-9.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 388 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-9.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredlightSodium + entities: + - uid: 389 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,5.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-6.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: ReinforcedWindow + entities: + - uid: 392 + components: + - type: Transform + pos: 1.5,-10.5 + parent: 1 + - uid: 393 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 394 + components: + - type: Transform + pos: -2.5,-10.5 + parent: 1 + - uid: 395 + components: + - type: Transform + pos: -0.5,-10.5 + parent: 1 + - uid: 396 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 + - uid: 397 + components: + - type: Transform + pos: -0.5,-14.5 + parent: 1 +- proto: SheetUranium + entities: + - uid: 473 + components: + - type: Transform + pos: 1.2595522,-16.723648 + parent: 1 +- proto: ShuttersNormal + entities: + - uid: 398 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 399 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 400 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 401 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 402 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 403 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 1 + - uid: 404 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 405 + components: + - type: Transform + pos: -4.5,5.5 + parent: 1 + - uid: 406 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 408 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 1 + - uid: 409 + components: + - type: Transform + pos: 0.5,8.5 + parent: 1 + - uid: 410 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 411 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 412 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 413 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 414 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 416 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - uid: 417 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 418 + components: + - type: Transform + pos: -4.5,-12.5 + parent: 1 + - uid: 419 + components: + - type: Transform + pos: 3.5,-11.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 3.5,-12.5 + parent: 1 + - uid: 421 + components: + - type: Transform + pos: -4.5,-11.5 + parent: 1 + - uid: 422 + components: + - type: Transform + pos: -3.5,-17.5 + parent: 1 + - uid: 423 + components: + - type: Transform + pos: -3.5,-16.5 + parent: 1 + - uid: 424 + components: + - type: Transform + pos: 2.5,-17.5 + parent: 1 + - uid: 425 + components: + - type: Transform + pos: 2.5,-16.5 + parent: 1 + - uid: 426 + components: + - type: Transform + pos: 0.5,-20.5 + parent: 1 + - uid: 427 + components: + - type: Transform + pos: -0.5,-20.5 + parent: 1 + - uid: 428 + components: + - type: Transform + pos: -1.5,-20.5 + parent: 1 + - uid: 429 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 1 + - uid: 430 + components: + - type: Transform + pos: -6.5,-5.5 + parent: 1 + - uid: 431 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 432 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 433 + components: + - type: Transform + pos: 4.5,5.5 + parent: 1 +- proto: SignalButton + entities: + - uid: 434 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 24: + - Pressed: Toggle + 25: + - Pressed: Toggle + 26: + - Pressed: Toggle + - uid: 435 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 24: + - Pressed: Toggle + 25: + - Pressed: Toggle + 26: + - Pressed: Toggle + - uid: 436 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 401: + - Pressed: Toggle + 402: + - Pressed: Toggle + - uid: 437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 22: + - Pressed: Toggle + 23: + - Pressed: Toggle + - uid: 438 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 401: + - Pressed: Toggle + 402: + - Pressed: Toggle + - uid: 439 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,4.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 400: + - Pressed: Toggle + 399: + - Pressed: Toggle + 398: + - Pressed: Toggle +- proto: SignCargoDock + entities: + - uid: 440 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 +- proto: SignEngineering + entities: + - uid: 441 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 1 +- proto: SMESBasic + entities: + - uid: 442 + components: + - type: Transform + pos: -2.5,-17.5 + parent: 1 +- proto: SolarPanel + entities: + - uid: 443 + components: + - type: Transform + pos: -6.5,-19.5 + parent: 1 + - uid: 444 + components: + - type: Transform + pos: 4.5,-22.5 + parent: 1 + - uid: 445 + components: + - type: Transform + pos: 4.5,-21.5 + parent: 1 + - uid: 446 + components: + - type: Transform + pos: 4.5,-20.5 + parent: 1 + - uid: 447 + components: + - type: Transform + pos: 4.5,-19.5 + parent: 1 + - uid: 448 + components: + - type: Transform + pos: 4.5,-18.5 + parent: 1 + - uid: 449 + components: + - type: Transform + pos: 4.5,-17.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: 4.5,-16.5 + parent: 1 + - uid: 451 + components: + - type: Transform + pos: -6.5,-20.5 + parent: 1 + - uid: 452 + components: + - type: Transform + pos: -5.5,-22.5 + parent: 1 + - uid: 453 + components: + - type: Transform + pos: -5.5,-21.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: -5.5,-20.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: -5.5,-19.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: -5.5,-18.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: -5.5,-17.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: -5.5,-16.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: -6.5,-18.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: -6.5,-17.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: -6.5,-16.5 + parent: 1 + - uid: 462 + components: + - type: Transform + pos: -6.5,-15.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: -6.5,-14.5 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: 5.5,-20.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 1 + - uid: 466 + components: + - type: Transform + pos: 5.5,-18.5 + parent: 1 + - uid: 467 + components: + - type: Transform + pos: 5.5,-17.5 + parent: 1 + - uid: 468 + components: + - type: Transform + pos: 5.5,-16.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 5.5,-15.5 + parent: 1 + - uid: 470 + components: + - type: Transform + pos: 5.5,-14.5 + parent: 1 +- proto: SolarTracker + entities: + - uid: 471 + components: + - type: Transform + pos: -5.5,-23.5 + parent: 1 + - uid: 472 + components: + - type: Transform + pos: 4.5,-23.5 + parent: 1 +- proto: StoolBar + entities: + - uid: 476 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + - uid: 477 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + - uid: 478 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - uid: 480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-6.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 481 + components: + - type: Transform + pos: -2.5,-15.5 + parent: 1 +- proto: TableGlass + entities: + - uid: 482 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 483 + components: + - type: Transform + pos: 1.5,-11.5 + parent: 1 + - uid: 484 + components: + - type: Transform + pos: -2.5,-11.5 + parent: 1 + - uid: 485 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 +- proto: TableReinforcedGlass + entities: + - uid: 486 + components: + - type: Transform + pos: -2.5,-13.5 + parent: 1 +- proto: TableWood + entities: + - uid: 487 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 488 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-6.5 + parent: 1 + - uid: 489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-7.5 + parent: 1 + - uid: 490 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-7.5 + parent: 1 + - uid: 491 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 1 + - uid: 492 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - uid: 493 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 494 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 +- proto: Thruster + entities: + - uid: 495 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-1.5 + parent: 1 + - uid: 496 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-19.5 + parent: 1 + - uid: 497 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-10.5 + parent: 1 + - uid: 498 + components: + - type: Transform + pos: -5.5,7.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: 4.5,7.5 + parent: 1 + - uid: 500 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,8.5 + parent: 1 + - uid: 501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-8.5 + parent: 1 + - uid: 502 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-19.5 + parent: 1 + - uid: 503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-10.5 + parent: 1 + - uid: 504 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-8.5 + parent: 1 + - uid: 505 + components: + - type: Transform + pos: 5.5,5.5 + parent: 1 + - uid: 506 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 507 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 234: + - Left: Forward + - Right: Reverse + - Middle: Off + 233: + - Left: Forward + - Right: Reverse + - Middle: Off + 232: + - Left: Forward + - Right: Reverse + - Middle: Off + 231: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 508 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 231: + - Left: Forward + - Right: Reverse + - Middle: Off + 232: + - Left: Forward + - Right: Reverse + - Middle: Off + 233: + - Left: Forward + - Right: Reverse + - Middle: Off + 234: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 509 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 243: + - Left: Forward + - Right: Reverse + - Middle: Off + 238: + - Left: Forward + - Right: Reverse + - Middle: Off + 239: + - Left: Forward + - Right: Reverse + - Middle: Off + 242: + - Left: Forward + - Right: Reverse + - Middle: Off + 240: + - Left: Forward + - Right: Reverse + - Middle: Off + 241: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 510 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 245: + - Left: Forward + - Right: Reverse + - Middle: Off + 244: + - Left: Forward + - Right: Reverse + - Middle: Off + 235: + - Left: Forward + - Right: Reverse + - Middle: Off + 236: + - Left: Forward + - Right: Reverse + - Middle: Off + 237: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: VendingMachineBoozeUnlocked + entities: + - uid: 511 + components: + - type: Transform + pos: -5.5,-4.5 + parent: 1 +- proto: VendingMachineEngiDrobe + entities: + - uid: 512 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 +- proto: VendingMachineSalvage + entities: + - uid: 513 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 514 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - uid: 515 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 516 + components: + - type: Transform + pos: 2.5,-15.5 + parent: 1 + - uid: 517 + components: + - type: Transform + pos: -0.5,-19.5 + parent: 1 + - uid: 518 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 519 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 520 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 521 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 522 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 523 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 + - uid: 524 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 525 + components: + - type: Transform + pos: -5.5,-2.5 + parent: 1 + - uid: 526 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 527 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 1 + - uid: 528 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - uid: 529 + components: + - type: Transform + pos: -4.5,7.5 + parent: 1 + - uid: 530 + components: + - type: Transform + pos: -4.5,6.5 + parent: 1 + - uid: 531 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 532 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 533 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 534 + components: + - type: Transform + pos: 3.5,6.5 + parent: 1 + - uid: 535 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - uid: 536 + components: + - type: Transform + pos: 4.5,6.5 + parent: 1 + - uid: 537 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 538 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 539 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - uid: 540 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 541 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 1 + - uid: 542 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 543 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 1 + - uid: 544 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 1 + - uid: 545 + components: + - type: Transform + pos: -5.5,-9.5 + parent: 1 + - uid: 546 + components: + - type: Transform + pos: 1.5,-19.5 + parent: 1 + - uid: 547 + components: + - type: Transform + pos: 4.5,-9.5 + parent: 1 + - uid: 548 + components: + - type: Transform + pos: 3.5,-9.5 + parent: 1 + - uid: 549 + components: + - type: Transform + pos: 3.5,-10.5 + parent: 1 + - uid: 550 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 551 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 552 + components: + - type: Transform + pos: -2.5,-20.5 + parent: 1 + - uid: 553 + components: + - type: Transform + pos: 1.5,-20.5 + parent: 1 + - uid: 554 + components: + - type: Transform + pos: -3.5,-15.5 + parent: 1 + - uid: 555 + components: + - type: Transform + pos: -2.5,-14.5 + parent: 1 + - uid: 556 + components: + - type: Transform + pos: 1.5,-18.5 + parent: 1 + - uid: 557 + components: + - type: Transform + pos: 2.5,-18.5 + parent: 1 + - uid: 558 + components: + - type: Transform + pos: -2.5,-19.5 + parent: 1 + - uid: 559 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 560 + components: + - type: Transform + pos: -3.5,-18.5 + parent: 1 + - uid: 561 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 562 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 1 + - uid: 563 + components: + - type: Transform + pos: 1.5,-14.5 + parent: 1 + - uid: 564 + components: + - type: Transform + pos: 2.5,-14.5 + parent: 1 + - uid: 565 + components: + - type: Transform + pos: 2.5,-13.5 + parent: 1 + - uid: 566 + components: + - type: Transform + pos: -4.5,-13.5 + parent: 1 + - uid: 567 + components: + - type: Transform + pos: -3.5,-13.5 + parent: 1 + - uid: 568 + components: + - type: Transform + pos: 3.5,-13.5 + parent: 1 + - uid: 569 + components: + - type: Transform + pos: -3.5,-14.5 + parent: 1 + - uid: 570 + components: + - type: Transform + pos: -2.5,-18.5 + parent: 1 + - uid: 571 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 572 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 573 + components: + - type: Transform + pos: -4.5,-10.5 + parent: 1 + - uid: 574 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 +- proto: WardrobeSalvageFilled + entities: + - uid: 575 + components: + - type: Transform + pos: 1.5,-13.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 643 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - type: WarpPoint + location: The Barge +- proto: WaterCooler + entities: + - uid: 576 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 +- proto: WindoorBarLocked + entities: + - uid: 577 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-3.5 + parent: 1 +- proto: Window + entities: + - uid: 578 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 579 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 580 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 581 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 582 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - uid: 583 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 584 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 585 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 586 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 587 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 +- proto: WindowDirectional + entities: + - uid: 588 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/DeltaV/helix.yml b/Resources/Maps/Shuttles/DeltaV/helix.yml new file mode 100644 index 00000000000..b77327935ab --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/helix.yml @@ -0,0 +1,3131 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 24: FloorDark + 29: FloorDarkMono + 81: FloorTechMaint + 84: FloorWhite + 85: FloorWhiteDiagonal + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAVAAAAAACVAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAVAAAAAAAVAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAVAAAAAAAYQAAAAAAVAAAAAABYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAVAAAAAACVAAAAAADVAAAAAACVAAAAAAAYQAAAAAAVAAAAAABVAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAVAAAAAADVAAAAAAAVAAAAAACVAAAAAABYQAAAAAAVAAAAAADVQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAVAAAAAADVAAAAAABVAAAAAABVAAAAAABVAAAAAADVAAAAAADVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAVAAAAAADYQAAAAAAYQAAAAAAVAAAAAADVQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAVAAAAAABVAAAAAADVAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: YQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAABYQAAAAAAVAAAAAADVAAAAAADVAAAAAABYQAAAAAAVAAAAAAAVAAAAAABVAAAAAADYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAACYQAAAAAAVAAAAAABVAAAAAACVAAAAAACYQAAAAAAVAAAAAAAVAAAAAACVAAAAAABYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAABYQAAAAAAVAAAAAAAVAAAAAABVAAAAAACYQAAAAAAVAAAAAABYQAAAAAAVAAAAAABYQAAAAAAGAAAAAABYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAADVAAAAAABVAAAAAADYQAAAAAAVAAAAAABVAAAAAAAVAAAAAAAVAAAAAACGAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAVAAAAAACYQAAAAAAVAAAAAACVAAAAAADYQAAAAAAYQAAAAAAVAAAAAADVQAAAAACVAAAAAADYQAAAAAAGAAAAAACYQAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAYAAAAAAAVAAAAAAAYQAAAAAAVAAAAAADVAAAAAAAVAAAAAADYQAAAAAAVAAAAAACVQAAAAACVAAAAAAAYQAAAAAAGAAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAYAAAAAAAVQAAAAADVQAAAAAAVQAAAAAAVQAAAAADVQAAAAADVQAAAAACVQAAAAADVQAAAAABVAAAAAACVAAAAAADGAAAAAACUQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAVAAAAAAAYQAAAAAAVAAAAAACVAAAAAACVAAAAAABYQAAAAAAVAAAAAACVAAAAAADVAAAAAADVAAAAAADYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAHQAAAAACYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAGAAAAAABGAAAAAABGAAAAAACYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAHQAAAAAAGAAAAAABGAAAAAADGAAAAAABYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAGAAAAAACGAAAAAADGAAAAAABYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 99: 6,10 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineE + decals: + 49: -4,4 + 50: -4,5 + 51: -4,6 + 100: 6,11 + 101: 6,12 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineN + decals: + 43: -2,2 + 44: -1,2 + 45: 0,2 + 46: 6,2 + 47: 7,2 + 48: 8,2 + 85: 2,4 + 86: 3,4 + 87: 4,4 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 37: -2,4 + 38: -1,4 + 39: 0,4 + 40: 6,4 + 41: 7,4 + 42: 8,4 + 88: 2,1 + 89: 3,1 + 90: 4,1 + 97: 4,10 + 98: 5,10 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 52: -7,4 + 53: -7,5 + 54: -7,6 + 55: 10,3 + 56: 10,4 + 57: 10,5 + 58: 10,6 + 59: 10,7 + 60: 10,8 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerNe + decals: + 15: 7,7 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteCornerNw + decals: + 14: -1,7 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerSe + decals: + 104: 6,10 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteEndS + decals: + 13: -1,5 + 16: 7,5 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteInnerSe + decals: + 28: -1,7 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteInnerSw + decals: + 36: 7,7 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineE + decals: + 102: 6,12 + 103: 6,11 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineE + decals: + 67: -4,4 + 68: -4,5 + 69: -4,6 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineE + decals: + 17: 7,6 + 18: -1,6 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineN + decals: + 64: -2,2 + 65: -1,2 + 66: 0,2 + 76: 6,2 + 77: 7,2 + 78: 8,2 + - node: + color: '#D58C18FF' + id: BrickTileWhiteLineN + decals: + 94: 2,4 + 95: 3,4 + 96: 4,4 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineN + decals: + 21: 6,7 + 22: 5,7 + 23: 4,7 + 24: 3,7 + 25: 2,7 + 26: 1,7 + 27: 0,7 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineS + decals: + 105: 5,10 + 106: 4,10 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineS + decals: + 61: -2,4 + 62: -1,4 + 63: 0,4 + 73: 6,4 + 74: 7,4 + 75: 8,4 + - node: + color: '#D58C18FF' + id: BrickTileWhiteLineS + decals: + 91: 2,1 + 92: 3,1 + 93: 4,1 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineS + decals: + 29: 0,7 + 30: 1,7 + 31: 2,7 + 32: 3,7 + 33: 4,7 + 34: 5,7 + 35: 6,7 + - node: + color: '#52B4E996' + id: BrickTileWhiteLineW + decals: + 70: -7,4 + 71: -7,5 + 72: -7,6 + 79: 10,3 + 80: 10,4 + 81: 10,5 + 82: 10,6 + 83: 10,7 + 84: 10,8 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineW + decals: + 19: -1,6 + 20: 7,6 + - node: + color: '#52B4E996' + id: DiagonalCheckerAOverlay + decals: + 0: -1,5 + 1: -1,6 + 2: -1,7 + 3: 0,7 + 4: 1,7 + 5: 2,7 + 6: 3,7 + 7: 4,7 + 8: 5,7 + 9: 6,7 + 10: 7,7 + 11: 7,6 + 12: 7,5 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 107: 11,4 + 108: 11,5 + 109: 11,6 + 110: 11,7 + - type: GridAtmosphere + version: 2 + data: + tiles: + -1,-1: + 0: 256 + 1: 17408 + -1,0: + 1: 23748 + 0: 16 + 0,-1: + 1: 4352 + 0: 50176 + -3,1: + 0: 2184 + -2,1: + 1: 36590 + -2,2: + 0: 130 + -2,0: + 0: 1024 + -1,1: + 1: 53213 + -1,2: + 1: 14 + 0: 17920 + 0,0: + 1: 56785 + 0,1: + 1: 64991 + 0,2: + 1: 63245 + 0,3: + 1: 7 + 0: 3072 + 1,-1: + 0: 4352 + 1: 17408 + 1,0: + 1: 24020 + 2,-1: + 1: 4352 + 0: 1024 + 2,0: + 1: 20753 + 0: 64 + 1,1: + 1: 64973 + 1,2: + 1: 30493 + 1,3: + 1: 7 + 0: 256 + 2,1: + 1: 64991 + 2,2: + 1: 1 + 0: 4992 + 3,0: + 0: 256 + 3,1: + 1: 819 + 0: 2184 + 3,2: + 0: 2 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: SpreaderGrid + - type: GravityShake + nextShake: 0 + shakeTimes: 10 +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + pos: 12.5,6.5 + parent: 1 +- proto: AirlockChemistryLocked + entities: + - uid: 20 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 +- proto: AirlockCommandGlass + entities: + - uid: 3 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 +- proto: AirlockEngineeringGlass + entities: + - uid: 4 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 +- proto: AirlockExternalGlass + entities: + - uid: 5 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 7 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 +- proto: AirlockGlassShuttle + entities: + - uid: 9 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 +- proto: AirlockMedicalGlass + entities: + - uid: 13 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,7.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: 8.5,3.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 5.5,7.5 + parent: 1 + - uid: 19 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,4.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 21 + components: + - type: MetaData + name: Bridge APC + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 121 + components: + - type: MetaData + name: Chemistry APC + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + - uid: 205 + components: + - type: MetaData + name: Treatment APC + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 448 + components: + - type: MetaData + name: Cryo APC + - type: Transform + pos: 10.5,8.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 23 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 +- proto: BedsheetMedical + entities: + - uid: 467 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - uid: 475 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 + - uid: 476 + components: + - type: Transform + pos: -6.5,6.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 27 + components: + - type: Transform + pos: 9.5,7.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 11.5,7.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 2.5,11.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 1.5,11.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 0.5,11.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 0.5,10.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 4.5,11.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 5.5,11.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: 6.5,11.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 6.5,10.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 4.5,7.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 5.5,7.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: 6.5,7.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 8.5,7.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: 7.5,5.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: 7.5,4.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 8.5,4.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: 9.5,4.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 10.5,4.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: 11.5,4.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 12.5,4.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 13.5,4.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 14.5,4.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -6.5,6.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: 14.5,5.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 14.5,6.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 7.5,1.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: 8.5,2.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 8.5,3.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 +- proto: CableHV + entities: + - uid: 107 + components: + - type: Transform + pos: 0.5,12.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 1.5,12.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 2.5,12.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 0.5,10.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 0.5,11.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: 0.5,12.5 + parent: 1 + - uid: 446 + components: + - type: Transform + pos: -0.5,10.5 + parent: 1 +- proto: CableMV + entities: + - uid: 22 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 2.5,12.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: 4.5,11.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 4.5,7.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 451 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 + - uid: 452 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 + - uid: 453 + components: + - type: Transform + pos: 9.5,7.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: 8.5,7.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: 7.5,7.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: 6.5,7.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: 5.5,7.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 462 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,12.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,11.5 + parent: 1 + - uid: 129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,11.5 + parent: 1 + - uid: 130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,11.5 + parent: 1 +- proto: Chair + entities: + - uid: 131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,1.5 + parent: 1 + - uid: 133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,6.5 + parent: 1 + - uid: 134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 +- proto: ChairFolding + entities: + - uid: 135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,11.5 + parent: 1 +- proto: ChairOfficeLight + entities: + - uid: 136 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,4.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,11.5 + parent: 1 +- proto: chem_master + entities: + - uid: 140 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 +- proto: ChemDispenser + entities: + - uid: 141 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 +- proto: ChemistryHotplate + entities: + - uid: 142 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 445 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,7.5 + parent: 1 +- proto: ClothingEyesHudMedical + entities: + - uid: 143 + components: + - type: Transform + pos: 7.532101,8.5749855 + parent: 1 +- proto: ClothingNeckStethoscope + entities: + - uid: 144 + components: + - type: Transform + pos: -4.509046,7.6246953 + parent: 1 +- proto: ClothingOuterWinterChem + entities: + - uid: 145 + components: + - type: Transform + pos: 3.9942956,1.5917455 + parent: 1 +- proto: ComputerCrewMonitoring + entities: + - uid: 146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,11.5 + parent: 1 +- proto: ComputerMedicalRecords + entities: + - uid: 147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,4.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 148 + components: + - type: Transform + pos: 5.5,12.5 + parent: 1 +- proto: CryoPod + entities: + - uid: 149 + components: + - type: Transform + pos: 13.5,5.5 + parent: 1 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 152 + components: + - type: Transform + pos: 5.5,5.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 +- proto: FaxMachineBase + entities: + - uid: 154 + components: + - type: Transform + pos: 6.5,12.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 155 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: 5.5,7.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: 8.5,3.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 166 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,4.5 + parent: 1 + - uid: 167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,4.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 469 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 470 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 171 + components: + - type: Transform + pos: 11.5,5.5 + parent: 1 + - uid: 172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 175 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 177 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 178 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 179 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 180 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 181 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 191 + components: + - type: Transform + pos: 8.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 192 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 193 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 471 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 473 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 474 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 183 + components: + - type: Transform + pos: 8.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 12.5,4.5 + parent: 1 + - uid: 195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 196 + components: + - type: Transform + pos: 4.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 198 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 204 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 200 + components: + - type: Transform + pos: 12.5,6.5 + parent: 1 +- proto: GasPressurePump + entities: + - uid: 201 + components: + - type: Transform + pos: 12.5,5.5 + parent: 1 +- proto: GasThermoMachineFreezer + entities: + - uid: 202 + components: + - type: Transform + pos: 11.5,6.5 + parent: 1 +- proto: GasVentScrubber + entities: + - uid: 90 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 206 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 466 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GeneratorWallmountBasic + entities: + - uid: 210 + components: + - type: Transform + pos: -0.5,10.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 211 + components: + - type: Transform + pos: 2.5,10.5 + parent: 1 +- proto: Grille + entities: + - uid: 212 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 214 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,3.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 222 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 225 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 10.5,2.5 + parent: 1 + - uid: 227 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 228 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: -0.5,12.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: -0.5,11.5 + parent: 1 + - uid: 231 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 232 + components: + - type: Transform + pos: 0.5,13.5 + parent: 1 + - uid: 233 + components: + - type: Transform + pos: 1.5,13.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: 2.5,13.5 + parent: 1 + - uid: 235 + components: + - type: Transform + pos: 6.5,13.5 + parent: 1 + - uid: 236 + components: + - type: Transform + pos: 5.5,13.5 + parent: 1 + - uid: 237 + components: + - type: Transform + pos: 4.5,13.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: 7.5,11.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: 7.5,12.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: 11.5,8.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: 13.5,3.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,5.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 247 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 + - uid: 248 + components: + - type: Transform + pos: -7.5,5.5 + parent: 1 + - uid: 249 + components: + - type: Transform + pos: -7.5,4.5 + parent: 1 + - uid: 250 + components: + - type: Transform + pos: -6.5,7.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: -4.5,8.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 257 + components: + - type: Transform + pos: 13.5,7.5 + parent: 1 + - uid: 258 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,4.5 + parent: 1 + - uid: 259 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,6.5 + parent: 1 + - uid: 260 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 262 + components: + - type: Transform + pos: 5.5,6.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: 5.5,8.5 + parent: 1 + - uid: 264 + components: + - type: Transform + pos: 7.5,3.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 266 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,5.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 267 + components: + - type: Transform + pos: 1.5,10.5 + parent: 1 +- proto: HandheldHealthAnalyzer + entities: + - uid: 268 + components: + - type: Transform + pos: -0.54647624,8.518518 + parent: 1 +- proto: HospitalCurtainsOpen + entities: + - uid: 269 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 270 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - uid: 271 + components: + - type: Transform + pos: -5.5,6.5 + parent: 1 +- proto: KitchenReagentGrinder + entities: + - uid: 272 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 +- proto: LockerChemistryFilled + entities: + - uid: 273 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 +- proto: MachineElectrolysisUnit + entities: + - uid: 477 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 +- proto: MedicalBed + entities: + - uid: 274 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - uid: 275 + components: + - type: Transform + pos: -6.5,6.5 + parent: 1 + - uid: 276 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 +- proto: MedkitAdvancedFilled + entities: + - uid: 277 + components: + - type: Transform + pos: 2.4920883,8.533883 + parent: 1 +- proto: MedkitFilled + entities: + - uid: 278 + components: + - type: Transform + pos: 0.4190662,8.562265 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: 6.8521543,8.576456 + parent: 1 +- proto: MedkitOxygenFilled + entities: + - uid: 280 + components: + - type: Transform + pos: 0.064097166,8.590648 + parent: 1 + - uid: 281 + components: + - type: Transform + pos: 6.568179,8.533883 + parent: 1 +- proto: MedkitRadiationFilled + entities: + - uid: 282 + components: + - type: Transform + pos: 2.831725,8.561308 + parent: 1 +- proto: MedkitToxinFilled + entities: + - uid: 283 + components: + - type: Transform + pos: 3.286086,8.547117 + parent: 1 +- proto: PortableGeneratorPacman + entities: + - uid: 209 + components: + - type: Transform + pos: 0.5,12.5 + parent: 1 +- proto: PottedPlantRandom + entities: + - uid: 284 + components: + - type: Transform + pos: 4.5,12.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,9.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,9.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 289 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,14.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredlightLED + entities: + - uid: 290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 292 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,5.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 294 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 296 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 449 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,10.5 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 447 + components: + - type: Transform + pos: 0.53972864,11.9265995 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 297 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 298 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 299 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 300 + components: + - type: Transform + pos: 5.5,13.5 + parent: 1 + - uid: 301 + components: + - type: Transform + pos: 6.5,13.5 + parent: 1 + - uid: 302 + components: + - type: Transform + pos: 7.5,11.5 + parent: 1 + - uid: 303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,3.5 + parent: 1 + - uid: 304 + components: + - type: Transform + pos: 4.5,13.5 + parent: 1 + - uid: 305 + components: + - type: Transform + pos: 7.5,12.5 + parent: 1 + - uid: 306 + components: + - type: Transform + pos: -7.5,4.5 + parent: 1 + - uid: 307 + components: + - type: Transform + pos: 1.5,13.5 + parent: 1 + - uid: 308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,4.5 + parent: 1 + - uid: 309 + components: + - type: Transform + pos: 13.5,7.5 + parent: 1 + - uid: 310 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 311 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: 5.5,6.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: 4.5,5.5 + parent: 1 + - uid: 315 + components: + - type: Transform + pos: 5.5,8.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 317 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: 11.5,8.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 321 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 322 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 325 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: 7.5,3.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: -4.5,8.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 329 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 330 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 331 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 332 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 333 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 335 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,5.5 + parent: 1 + - uid: 337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,6.5 + parent: 1 + - uid: 338 + components: + - type: Transform + pos: 0.5,13.5 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: -0.5,12.5 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: -0.5,11.5 + parent: 1 + - uid: 341 + components: + - type: Transform + pos: 2.5,13.5 + parent: 1 + - uid: 342 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 + - uid: 343 + components: + - type: Transform + pos: -7.5,5.5 + parent: 1 + - uid: 344 + components: + - type: Transform + pos: 13.5,3.5 + parent: 1 + - uid: 345 + components: + - type: Transform + pos: 10.5,2.5 + parent: 1 + - uid: 346 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: -6.5,7.5 + parent: 1 + - uid: 348 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 349 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 350 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 351 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 +- proto: SMESBasic + entities: + - uid: 352 + components: + - type: Transform + pos: 1.5,12.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 353 + components: + - type: Transform + pos: 2.5,12.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 354 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 355 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 + - uid: 356 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 357 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 358 + components: + - type: Transform + pos: 6.5,12.5 + parent: 1 + - uid: 359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,10.5 + parent: 1 +- proto: TableReinforcedGlass + entities: + - uid: 360 + components: + - type: Transform + pos: -4.5,7.5 + parent: 1 + - uid: 361 + components: + - type: Transform + pos: 11.5,7.5 + parent: 1 + - uid: 362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 363 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,1.5 + parent: 1 + - uid: 364 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - uid: 365 + components: + - type: Transform + pos: 2.5,8.5 + parent: 1 + - uid: 366 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 + - uid: 367 + components: + - type: Transform + pos: 6.5,8.5 + parent: 1 + - uid: 368 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 369 + components: + - type: Transform + pos: 0.5,8.5 + parent: 1 + - uid: 370 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 371 + components: + - type: Transform + pos: 10.5,3.5 + parent: 1 +- proto: Thruster + entities: + - uid: 372 + components: + - type: Transform + pos: -4.5,9.5 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: 11.5,9.5 + parent: 1 + - uid: 374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 12.5,2.5 + parent: 1 + - uid: 375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,1.5 + parent: 1 + - uid: 376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - uid: 377 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,2.5 + parent: 1 + - uid: 378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-1.5 + parent: 1 +- proto: VendingMachineCoffee + entities: + - uid: 380 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 +- proto: VendingMachineMedical + entities: + - uid: 381 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 382 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 383 + components: + - type: Transform + pos: 5.5,5.5 + parent: 1 + - uid: 384 + components: + - type: Transform + pos: 11.5,2.5 + parent: 1 + - uid: 385 + components: + - type: Transform + pos: 11.5,3.5 + parent: 1 + - uid: 386 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 387 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 388 + components: + - type: Transform + pos: 9.5,3.5 + parent: 1 + - uid: 389 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 + - uid: 390 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 + - uid: 391 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 + - uid: 392 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 393 + components: + - type: Transform + pos: -1.5,9.5 + parent: 1 + - uid: 394 + components: + - type: Transform + pos: 0.5,9.5 + parent: 1 + - uid: 395 + components: + - type: Transform + pos: -0.5,9.5 + parent: 1 + - uid: 396 + components: + - type: Transform + pos: 7.5,9.5 + parent: 1 + - uid: 397 + components: + - type: Transform + pos: 8.5,9.5 + parent: 1 + - uid: 398 + components: + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 399 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 400 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 401 + components: + - type: Transform + pos: -3.5,8.5 + parent: 1 + - uid: 402 + components: + - type: Transform + pos: -5.5,7.5 + parent: 1 + - uid: 403 + components: + - type: Transform + pos: -7.5,7.5 + parent: 1 + - uid: 404 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 405 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 406 + components: + - type: Transform + pos: -7.5,3.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: -0.5,13.5 + parent: 1 + - uid: 408 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 + - uid: 409 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,3.5 + parent: 1 + - uid: 410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,9.5 + parent: 1 + - uid: 411 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 412 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 413 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 414 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 416 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,9.5 + parent: 1 + - uid: 417 + components: + - type: Transform + pos: 12.5,8.5 + parent: 1 + - uid: 418 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,7.5 + parent: 1 + - uid: 419 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,10.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 421 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 422 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 423 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 424 + components: + - type: Transform + pos: 6.5,9.5 + parent: 1 + - uid: 425 + components: + - type: Transform + pos: 5.5,9.5 + parent: 1 + - uid: 426 + components: + - type: Transform + pos: 3.5,10.5 + parent: 1 + - uid: 427 + components: + - type: Transform + pos: 3.5,9.5 + parent: 1 + - uid: 428 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 + - uid: 429 + components: + - type: Transform + pos: 1.5,9.5 + parent: 1 + - uid: 430 + components: + - type: Transform + pos: -5.5,8.5 + parent: 1 + - uid: 431 + components: + - type: Transform + pos: -3.5,9.5 + parent: 1 + - uid: 432 + components: + - type: Transform + pos: 12.5,7.5 + parent: 1 + - uid: 433 + components: + - type: Transform + pos: 3.5,13.5 + parent: 1 + - uid: 434 + components: + - type: Transform + pos: 7.5,13.5 + parent: 1 + - uid: 435 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 436 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,10.5 + parent: 1 + - uid: 437 + components: + - type: Transform + pos: 9.5,8.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 483 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 + - type: WarpPoint + location: NTMC Helix +- proto: WeaponCapacitorRecharger + entities: + - uid: 438 + components: + - type: Transform + pos: 6.5,10.5 + parent: 1 +- proto: WindoorSecureChemistryLocked + entities: + - uid: 150 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,5.5 + parent: 1 + - uid: 440 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,5.5 + parent: 1 +- proto: WindowTintedDirectional + entities: + - uid: 441 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,4.5 + parent: 1 + - uid: 442 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,5.5 + parent: 1 + - uid: 443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,5.5 + parent: 1 + - uid: 444 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,4.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/DeltaV/ntcv-nomad.yml b/Resources/Maps/Shuttles/DeltaV/ntcv-nomad.yml new file mode 100644 index 00000000000..4e193ab0071 --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/ntcv-nomad.yml @@ -0,0 +1,1151 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 36: FloorEighties + 55: FloorMono + 60: FloorRGlass + 64: FloorShuttleBlue + 68: FloorShuttleWhite + 81: FloorTechMaint + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAJAAAAAAAJAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAJAAAAAAAJAAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAJAAAAAAAJAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAPAAAAAAARAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANwAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: QAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 0: -2,-8 + 1: -3,-8 + 2: -1,-8 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 5: -2,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 4: -3,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 6: -2,-5 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 3: -3,-5 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineE + decals: + 7: -2,-4 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 8: -3,-4 + - type: GridAtmosphere + version: 2 + data: + tiles: + -1,-3: + 0: 4608 + 1: 49152 + -1,-2: + 1: 24814 + -1,-1: + 1: 49262 + 0: 4352 + -1,0: + 0: 33 + 1: 12 + 0,-3: + 1: 4096 + 0: 16896 + 0,-2: + 1: 14131 + 0,-1: + 1: 4403 + 0: 17408 + 0,0: + 1: 1 + 0: 36 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: RadiationGridResistance + - type: GasTileOverlay + - type: SpreaderGrid +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 +- proto: Airlock + entities: + - uid: 3 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 +- proto: AirlockCommand + entities: + - uid: 4 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 5 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 6 + components: + - type: MetaData + name: Main APC + - type: Transform + pos: -0.5,-5.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 7 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 +- proto: Bed + entities: + - uid: 8 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 +- proto: BedsheetSpawner + entities: + - uid: 9 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 10 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: CableHV + entities: + - uid: 35 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 +- proto: CableMV + entities: + - uid: 39 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 41 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 +- proto: Chair + entities: + - uid: 50 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 52 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 54 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 +- proto: ClosetSteelBase + entities: + - uid: 53 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 +- proto: ClosetToolFilled + entities: + - uid: 55 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 +- proto: ComputerAlert + entities: + - uid: 56 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 57 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 +- proto: CratePrivateSecure + entities: + - uid: 58 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 +- proto: EmergencyLight + entities: + - uid: 59 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 60 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 61 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight +- proto: GasPassiveVent + entities: + - uid: 158 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 62 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 63 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 64 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 65 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 66 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 67 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 153 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 154 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 155 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 68 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 69 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 157 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 70 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 71 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 72 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 73 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentScrubber + entities: + - uid: 148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 150 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 75 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 +- proto: Grille + entities: + - uid: 76 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 89 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 +- proto: MedkitFilled + entities: + - uid: 90 + components: + - type: Transform + pos: 1.6860802,-2.5876162 + parent: 1 +- proto: MedkitOxygenFilled + entities: + - uid: 91 + components: + - type: Transform + pos: 1.3110802,-2.3061707 + parent: 1 +- proto: PortableGeneratorPacman + entities: + - uid: 74 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 92 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 95 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredLightBlueInterior + entities: + - uid: 96 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 94 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 114 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 +- proto: Rack + entities: + - uid: 97 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 +- proto: RandomFoodMeal + entities: + - uid: 98 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 147 + components: + - type: Transform + pos: -1.4101079,-7.5853066 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 99 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 112 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 +- proto: Table + entities: + - uid: 113 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 +- proto: TableReinforcedGlass + entities: + - uid: 93 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 115 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 118 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-9.5 + parent: 1 + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 1 +- proto: VendingMachineCoffee + entities: + - uid: 121 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 122 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 133 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: -1.5,-9.5 + parent: 1 +- proto: WallShuttleDiagonal + entities: + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-8.5 + parent: 1 + - uid: 142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-8.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - uid: 144 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 160 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - type: WarpPoint + location: NTCV Nomad +... diff --git a/Resources/Maps/Shuttles/DeltaV/ntsv-tote.yml b/Resources/Maps/Shuttles/DeltaV/ntsv-tote.yml new file mode 100644 index 00000000000..78c692ba339 --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/ntsv-tote.yml @@ -0,0 +1,1231 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 55: FloorMono + 60: FloorRGlass + 61: FloorReinforced + 81: FloorTechMaint + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAPAAAAAAAUQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAPAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: PAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 1: -2,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 0: -3,-3 + - node: + color: '#FFFFFFFF' + id: DeliveryGreyscale + decals: + 2: -3,-5 + 3: -2,-5 + 4: -1,-7 + 5: -2,-7 + 6: -2,-6 + 7: -3,-6 + 8: -3,-7 + 9: -3,-8 + 10: -2,-8 + 11: -1,-8 + 12: -1,-6 + 13: -1,-5 + - type: GridAtmosphere + version: 2 + data: + tiles: + -1,-3: + 0: 4848 + 1: 57344 + -1,-2: + 1: 61166 + -1,-1: + 1: 52366 + 0: 4352 + -1,0: + 0: 33 + 1: 12 + 0,-3: + 0: 17008 + 1: 12288 + 0,-2: + 1: 29555 + 0,-1: + 1: 4355 + 0: 17408 + 0,0: + 1: 1 + 0: 36 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: RadiationGridResistance + - type: GasTileOverlay + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 +- proto: AirCanister + entities: + - uid: 2 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 +- proto: AirlockCommandGlass + entities: + - uid: 3 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 4 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + - uid: 5 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 6 + components: + - type: MetaData + name: Main APC + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 7 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 9 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 11 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 15 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: CableHV + entities: + - uid: 38 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 1 +- proto: CableMV + entities: + - uid: 43 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 0.5,-8.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 51 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 61 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 62 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 1 +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 63 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: ComputerRadar + entities: + - uid: 64 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 65 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 +- proto: ConveyorBelt + entities: + - uid: 66 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 67 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 68 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-7.5 + parent: 1 + - uid: 69 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 +- proto: DrinkColaBottleFull + entities: + - uid: 70 + components: + - type: Transform + pos: 0.28666458,-1.4368018 + parent: 1 +- proto: DrinkSpaceUpBottleFull + entities: + - uid: 71 + components: + - type: Transform + pos: 0.6929146,-1.4993457 + parent: 1 +- proto: EmergencyLight + entities: + - uid: 72 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 73 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight +- proto: FoodSnackEnergy + entities: + - uid: 74 + components: + - type: Transform + pos: -1.2862521,-1.5931605 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: -1.3695854,-1.2908673 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 164 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 76 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 77 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 78 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 79 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 80 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 81 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 82 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 166 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 83 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 165 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 84 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 85 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 86 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentScrubber + entities: + - uid: 163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 89 + components: + - type: Transform + pos: -0.5,-8.5 + parent: 1 +- proto: Grille + entities: + - uid: 90 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 100 + components: + - type: Transform + pos: 1.5,-8.5 + parent: 1 +- proto: MedkitFilled + entities: + - uid: 101 + components: + - type: Transform + pos: -1.6612521,-1.7599429 + parent: 1 +- proto: Paper + entities: + - uid: 102 + components: + - type: Transform + pos: -0.7629169,0.68541837 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: -0.6379169,0.518636 + parent: 1 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 104 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 +- proto: PlushieRouny + entities: + - uid: 106 + components: + - type: Transform + pos: -0.2629169,0.8417771 + parent: 1 +- proto: PortableGeneratorPacman + entities: + - uid: 87 + components: + - type: Transform + pos: -2.5,-8.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 107 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 109 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredLightBlueInterior + entities: + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 111 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 +- proto: RandomPosterLegit + entities: + - uid: 112 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 88 + components: + - type: Transform + pos: -1.484477,-8.427256 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 113 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 121 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 +- proto: SignalSwitch + entities: + - uid: 123 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 11: + - On: Open + - Off: Close + 12: + - On: Open + - Off: Close +- proto: SignalSwitchDirectional + entities: + - uid: 124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 14: + - On: Open + - Off: Close + 13: + - On: Open + - Off: Close +- proto: SubstationWallBasic + entities: + - uid: 125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-9.5 + parent: 1 +- proto: Table + entities: + - uid: 126 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 127 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 128 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 130 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 131 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-10.5 + parent: 1 + - uid: 133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-10.5 + parent: 1 + - uid: 134 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-10.5 + parent: 1 +- proto: ToolboxMechanicalFilled + entities: + - uid: 135 + components: + - type: Transform + pos: -1.680508,-3.6486564 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 136 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 68: + - Left: Forward + - Right: Reverse + - Middle: Off + 69: + - Left: Forward + - Right: Reverse + - Middle: Off + 66: + - Left: Forward + - Right: Reverse + - Middle: Off + 67: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: WallShuttle + entities: + - uid: 137 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 1.5,-9.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: -2.5,-9.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -1.5,-9.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: 0.5,-10.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -1.5,-10.5 + parent: 1 +- proto: WallShuttleDiagonal + entities: + - uid: 157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - uid: 158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 161 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-10.5 + parent: 1 + - uid: 162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-10.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 172 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: WarpPoint + location: NTSV Tote +... diff --git a/Resources/Maps/Shuttles/DeltaV/ntv-pulse.yml b/Resources/Maps/Shuttles/DeltaV/ntv-pulse.yml new file mode 100644 index 00000000000..f68aebe500d --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/ntv-pulse.yml @@ -0,0 +1,3622 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 12: FloorBar + 24: FloorDark + 29: FloorDarkMono + 36: FloorEighties + 40: FloorGlass + 53: FloorMetalDiamond + 61: FloorReinforced + 81: FloorTechMaint + 82: FloorTechMaint2 + 94: FloorWood + 95: FloorWoodTile + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAUgAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUgAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAPQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUgAAAAAAUgAAAAAAYQAAAAAAUQAAAAAAGAAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAUQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAYQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAUgAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAUgAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAUQAAAAAAYQAAAAAAUgAAAAAAUgAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAUQAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAAAAHQAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAGAAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQAAAAAAGAAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAGAAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAGAAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAYQAAAAAAHQAAAAAAHQAAAAAAYQAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAANQAAAAAANQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: GAAAAAAAGAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAJAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAAKAAAAAAADAAAAAAAKAAAAAAADAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAKAAAAAAADAAAAAAAKAAAAAAADAAAAAAADAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAAAAXwAAAAAAXwAAAAAAXwAAAAAAXwAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineW + decals: + 18: 2,0 + 19: 2,1 + 20: 2,2 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 0: -5,2 + 1: -4,2 + 2: -4,3 + 3: -5,3 + 4: -4,5 + 5: -5,5 + 6: -5,6 + 7: -4,6 + 14: -5,1 + 15: -4,1 + 16: -4,7 + 17: -5,7 + - node: + color: '#FFFFFFFF' + id: WarnBox + decals: + 21: -1,-6 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 8: 0,7 + 9: 1,7 + 10: 2,7 + 11: 3,7 + 12: 4,7 + 13: 5,7 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,-1: + 0: 4352 + 1: 36044 + -2,-3: + 0: 8192 + -2,-2: + 1: 3272 + -2,0: + 1: 65262 + -1,-2: + 1: 53008 + 0: 12 + -1,-1: + 1: 4095 + -1,-3: + 0: 57344 + -1,0: + 1: 30711 + 0,-3: + 0: 12288 + 0,-2: + 0: 1 + 1: 8136 + 0,-1: + 1: 3581 + 0,0: + 1: 12287 + 1,-2: + 1: 272 + 1,-1: + 1: 273 + 0: 17408 + 1,-3: + 0: 8192 + 1,0: + 1: 819 + -2,1: + 1: 61182 + -2,2: + 1: 3310 + 0: 256 + -1,1: + 1: 32759 + -1,2: + 1: 26215 + -2,3: + 0: 8 + -1,3: + 0: 15 + 0,1: + 1: 65535 + 0,2: + 1: 4095 + 0,3: + 0: 15 + 1,1: + 1: 13107 + 1,2: + 1: 273 + 0: 1088 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 +- proto: AirAlarm + entities: + - uid: 2 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,9.5 + parent: 1 + - type: DeviceList + devices: + - 306 + - 237 + - 236 + - 233 + - 540 + - uid: 3 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - type: DeviceList + devices: + - 233 + - 234 + - 305 + - 251 + - uid: 4 + components: + - type: Transform + pos: -3.5,9.5 + parent: 1 + - type: DeviceList + devices: + - 235 + - 234 + - 236 + - 237 + - 293 + - 279 + - 262 + - 308 + - uid: 5 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: DeviceList + devices: + - 235 + - 307 + - 303 + - 405 + - 22 + - 21 +- proto: AirCanister + entities: + - uid: 6 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 +- proto: Airlock + entities: + - uid: 7 + components: + - type: MetaData + name: Dorms + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 8 + components: + - type: MetaData + name: Dorms + - type: Transform + pos: 1.5,3.5 + parent: 1 +- proto: AirlockAtmospherics + entities: + - uid: 9 + components: + - type: MetaData + name: Atmospherics + - type: Transform + pos: 1.5,-2.5 + parent: 1 +- proto: AirlockCommand + entities: + - uid: 10 + components: + - type: MetaData + name: Bridge + - type: Transform + pos: -4.5,-0.5 + parent: 1 +- proto: AirlockEngineering + entities: + - uid: 11 + components: + - type: MetaData + name: Starboard Power Room + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 12 + components: + - type: MetaData + name: Port Power Room + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: AirlockExternalGlassLocked + entities: + - uid: 13 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 + - uid: 14 + components: + - type: Transform + pos: -2.5,11.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 + - uid: 15 + components: + - type: Transform + pos: -1.5,9.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 + - uid: 16 + components: + - type: Transform + pos: -1.5,11.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 17 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,5.5 + parent: 1 + - uid: 18 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,3.5 + parent: 1 +- proto: AirlockGlass + entities: + - uid: 19 + components: + - type: MetaData + name: Bar + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 20 + components: + - type: MetaData + name: Bar + - type: Transform + pos: -0.5,5.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 24 + components: + - type: MetaData + name: Dorms APC + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - uid: 25 + components: + - type: MetaData + name: Bar APC + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,7.5 + parent: 1 + - uid: 51 + components: + - type: MetaData + name: Cargo Hold APC + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-0.5 + parent: 1 +- proto: APCHighCapacity + entities: + - uid: 26 + components: + - type: MetaData + name: Engineering APC + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 +- proto: AppraisalTool + entities: + - uid: 27 + components: + - type: Transform + pos: -6.307013,2.3947196 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 28 + components: + - type: Transform + pos: -7.5,3.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -7.5,5.5 + parent: 1 +- proto: BarSignTheSun + entities: + - uid: 30 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 +- proto: Bed + entities: + - uid: 31 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 +- proto: BedsheetSpawner + entities: + - uid: 35 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 39 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 +- proto: BoxFolderGrey + entities: + - uid: 40 + components: + - type: Transform + pos: -1.6694045,-1.2501366 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 41 + components: + - type: Transform + pos: 3.5,9.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -5.5,6.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -5.5,7.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: -2.5,8.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: -2.5,9.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: 3.5,10.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 3.5,6.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: 4.5,6.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: 4.5,5.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 1.5,9.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: -2.5,10.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: -2.5,11.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -4.5,7.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: 5.5,9.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: -5.5,8.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: -5.5,9.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: -6.5,9.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: -5.5,-2.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 1 + - uid: 121 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 1 + - uid: 543 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 544 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 +- proto: CableHV + entities: + - uid: 123 + components: + - type: Transform + pos: -5.5,-6.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: -4.5,-7.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: 4.5,-6.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: 3.5,-7.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 310 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: -5.5,-4.5 + parent: 1 +- proto: CableMV + entities: + - uid: 133 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: -1.5,7.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 542 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 164 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 166 + components: + - type: Transform + pos: -1.5,10.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: -4.5,-6.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 3.5,-6.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: -2.5,10.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: -2.5,7.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: -5.5,7.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: -5.5,6.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: -5.5,5.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: -5.5,4.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 +- proto: Chair + entities: + - uid: 194 + components: + - type: Transform + pos: 5.5,6.5 + parent: 1 + - uid: 195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,4.5 + parent: 1 +- proto: ChairFolding + entities: + - uid: 196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.6808124,0.7546359 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 197 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-3.5 + parent: 1 +- proto: CigarGold + entities: + - uid: 200 + components: + - type: Transform + pos: -1.6225295,-1.4221318 + parent: 1 +- proto: CigPackBlack + entities: + - uid: 201 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.3932991,8.65878 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 202 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 + - uid: 203 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 +- proto: ClosetWallFireFilledRandom + entities: + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 1 + - uid: 206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 +- proto: ClothingOuterSuitEmergency + entities: + - uid: 207 + components: + - type: Transform + pos: 0.3350801,2.7445116 + parent: 1 +- proto: ComputerPowerMonitoring + entities: + - uid: 214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-4.5 + parent: 1 +- proto: ComputerRadar + entities: + - uid: 208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-3.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 209 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 +- proto: ComputerStationRecords + entities: + - uid: 210 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 +- proto: ConveyorBelt + entities: + - uid: 211 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,6.5 + parent: 1 + - uid: 212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,6.5 + parent: 1 +- proto: Dresser + entities: + - uid: 213 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 +- proto: DrinkHotCoffee + entities: + - uid: 216 + components: + - type: Transform + pos: -6.3448253,0.66087633 + parent: 1 +- proto: DrinkShotGlass + entities: + - uid: 218 + components: + - type: Transform + pos: 2.4960687,8.513334 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: 2.610652,8.7739315 + parent: 1 +- proto: DrinkVodkaBottleFull + entities: + - uid: 220 + components: + - type: Transform + pos: 2.173152,8.951138 + parent: 1 +- proto: EmergencyLight + entities: + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,2.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 223 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,8.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-5.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-5.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 227 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight +- proto: ExtinguisherCabinetFilled + entities: + - uid: 228 + components: + - type: Transform + pos: 5.5,9.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 +- proto: FaxMachineBase + entities: + - uid: 231 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - type: FaxMachine + name: NTV Pulse +- proto: filingCabinetDrawer + entities: + - uid: 232 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 +- proto: Firelock + entities: + - uid: 233 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 235 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 236 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 237 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 +- proto: FlashlightLantern + entities: + - uid: 238 + components: + - type: Transform + pos: -6.628556,2.4650698 + parent: 1 +- proto: Floodlight + entities: + - uid: 239 + components: + - type: Transform + pos: -1.1984899,0.8095134 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: -1.6047399,0.54891473 + parent: 1 +- proto: FloorDrain + entities: + - uid: 241 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 + - type: Fixtures + fixtures: {} + - uid: 242 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - type: Fixtures + fixtures: {} +- proto: FoodBoxPizzaFilled + entities: + - uid: 243 + components: + - type: Transform + pos: 4.233193,8.783597 + parent: 1 +- proto: FoodDonutJellySlugcat + entities: + - uid: 244 + components: + - type: Transform + pos: -6.6627116,0.43958795 + parent: 1 +- proto: FoodLemon + entities: + - uid: 245 + components: + - type: Transform + pos: 2.5562944,10.4626045 + parent: 1 +- proto: GasMixer + entities: + - uid: 246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - type: GasMixer + inletTwoConcentration: 0.78 + inletOneConcentration: 0.22 + targetPressure: 200 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPassiveVent + entities: + - uid: 247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + - uid: 249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 256 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 257 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 258 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 259 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 309 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeFourway + entities: + - uid: 290 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 295 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeStraight + entities: + - uid: 23 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 217 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 252 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 254 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 265 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 266 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 267 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 268 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 269 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 274 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 275 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 276 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 278 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 280 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 284 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 285 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 286 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 287 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 288 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 289 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 291 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 292 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 298 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 402 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 403 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 539 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 541 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 250 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 253 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 255 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 304 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + - uid: 301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + - uid: 302 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPressurePump + entities: + - uid: 294 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 21 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 279 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 303 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 540 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 2 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentScrubber + entities: + - uid: 22 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 306 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 307 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GeneratorWallmountBasic + entities: + - uid: 311 + components: + - type: Transform + pos: -5.5,-4.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 314 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 +- proto: Grille + entities: + - uid: 315 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 317 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: -3.5,10.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 321 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 1 + - uid: 322 + components: + - type: Transform + pos: -7.5,2.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: -7.5,4.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: 6.5,5.5 + parent: 1 + - uid: 325 + components: + - type: Transform + pos: 6.5,6.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 329 + components: + - type: Transform + pos: 1.5,11.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 330 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 1 +- proto: KitchenKnife + entities: + - uid: 331 + components: + - type: Transform + pos: 2.277079,10.592456 + parent: 1 +- proto: KitchenMicrowave + entities: + - uid: 332 + components: + - type: Transform + pos: 1.5,10.5 + parent: 1 +- proto: Lighter + entities: + - uid: 333 + components: + - type: Transform + pos: -1.2787795,-1.5315821 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: 1.7105913,8.442174 + parent: 1 +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 335 + components: + - type: Transform + pos: -4.5,10.5 + parent: 1 +- proto: MedkitFilled + entities: + - uid: 336 + components: + - type: Transform + pos: -6.3264723,2.7152433 + parent: 1 +- proto: MopItem + entities: + - uid: 337 + components: + - type: Transform + pos: 4.867828,9.871551 + parent: 1 +- proto: Paper + entities: + - uid: 338 + components: + - type: Transform + pos: -5.7074904,-2.1822014 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: -5.7074904,-2.3229237 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: -5.6918654,-2.4792824 + parent: 1 +- proto: Pen + entities: + - uid: 341 + components: + - type: Transform + pos: -5.4483495,-2.034501 + parent: 1 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 342 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 +- proto: PlushieLamp + entities: + - uid: 343 + components: + - type: Transform + pos: 2.506168,0.7502857 + parent: 1 +- proto: PlushieSharkBlue + entities: + - uid: 344 + components: + - type: Transform + pos: 4.764161,0.654635 + parent: 1 +- proto: PlushieSlime + entities: + - uid: 345 + components: + - type: Transform + pos: 4.164697,2.2077966 + parent: 1 +- proto: PlushieSnake + entities: + - uid: 346 + components: + - type: Transform + pos: 4.789697,2.541362 + parent: 1 +- proto: PortableGeneratorPacman + entities: + - uid: 533 + components: + - type: Transform + pos: -5.5,-5.5 + parent: 1 + - uid: 534 + components: + - type: Transform + pos: 4.5,-5.5 + parent: 1 +- proto: PosterLegitBarDrinks + entities: + - uid: 347 + components: + - type: Transform + pos: 5.5,8.5 + parent: 1 +- proto: PottedPlantRandom + entities: + - uid: 348 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 +- proto: PowerCellRecharger + entities: + - uid: 349 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 350 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 352 + components: + - type: Transform + pos: -5.5,10.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 353 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 356 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredLightBlueInterior + entities: + - uid: 360 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,12.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 361 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,12.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 364 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredLightColoredFrostyBlue + entities: + - uid: 358 + components: + - type: Transform + pos: 0.5,10.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 359 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredlightLED + entities: + - uid: 365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,0.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,7.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 357 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 368 + components: + - type: Transform + pos: -4.5,-5.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 369 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 370 + components: + - type: Transform + pos: 3.5,-5.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,10.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 372 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: -6.5,2.5 + parent: 1 +- proto: RandomInstruments + entities: + - uid: 374 + components: + - type: Transform + pos: 5.5,5.5 + parent: 1 +- proto: RandomPainting + entities: + - uid: 375 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 376 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 +- proto: RandomPosterLegit + entities: + - uid: 377 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - uid: 378 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 379 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 +- proto: RandomVending + entities: + - uid: 380 + components: + - type: Transform + pos: 5.5,7.5 + parent: 1 +- proto: SchoolgirlUniformSpawner + entities: + - uid: 381 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 +- proto: Screwdriver + entities: + - uid: 382 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.2805943,-2.319523 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 535 + components: + - type: Transform + pos: -5.529743,-6.471845 + parent: 1 + - uid: 536 + components: + - type: Transform + pos: 4.501507,-6.45622 + parent: 1 +- proto: ShuttleWindow + entities: + - uid: 383 + components: + - type: Transform + pos: -7.5,2.5 + parent: 1 + - uid: 384 + components: + - type: Transform + pos: -3.5,10.5 + parent: 1 + - uid: 385 + components: + - type: Transform + pos: -7.5,4.5 + parent: 1 + - uid: 386 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 387 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 388 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 389 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 390 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 391 + components: + - type: Transform + pos: 6.5,5.5 + parent: 1 + - uid: 392 + components: + - type: Transform + pos: 6.5,6.5 + parent: 1 + - uid: 393 + components: + - type: Transform + pos: 1.5,11.5 + parent: 1 + - uid: 394 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 395 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 396 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 397 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 1 +- proto: SignalButton + entities: + - uid: 398 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,7.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 39: + - Pressed: Toggle +- proto: SMESBasic + entities: + - uid: 399 + components: + - type: MetaData + name: Port SMES + - type: Transform + pos: -4.5,-7.5 + parent: 1 + - uid: 400 + components: + - type: MetaData + name: Starboard SMES + - type: Transform + pos: 3.5,-7.5 + parent: 1 +- proto: soda_dispenser + entities: + - uid: 418 + components: + - type: Transform + pos: 3.5,10.5 + parent: 1 +- proto: StoolBar + entities: + - uid: 406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,7.5 + parent: 1 + - uid: 407 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,7.5 + parent: 1 + - uid: 408 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,7.5 + parent: 1 + - uid: 409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,7.5 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 410 + components: + - type: MetaData + name: port substation + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-7.5 + parent: 1 + - uid: 411 + components: + - type: MetaData + name: starboard substation + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-7.5 + parent: 1 +- proto: Table + entities: + - uid: 412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,5.5 + parent: 1 +- proto: TableCounterMetal + entities: + - uid: 413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-2.5 + parent: 1 + - uid: 414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-1.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 416 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 +- proto: TableCounterWood + entities: + - uid: 417 + components: + - type: Transform + pos: 1.5,10.5 + parent: 1 + - uid: 419 + components: + - type: Transform + pos: 2.5,10.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 3.5,10.5 + parent: 1 +- proto: TableGlass + entities: + - uid: 421 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 422 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 +- proto: TableWoodReinforced + entities: + - uid: 423 + components: + - type: Transform + pos: 2.5,8.5 + parent: 1 + - uid: 424 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 425 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - uid: 426 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 +- proto: Thruster + entities: + - uid: 427 + components: + - type: Transform + pos: 6.5,9.5 + parent: 1 + - uid: 428 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-8.5 + parent: 1 + - uid: 429 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-8.5 + parent: 1 + - uid: 430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-8.5 + parent: 1 + - uid: 431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - uid: 432 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 1 + - uid: 433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-8.5 + parent: 1 + - uid: 434 + components: + - type: Transform + pos: -7.5,10.5 + parent: 1 + - uid: 435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + - uid: 436 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 +- proto: ToolboxElectricalFilled + entities: + - uid: 437 + components: + - type: Transform + pos: 0.654815,-1.6675713 + parent: 1 +- proto: ToolboxEmergencyFilled + entities: + - uid: 438 + components: + - type: Transform + pos: 0.60379,2.4271085 + parent: 1 +- proto: ToolboxMechanicalFilled + entities: + - uid: 439 + components: + - type: Transform + pos: 0.3318984,-1.313158 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 440 + components: + - type: Transform + pos: -6.5,7.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 212: + - Left: Forward + - Right: Reverse + - Middle: Off + 211: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: VendingMachineBoozeUnlocked + entities: + - uid: 401 + components: + - type: Transform + pos: 4.5,10.5 + parent: 1 +- proto: VendingMachineChefvend + entities: + - uid: 441 + components: + - type: Transform + pos: 0.5,10.5 + parent: 1 +- proto: VendingMachineSalvage + entities: + - uid: 442 + components: + - type: Transform + pos: -5.5,10.5 + parent: 1 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 443 + components: + - type: Transform + pos: -6.5,8.5 + parent: 1 +- proto: WallShuttle + entities: + - uid: 444 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 445 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 446 + components: + - type: Transform + pos: -3.5,-8.5 + parent: 1 + - uid: 447 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 1 + - uid: 448 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 449 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 451 + components: + - type: Transform + pos: 4.5,-8.5 + parent: 1 + - uid: 452 + components: + - type: Transform + pos: 5.5,10.5 + parent: 1 + - uid: 453 + components: + - type: Transform + pos: 5.5,11.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: -5.5,-7.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: -6.5,-7.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: -6.5,-6.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: -6.5,-5.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: -6.5,-4.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 462 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 466 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 467 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 468 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 470 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - uid: 471 + components: + - type: Transform + pos: -5.5,-4.5 + parent: 1 + - uid: 472 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 473 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 474 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 475 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 476 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - uid: 477 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - uid: 478 + components: + - type: Transform + pos: -3.5,-7.5 + parent: 1 + - uid: 479 + components: + - type: Transform + pos: -4.5,-8.5 + parent: 1 + - uid: 480 + components: + - type: Transform + pos: -5.5,-8.5 + parent: 1 + - uid: 481 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 482 + components: + - type: Transform + pos: 3.5,-8.5 + parent: 1 + - uid: 483 + components: + - type: Transform + pos: 2.5,-8.5 + parent: 1 + - uid: 484 + components: + - type: Transform + pos: 2.5,-7.5 + parent: 1 + - uid: 485 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - uid: 486 + components: + - type: Transform + pos: -0.5,10.5 + parent: 1 + - uid: 487 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 488 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 489 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 490 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 491 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 492 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 + - uid: 493 + components: + - type: Transform + pos: -0.5,8.5 + parent: 1 + - uid: 494 + components: + - type: Transform + pos: -0.5,9.5 + parent: 1 + - uid: 495 + components: + - type: Transform + pos: -6.5,10.5 + parent: 1 + - uid: 496 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 497 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 498 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: 5.5,-1.5 + parent: 1 + - uid: 500 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 501 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 502 + components: + - type: Transform + pos: 5.5,-4.5 + parent: 1 + - uid: 503 + components: + - type: Transform + pos: 5.5,-5.5 + parent: 1 + - uid: 504 + components: + - type: Transform + pos: 5.5,-6.5 + parent: 1 + - uid: 505 + components: + - type: Transform + pos: 5.5,-7.5 + parent: 1 + - uid: 506 + components: + - type: Transform + pos: 4.5,-7.5 + parent: 1 + - uid: 507 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - uid: 508 + components: + - type: Transform + pos: -7.5,7.5 + parent: 1 + - uid: 509 + components: + - type: Transform + pos: -7.5,8.5 + parent: 1 + - uid: 510 + components: + - type: Transform + pos: 5.5,9.5 + parent: 1 + - uid: 511 + components: + - type: Transform + pos: -6.5,11.5 + parent: 1 + - uid: 512 + components: + - type: Transform + pos: 6.5,8.5 + parent: 1 + - uid: 513 + components: + - type: Transform + pos: 6.5,7.5 + parent: 1 + - uid: 514 + components: + - type: Transform + pos: 6.5,4.5 + parent: 1 + - uid: 515 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 516 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 517 + components: + - type: Transform + pos: -3.5,9.5 + parent: 1 + - uid: 518 + components: + - type: Transform + pos: -7.5,9.5 + parent: 1 + - uid: 519 + components: + - type: Transform + pos: -5.5,11.5 + parent: 1 + - uid: 520 + components: + - type: Transform + pos: -4.5,11.5 + parent: 1 + - uid: 521 + components: + - type: Transform + pos: -3.5,11.5 + parent: 1 + - uid: 522 + components: + - type: Transform + pos: -0.5,11.5 + parent: 1 + - uid: 523 + components: + - type: Transform + pos: 0.5,11.5 + parent: 1 + - uid: 524 + components: + - type: Transform + pos: 2.5,11.5 + parent: 1 + - uid: 525 + components: + - type: Transform + pos: 3.5,11.5 + parent: 1 + - uid: 526 + components: + - type: Transform + pos: 4.5,11.5 + parent: 1 + - uid: 527 + components: + - type: Transform + pos: 5.5,8.5 + parent: 1 +- proto: WallShuttleDiagonal + entities: + - uid: 528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-0.5 + parent: 1 + - uid: 529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,9.5 + parent: 1 + - uid: 530 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-0.5 + parent: 1 +- proto: WardrobeMixedFilled + entities: + - uid: 531 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 547 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - type: WarpPoint + location: NTV Pulse +- proto: Windoor + entities: + - uid: 532 + components: + - type: MetaData + name: Bar + - type: Transform + pos: 0.5,8.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/DeltaV/ntxr-saucer.yml b/Resources/Maps/Shuttles/DeltaV/ntxr-saucer.yml new file mode 100644 index 00000000000..efd3f56991f --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/ntxr-saucer.yml @@ -0,0 +1,2868 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 34: FloorDarkDiagonal + 35: FloorDarkDiagonalMini + 38: FloorDarkMono + 69: FloorMetalDiamond + 1: FloorMining + 3: FloorMiningDark + 2: FloorMiningLight + 74: FloorMono + 83: FloorReinforced + 97: FloorSteel + 102: FloorSteelDiagonal + 113: FloorTechMaint2 + 129: Lattice + 130: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: gQAAAAAAgQAAAAAAgQAAAAAAggAAAAAAJgAAAAAAIwAAAAAASgAAAAAAAQAAAAAAAwAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAUwAAAAAAggAAAAAAJgAAAAAAIwAAAAAAggAAAAAAAgAAAAAAAgAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAAAAAUwAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAIwAAAAAAUwAAAAAAAgAAAAAAAgAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAJgAAAAAAIwAAAAAAggAAAAAAAgAAAAAAAgAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIwAAAAAAIwAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAZgAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAAAZgAAAAAAUwAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAAAAAUwAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAARQAAAAAARQAAAAAASgAAAAAAIwAAAAAAJgAAAAAAggAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAARQAAAAAAggAAAAAAggAAAAAAIwAAAAAAJgAAAAAAggAAAAAAUwAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAARQAAAAAAggAAAAAAUwAAAAAAIwAAAAAAJgAAAAAAIgAAAAAAIgAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAIwAAAAAAJgAAAAAAJgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAIwAAAAAAIwAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAUwAAAAAAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAggAAAAAAggAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAggAAAAAAggAAAAAAggAAAAAAIwAAAAAAIwAAAAAAJgAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAcQAAAAAAcQAAAAAAggAAAAAAIwAAAAAAJgAAAAAAJgAAAAAAIgAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAcQAAAAAAcQAAAAAAUwAAAAAAIwAAAAAAJgAAAAAAIgAAAAAAIgAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAAAAcQAAAAAAcQAAAAAAggAAAAAAIwAAAAAAJgAAAAAAggAAAAAAUwAAAAAAgQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIwAAAAAAIwAAAAAAggAAAAAAggAAAAAAggAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAJgAAAAAAIwAAAAAAggAAAAAAAQAAAAAAAQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAAAAAUwAAAAAAIgAAAAAAIgAAAAAAJgAAAAAAIwAAAAAAUwAAAAAAAQAAAAAAAQAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAUwAAAAAAggAAAAAAJgAAAAAAIwAAAAAAggAAAAAAAQAAAAAAAwAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: [] + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 55 + 1: 64512 + 0,-1: + 0: 12288 + 1: 3327 + -1,0: + 0: 140 + 1: 63249 + 0,1: + 1: 13087 + 0: 34816 + -1,1: + 1: 34831 + 0: 8704 + 0,2: + 0: 4 + 1,0: + 1: 48063 + 1,1: + 1: 1 + 0: 32 + 1,-1: + 1: 48049 + 2,0: + 1: 4369 + 0: 8192 + 2,1: + 0: 1 + 2,-1: + 1: 4368 + 0: 33 + -2,0: + 1: 48063 + -3,0: + 0: 32768 + -2,-1: + 1: 48048 + 0: 1 + -2,1: + 0: 193 + -1,-1: + 1: 6143 + 0: 32768 + -1,2: + 0: 4 + -3,-1: + 0: 128 + -2,-2: + 0: 49152 + -1,-2: + 0: 512 + 1: 51200 + 0,-2: + 1: 29184 + 0: 2048 + 1,-2: + 0: 8192 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: AirAlarm + entities: + - uid: 2 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,1.5 + parent: 1 + - type: DeviceList + devices: + - 233 + - uid: 3 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,6.5 + parent: 1 + - type: DeviceList + devices: + - 228 + - 232 + - 137 + - uid: 4 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 + - type: DeviceList + devices: + - 136 + - 135 + - 131 + - 132 + - 230 + - 226 + - 137 + - uid: 5 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 1 + - type: DeviceList + devices: + - 134 + - 133 + - 129 + - 130 + - 231 + - 227 + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-0.5 + parent: 1 + - type: DeviceList + devices: + - 229 + - 234 +- proto: AirCanister + entities: + - uid: 7 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 +- proto: AirlockCommandGlass + entities: + - uid: 8 + components: + - type: MetaData + name: Bridge + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 +- proto: AirlockEngineeringGlass + entities: + - uid: 9 + components: + - type: MetaData + name: Engineering + - type: Transform + pos: -5.5,0.5 + parent: 1 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 10 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 +- proto: AirlockScienceGlass + entities: + - uid: 12 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 13 + components: + - type: MetaData + name: Propulsion APC + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 14 + components: + - type: MetaData + name: Bridge APC + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 15 + components: + - type: MetaData + name: Engineering APC + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,0.5 + parent: 1 + - uid: 16 + components: + - type: MetaData + name: Laboratory APC + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-1.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 17 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 19 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 +- proto: BoxFolderBlack + entities: + - uid: 20 + components: + - type: Transform + pos: 7.375682,3.6192398 + parent: 1 +- proto: ButtonFrameCaution + entities: + - uid: 21 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,2.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 22 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: -8.5,0.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: -6.5,2.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: 7.5,1.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: 7.5,2.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 +- proto: CableHV + entities: + - uid: 75 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 +- proto: CableMV + entities: + - uid: 78 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: -8.5,0.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: -6.5,2.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 7.5,-0.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 7.5,-1.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 8.5,-1.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,3.5 + parent: 1 + - uid: 114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,2.5 + parent: 1 + - uid: 115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,3.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,1.5 + parent: 1 +- proto: ChairOfficeDark + entities: + - uid: 117 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.11448622,6.8175697 + parent: 1 + - uid: 118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.1198888,6.8331947 + parent: 1 +- proto: ChairOfficeLight + entities: + - uid: 119 + components: + - type: Transform + pos: 8.473543,2.5225933 + parent: 1 +- proto: ClosetFireFilled + entities: + - uid: 120 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-0.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 +- proto: ComputerAnalysisConsole + entities: + - uid: 123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,1.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 268: + - ArtifactAnalyzerSender: ArtifactAnalyzerReceiver +- proto: ComputerRadar + entities: + - uid: 124 + components: + - type: Transform + pos: -0.5,7.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 125 + components: + - type: Transform + pos: 0.5,7.5 + parent: 1 +- proto: ComputerStationRecords + entities: + - uid: 126 + components: + - type: Transform + pos: 1.5,7.5 + parent: 1 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 127 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 129 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 130 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 131 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 132 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 133 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 134 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - uid: 135 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 136 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - uid: 137 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - 3 +- proto: FoodTinBeansTrash + entities: + - uid: 138 + components: + - type: Transform + pos: 7.995858,2.192436 + parent: 1 +- proto: FoodTinMRETrash + entities: + - uid: 139 + components: + - type: Transform + pos: -7.6862683,-0.79131925 + parent: 1 +- proto: GasMixerFlipped + entities: + - uid: 140 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' +- proto: GasPassiveVent + entities: + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 143 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 144 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 146 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 149 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 156 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 159 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 160 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 161 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPipeFourway + entities: + - uid: 162 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 163 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 164 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 167 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 170 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 173 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 174 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 178 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 181 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 184 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 187 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 188 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 189 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 190 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 191 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 192 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 193 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 196 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 200 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 201 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 203 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 205 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 211 + components: + - type: Transform + pos: 5.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 214 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 216 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 217 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 221 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPort + entities: + - uid: 222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + - uid: 223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-2.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#03FCD3FF' +- proto: GasPressurePump + entities: + - uid: 225 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentPump + entities: + - uid: 226 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 228 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 6 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasVentScrubber + entities: + - uid: 230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 4 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 231 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 5 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 232 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 3 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,2.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 234 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 6 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GeneratorWallmountAPU + entities: + - uid: 235 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 236 + components: + - type: Transform + pos: -7.5,2.5 + parent: 1 +- proto: Grille + entities: + - uid: 237 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 244 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,7.5 + parent: 1 + - uid: 248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,8.5 + parent: 1 + - uid: 249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,8.5 + parent: 1 + - uid: 250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,8.5 + parent: 1 + - uid: 251 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,7.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 257 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 258 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 +- proto: GrilleDiagonal + entities: + - uid: 259 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 260 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + - uid: 261 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 + - uid: 264 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,8.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,0.5 + parent: 1 +- proto: IntercomScience + entities: + - uid: 266 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 267 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 +- proto: MachineArtifactAnalyzer + entities: + - uid: 268 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 +- proto: NitrogenCanister + entities: + - uid: 269 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 +- proto: NodeScanner + entities: + - uid: 270 + components: + - type: Transform + pos: 7.7409034,3.4383478 + parent: 1 +- proto: OxygenCanister + entities: + - uid: 271 + components: + - type: Transform + pos: -7.5,-1.5 + parent: 1 +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 272 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - uid: 273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - uid: 274 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 +- proto: PlasmaWindow + entities: + - uid: 275 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 276 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 277 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 278 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 +- proto: PortableGeneratorSuperPacman + entities: + - uid: 279 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 +- proto: PosterContrabandSaucerNumberOne + entities: + - uid: 280 + components: + - type: MetaData + desc: 'Out of every shuttle in the experimental fleet, Saucer was rated #1! Congratulations!' + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,5.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 281 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 282 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 283 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 1 + - uid: 284 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,2.5 + parent: 1 +- proto: PoweredSmallLight + entities: + - uid: 285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,6.5 + parent: 1 + - uid: 286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,3.5 + parent: 1 + - uid: 287 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + - uid: 288 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - uid: 289 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + - uid: 290 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,-2.5 + parent: 1 + - uid: 291 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 7.5,3.5 + parent: 1 +- proto: RandomArtifactSpawner + entities: + - uid: 292 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 +- proto: RandomPosterAny + entities: + - uid: 293 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 294 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 +- proto: RandomVendingDrinks + entities: + - uid: 295 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 1 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 296 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 297 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 1 + - uid: 298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + - uid: 299 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + - uid: 300 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 + - uid: 301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,2.5 + parent: 1 + - uid: 302 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,1.5 + parent: 1 + - uid: 303 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - uid: 304 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 305 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 306 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,7.5 + parent: 1 + - uid: 307 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,8.5 + parent: 1 + - uid: 308 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,8.5 + parent: 1 + - uid: 309 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,8.5 + parent: 1 + - uid: 310 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,7.5 + parent: 1 + - uid: 311 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: 9.5,-0.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 +- proto: ReinforcedPlasmaWindowDiagonal + entities: + - uid: 314 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - uid: 316 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 317 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + - uid: 318 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,8.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: -1.5,8.5 + parent: 1 +- proto: SheetUranium + entities: + - uid: 320 + components: + - type: Transform + pos: -6.4077168,2.6208723 + parent: 1 +- proto: SignalSwitchDirectional + entities: + - uid: 321 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 19: + - On: Open + - Off: Close +- proto: SubstationWallBasic + entities: + - uid: 322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,3.5 + parent: 1 +- proto: Table + entities: + - uid: 323 + components: + - type: Transform + pos: 7.5,3.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: 7.5,-2.5 + parent: 1 +- proto: TableReinforcedGlass + entities: + - uid: 325 + components: + - type: Transform + pos: -7.5,-0.5 + parent: 1 +- proto: Thruster + entities: + - uid: 326 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 1 + - uid: 328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - uid: 329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 330 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,1.5 + parent: 1 + - uid: 331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 + - uid: 332 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,0.5 + parent: 1 + - uid: 333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 +- proto: ToolboxElectricalFilled + entities: + - uid: 334 + components: + - type: Transform + pos: -7.511682,-0.39638507 + parent: 1 +- proto: ToolboxMechanicalFilled + entities: + - uid: 335 + components: + - type: Transform + pos: 7.492151,-2.442748 + parent: 1 +- proto: WallReinforced + entities: + - uid: 336 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 337 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 339 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 341 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - uid: 342 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,6.5 + parent: 1 + - uid: 343 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,6.5 + parent: 1 + - uid: 344 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + - uid: 345 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,5.5 + parent: 1 + - uid: 346 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,5.5 + parent: 1 + - uid: 347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,5.5 + parent: 1 + - uid: 348 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,5.5 + parent: 1 + - uid: 349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,5.5 + parent: 1 + - uid: 350 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 351 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 352 + components: + - type: Transform + pos: 6.5,4.5 + parent: 1 + - uid: 353 + components: + - type: Transform + pos: 9.5,-1.5 + parent: 1 + - uid: 354 + components: + - type: Transform + pos: 6.5,-3.5 + parent: 1 + - uid: 355 + components: + - type: Transform + pos: 7.5,-3.5 + parent: 1 + - uid: 356 + components: + - type: Transform + pos: 7.5,4.5 + parent: 1 + - uid: 357 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 358 + components: + - type: Transform + pos: 4.5,-4.5 + parent: 1 + - uid: 359 + components: + - type: Transform + pos: 3.5,-4.5 + parent: 1 + - uid: 360 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 361 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 362 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 363 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 364 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 1 + - uid: 365 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 + - uid: 366 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-3.5 + parent: 1 + - uid: 367 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-3.5 + parent: 1 + - uid: 368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-1.5 + parent: 1 + - uid: 369 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-0.5 + parent: 1 + - uid: 370 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,0.5 + parent: 1 + - uid: 371 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,1.5 + parent: 1 + - uid: 372 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,2.5 + parent: 1 + - uid: 373 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,4.5 + parent: 1 + - uid: 374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,4.5 + parent: 1 +- proto: WallReinforcedDiagonal + entities: + - uid: 375 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-3.5 + parent: 1 + - uid: 376 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-2.5 + parent: 1 + - uid: 377 + components: + - type: Transform + pos: -8.5,3.5 + parent: 1 + - uid: 378 + components: + - type: Transform + pos: -7.5,4.5 + parent: 1 + - uid: 379 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,3.5 + parent: 1 + - uid: 380 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-3.5 + parent: 1 + - uid: 381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 + parent: 1 + - uid: 382 + components: + - type: Transform + pos: -4.5,5.5 + parent: 1 + - uid: 383 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-4.5 + parent: 1 + - uid: 384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + - uid: 385 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-5.5 + parent: 1 + - uid: 386 + components: + - type: Transform + pos: -2.5,6.5 + parent: 1 + - uid: 387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,6.5 + parent: 1 + - uid: 388 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-2.5 + parent: 1 + - uid: 389 + components: + - type: Transform + pos: 8.5,-2.5 + parent: 1 + - uid: 390 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,3.5 + parent: 1 + - uid: 391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,4.5 + parent: 1 + - uid: 392 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,3.5 + parent: 1 + - uid: 393 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-4.5 + parent: 1 + - uid: 394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,5.5 + parent: 1 +- proto: WallSolid + entities: + - uid: 395 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,5.5 + parent: 1 + - uid: 396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,5.5 + parent: 1 + - uid: 397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-2.5 + parent: 1 + - uid: 398 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,-0.5 + parent: 1 + - uid: 399 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + - uid: 400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,3.5 + parent: 1 + - uid: 401 + components: + - type: Transform + pos: 6.5,-2.5 + parent: 1 + - uid: 402 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 403 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 404 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 +- proto: WallSolidDiagonal + entities: + - uid: 405 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 408 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 409 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,3.5 + parent: 1 + - uid: 410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,4.5 + parent: 1 + - uid: 411 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,4.5 + parent: 1 + - uid: 412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,3.5 + parent: 1 +- proto: WarpPointShuttle + entities: + - uid: 416 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - type: WarpPoint + location: NTXR Saucer +- proto: WindoorSecurePlasma + entities: + - uid: 413 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-0.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 414: + - DoorStatus: Close + - uid: 414 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-1.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 413: + - DoorStatus: Close +- proto: Wrench + entities: + - uid: 415 + components: + - type: Transform + pos: -6.8139668,-1.5055215 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/DeltaV/prospector.yml b/Resources/Maps/Shuttles/DeltaV/prospector.yml new file mode 100644 index 00000000000..07957ef67c7 --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/prospector.yml @@ -0,0 +1,1471 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 24: FloorDark + 71: FloorSteel + 77: FloorSteelMono + 81: FloorTechMaint + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAUQAAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAARwAAAAAARwAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAATQAAAAAATQAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: YQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAGAAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAARwAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAARwAAAAAAYQAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAAAGAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 29: -3,-3 + 30: -4,-2 + 31: -4,0 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 24: -1,-1 + 25: -1,-2 + 26: -2,-1 + 27: -2,-2 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 12: 1,3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineE + decals: + 10: 1,1 + 11: 1,2 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineN + decals: + 0: -3,-5 + 1: -2,-5 + 2: -1,-5 + 3: 0,-5 + 4: 1,-5 + 13: 0,3 + 14: -1,3 + 15: -2,3 + 16: -3,3 + - node: + color: '#334E6DC8' + id: BrickTileWhiteCornerNe + decals: + 21: 1,3 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineE + decals: + 22: 1,2 + 23: 1,1 + - node: + color: '#334E6DC8' + id: BrickTileWhiteLineN + decals: + 17: -3,3 + 18: -2,3 + 19: -1,3 + 20: 0,3 + - node: + color: '#A4610696' + id: BrickTileWhiteLineN + decals: + 5: -3,-5 + 6: -2,-5 + 7: -1,-5 + 8: 0,-5 + 9: 1,-5 + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: LoadingArea + decals: + 28: -2,-3 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,-1: + 0: 20032 + -2,0: + 0: 14 + 1: 35840 + -2,-2: + 1: 51200 + -1,-1: + 0: 65522 + -1,-2: + 1: 1 + 0: 61120 + -1,0: + 0: 61091 + 0,-2: + 0: 13072 + 1: 4 + 0,-1: + 0: 4368 + 1: 26208 + 0,0: + 0: 13104 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 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 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 +- proto: AirlockCargoGlass + entities: + - uid: 2 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: AirlockCommandGlass + entities: + - uid: 3 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 +- proto: AirlockExternalGlass + entities: + - uid: 4 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 1 + - uid: 5 + components: + - type: Transform + pos: -4.5,0.5 + parent: 1 +- proto: AirlockGlassShuttle + entities: + - uid: 6 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-1.5 + parent: 1 + - uid: 7 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,0.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 8 + components: + - type: MetaData + name: Main APC + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-6.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 9 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: -6.5,-1.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 +- proto: BlastDoorOpen + entities: + - uid: 14 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 19 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -5.5,-2.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 +- proto: CableHV + entities: + - uid: 51 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 +- proto: CableMV + entities: + - uid: 54 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 56 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-6.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 57 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 + - uid: 58 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 + - uid: 59 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 1 +- proto: ChairFolding + entities: + - uid: 60 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 61 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,2.5 + parent: 1 +- proto: ClothingNeckCloakMiner + entities: + - uid: 62 + components: + - type: Transform + pos: 1.5,1.5000001 + parent: 1 +- proto: ClothingOuterWinterMiner + entities: + - uid: 63 + components: + - type: Transform + pos: 1.5,1.5000001 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 64 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 +- proto: ComputerStationRecords + entities: + - uid: 65 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 +- proto: ConveyorBelt + entities: + - uid: 66 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 67 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - uid: 68 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 69 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 70 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-2.5 + parent: 1 + - uid: 71 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + - uid: 72 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-2.5 + parent: 1 +- proto: DrinkFlaskOld + entities: + - uid: 73 + components: + - type: Transform + pos: -2.483875,3.5550194 + parent: 1 +- proto: FaxMachineBase + entities: + - uid: 74 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 75 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 77 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeBend + entities: + - uid: 78 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 79 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 80 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 81 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 82 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 83 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 84 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 85 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 86 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 87 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 88 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 89 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 90 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasVentScrubber + entities: + - uid: 91 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 92 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 93 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 94 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 +- proto: Grille + entities: + - uid: 95 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 99 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-0.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 +- proto: GroundTobacco + entities: + - uid: 118 + components: + - type: Transform + pos: 1.6025628,-4.4469357 + parent: 1 +- proto: Gyroscope + entities: + - uid: 119 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 +- proto: IntercomSupply + entities: + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,1.5 + parent: 1 +- proto: LockerSalvageSpecialistFilled + entities: + - uid: 123 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 1 + - type: Lock + locked: False + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 124 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: Matchbox + entities: + - uid: 125 + components: + - type: Transform + pos: 1.6783751,-4.3457556 + parent: 1 +- proto: MiningDrill + entities: + - uid: 124 + components: + - type: Transform + parent: 123 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: OreProcessor + entities: + - uid: 126 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: PlasticFlapsAirtightClear + entities: + - uid: 127 + components: + - type: Transform + pos: -6.5,-2.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: -4.5,-2.5 + parent: 1 +- proto: PortableGeneratorSuperPacman + entities: + - uid: 129 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 +- proto: PottedPlantRandomPlastic + entities: + - uid: 130 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 132 + components: + - type: Transform + pos: -4.5,-4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-6.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredlightSodium + entities: + - uid: 135 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 136 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 +- proto: ReinforcedWindow + entities: + - uid: 137 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-0.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: -5.5,-3.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: 2.5,-4.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: -3.5,-5.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 2.5,-5.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: 0.5,-7.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 158 + components: + - type: Transform + pos: 0.5786131,-5.6619444 + parent: 1 +- proto: SignalButton + entities: + - uid: 159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 14: + - Pressed: Toggle + 15: + - Pressed: Toggle + 16: + - Pressed: Toggle + - uid: 161 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 14: + - Pressed: Toggle + 15: + - Pressed: Toggle + 16: + - Pressed: Toggle +- proto: SignShipDock + entities: + - uid: 162 + components: + - type: Transform + pos: -6.5,-3.5 + parent: 1 +- proto: SMESBasic + entities: + - uid: 163 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 +- proto: SmokingPipeFilledTobacco + entities: + - uid: 164 + components: + - type: Transform + pos: 1.4256667,-4.3204603 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 165 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 +- proto: Table + entities: + - uid: 166 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + - uid: 168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,3.5 + parent: 1 +- proto: Thruster + entities: + - uid: 169 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-7.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 + parent: 1 + - uid: 172 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,2.5 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 173 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 71: + - Left: Forward + - Right: Reverse + - Middle: Off + 70: + - Left: Forward + - Right: Reverse + - Middle: Off + 69: + - Left: Forward + - Right: Reverse + - Middle: Off + 72: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 174 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 68: + - Left: Forward + - Right: Reverse + - Middle: Off + 67: + - Left: Forward + - Right: Reverse + - Middle: Off + 66: + - Left: Forward + - Right: Reverse + - Middle: Off +- proto: WallReinforced + entities: + - uid: 175 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,-3.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: -6.5,1.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: -4.5,-3.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: -3.5,-3.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: -3.5,-6.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: 2.5,-6.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 1 + - uid: 194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 1 +- proto: WallSolid + entities: + - uid: 195 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 196 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 201 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - type: WarpPoint + location: NT-7 Prospector +- proto: WaterCooler + entities: + - uid: 198 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 +- proto: Window + entities: + - uid: 199 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/DeltaV/pts.yml b/Resources/Maps/Shuttles/DeltaV/pts.yml new file mode 100644 index 00000000000..ae1deb5976c --- /dev/null +++ b/Resources/Maps/Shuttles/DeltaV/pts.yml @@ -0,0 +1,1182 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 24: FloorDark + 29: FloorDarkMono + 33: FloorDarkPlastic + 1: FloorReinforced + 77: FloorSteelMono + 82: FloorTechMaint2 + 96: Lattice + 97: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAUgAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAIQAAAAADIQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAATQAAAAAAIQAAAAACTQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAATQAAAAADIQAAAAACTQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAIQAAAAACIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAAAYQAAAAAAHQAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGAAAAAACAQAAAAAAIQAAAAABIQAAAAAD + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAHQAAAAACYQAAAAAAHQAAAAADIQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAQAAAAAAIQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYQAAAAAAGAAAAAACGAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAGAAAAAAAGAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: HQAAAAACYQAAAAAAHQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAACYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAABTQAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAATQAAAAACYQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACYQAAAAAAHQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAQAAAAAAGAAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 0: 0,-2 + 1: 2,-2 + 2: 0,0 + 3: 2,0 + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Arrows + decals: + 4: -4,0 + 5: -4,-2 + 6: -2,0 + 7: -2,-2 + - node: + angle: 4.71238898038469 rad + color: '#FFFFFFFF' + id: Bot + decals: + 8: -2,-2 + 9: -4,-2 + 10: -4,0 + 11: -2,0 + 12: 0,0 + 13: 0,-2 + 14: 2,-2 + 15: 2,0 + 16: 1,-4 + 17: 1,-5 + 18: -3,-4 + 19: -3,-5 + 20: -1,-4 + 21: -1,-5 + - type: GridAtmosphere + version: 2 + data: + tiles: + -2,-1: + 0: 8 + 1: 2048 + -1,-1: + 1: 57294 + -2,0: + 1: 8 + -1,-2: + 0: 16 + 1: 60608 + -1,0: + 1: 52367 + 0: 256 + -1,-3: + 0: 49152 + 0,-3: + 0: 4096 + 0,-2: + 1: 12560 + 0: 64 + 0,-1: + 1: 24339 + 0: 8 + -1,1: + 0: 192 + 0,0: + 1: 4367 + 0: 1024 + 0,1: + 0: 16 + uniqueMixes: + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance + - type: BecomesStation + id: PTS + - type: SpreaderGrid + - type: GravityShake + shakeTimes: 10 +- proto: AirlockCommand + entities: + - uid: 2 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 +- proto: AirlockExternalGlass + entities: + - uid: 3 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 4 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 5 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 +- proto: AirlockGlassShuttle + entities: + - uid: 7 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - uid: 8 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - uid: 9 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 10 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 11 + components: + - type: MetaData + name: Main APC + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 +- proto: AtmosDeviceFanTiny + entities: + - uid: 12 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - uid: 13 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - uid: 14 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 15 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 16 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: -1.5,0.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 +- proto: CableHV + entities: + - uid: 43 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 +- proto: CableMV + entities: + - uid: 48 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: -0.5,-5.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: 0.5,-5.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 53 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 54 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - uid: 55 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 56 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 + - uid: 57 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 58 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,2.5 + parent: 1 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 60 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 +- proto: ComputerFrame + entities: + - uid: 62 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,2.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 63 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 +- proto: ComputerStationRecords + entities: + - uid: 64 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,2.5 + parent: 1 +- proto: FirelockGlass + entities: + - uid: 65 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 68 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeStraight + entities: + - uid: 69 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 70 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 71 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 72 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 73 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 74 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 75 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 76 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasPipeTJunction + entities: + - uid: 77 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasVentScrubber + entities: + - uid: 78 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 79 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GravityGeneratorMini + entities: + - uid: 80 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 1 +- proto: Grille + entities: + - uid: 81 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-0.5 + parent: 1 + - uid: 82 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 83 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 84 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 85 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - uid: 86 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 + - uid: 87 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 1 + - uid: 88 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 1 + - uid: 89 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,4.5 + parent: 1 + - uid: 90 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 1 + - uid: 91 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - uid: 92 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 1 + - uid: 93 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + - uid: 94 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 1 + - uid: 95 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 1 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - uid: 97 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-6.5 + parent: 1 + - uid: 98 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 1 + - uid: 99 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-4.5 + parent: 1 + - uid: 100 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 102 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 103 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 1 +- proto: IntercomCommon + entities: + - uid: 104 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,2.5 + parent: 1 +- proto: PortableGeneratorPacman + entities: + - uid: 105 + components: + - type: Transform + pos: 0.5,-6.5 + parent: 1 +- proto: PowerCellRecharger + entities: + - uid: 106 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 +- proto: Poweredlight + entities: + - uid: 107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,2.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-4.5 + parent: 1 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: ReinforcedWindow + entities: + - uid: 112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-0.5 + parent: 1 + - uid: 113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 114 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 115 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-0.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,3.5 + parent: 1 + - uid: 117 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 1 + - uid: 118 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,4.5 + parent: 1 + - uid: 119 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 1 + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 1 + - uid: 122 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + - uid: 123 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-7.5 + parent: 1 + - uid: 124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-7.5 + parent: 1 + - uid: 125 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-7.5 + parent: 1 + - uid: 126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-6.5 + parent: 1 + - uid: 127 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-6.5 + parent: 1 + - uid: 128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-4.5 + parent: 1 + - uid: 130 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 131 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 1 +- proto: SheetPlasma + entities: + - uid: 132 + components: + - type: Transform + pos: 0.52801514,-5.708868 + parent: 1 +- proto: SubstationWallBasic + entities: + - uid: 133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-5.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 134 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 + - uid: 135 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 +- proto: Thruster + entities: + - uid: 136 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-6.5 + parent: 1 + - uid: 137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + - uid: 138 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,2.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 +- proto: WallReinforced + entities: + - uid: 140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,1.5 + parent: 1 + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,1.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-2.5 + parent: 1 + - uid: 144 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-2.5 + parent: 1 + - uid: 146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-2.5 + parent: 1 + - uid: 147 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,1.5 + parent: 1 + - uid: 149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,1.5 + parent: 1 + - uid: 150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 1 + - uid: 151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,2.5 + parent: 1 + - uid: 152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,4.5 + parent: 1 + - uid: 153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,4.5 + parent: 1 + - uid: 154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 1 + - uid: 155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 1 + - uid: 156 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 1 + - uid: 157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-5.5 + parent: 1 + - uid: 158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-7.5 + parent: 1 + - uid: 159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-7.5 + parent: 1 +- proto: WarpPoint + entities: + - uid: 162 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - type: WarpPoint + location: Private Transport Shuttle +- proto: Window + entities: + - uid: 160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - uid: 161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,1.5 + parent: 1 +... diff --git a/Resources/Maps/Shuttles/pathfinder.yml b/Resources/Maps/Shuttles/pathfinder.yml index d28c1fc8206..ebe5cacfd37 100644 --- a/Resources/Maps/Shuttles/pathfinder.yml +++ b/Resources/Maps/Shuttles/pathfinder.yml @@ -20,8 +20,6 @@ entities: - type: MetaData name: Pathfinder - type: Transform - pos: -0.515625,-0.515625 - parent: invalid - type: MapGrid chunks: 0,0: @@ -3044,6 +3042,8 @@ entities: - type: Transform pos: 0.5,-0.5 parent: 1 + - type: WarpPoint + location: NTSP Bulwark - uid: 359 components: - type: Transform diff --git a/Resources/Migrations/eeMigration.yml b/Resources/Migrations/eeMigration.yml index 459af36aa9e..ea2ac962144 100644 --- a/Resources/Migrations/eeMigration.yml +++ b/Resources/Migrations/eeMigration.yml @@ -64,9 +64,6 @@ ClothingHeadHoodMystic: ClothingHeadHoodMysta # 2023-11-07 VendingMachineMailDrobe: VendingMachineCourierDrobe -#Delta V temporary changes. Remove When items are added. # TODO: EE remove when Rebased -ComputerShipyard: ComputerBroken -ShipyardComputerCircuitboard: null SpawnMobGolemCult: null ShogiBoard: CheckerBoard diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/unlockedboozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/unlockedboozeomat.yml new file mode 100644 index 00000000000..693bfdda26e --- /dev/null +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/unlockedboozeomat.yml @@ -0,0 +1,36 @@ +- type: vendingMachineInventory + id: BoozeOMatUnlockedInventory + startingInventory: + DrinkGlass: 15 #Kept glasses at top for ease to differentiate from booze. + DrinkShotGlass: 5 + DrinkGlassCoupeShaped: 5 + DrinkVacuumFlask: 1 + DrinkFlaskBar: 1 + DrinkShaker: 4 + CustomDrinkJug: 2 #to allow for custom drinks in the soda/booze dispensers + DrinkAleBottleFull: 8 + DrinkBeerBottleFull: 8 + DrinkBeerCan: 8 + DrinkWineCan: 8 + DrinkSolDryCan: 8 + DrinkWineBottleFull: 3 + DrinkSojuBottleFull: 1 + DrinkSakeBottleFull: 1 + DrinkGinBottleFull: 3 + DrinkRumBottleFull: 3 + DrinkTequilaBottleFull: 3 + DrinkVodkaBottleFull: 3 + DrinkWhiskeyBottleFull: 3 + #Mixers + DrinkColaBottleFull: 4 + DrinkCreamCarton: 5 + DrinkGrenadineBottleFull: 2 + DrinkJuiceLimeCarton: 3 + DrinkJuiceOrangeCarton: 3 + DrinkJuiceTomatoCarton: 3 + DrinkCoffeeLiqueurBottleFull: 1 + DrinkSodaWaterCan: 8 + DrinkSpaceMountainWindBottleFull: 3 + DrinkSpaceUpBottleFull: 3 + DrinkTonicWaterCan: 8 + DrinkVermouthBottleFull: 4 diff --git a/Resources/Prototypes/DeltaV/Catalog/Shipyard/categories.yml b/Resources/Prototypes/DeltaV/Catalog/Shipyard/categories.yml new file mode 100644 index 00000000000..2d11d3fae80 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Catalog/Shipyard/categories.yml @@ -0,0 +1,35 @@ +# class +- type: vesselCategory + id: Civilian + +- type: vesselCategory + id: Military + +- type: vesselCategory + id: Experimental + +# size +- type: vesselCategory + id: Small + +- type: vesselCategory + id: Medium + +- type: vesselCategory + id: Large + +# purpose +- type: vesselCategory + id: Medical + +- type: vesselCategory + id: Mining + +- type: vesselCategory + id: Research + +- type: vesselCategory + id: Shipping + +- type: vesselCategory + id: Transport diff --git a/Resources/Prototypes/DeltaV/Catalog/Shipyard/civilian.yml b/Resources/Prototypes/DeltaV/Catalog/Shipyard/civilian.yml new file mode 100644 index 00000000000..c3a0935e369 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Catalog/Shipyard/civilian.yml @@ -0,0 +1,76 @@ +- type: vessel + id: PTS + name: Private Transport Shuttle + description: A private transport vessel for up to 6 passengers. + price: 23000 + path: /Maps/Shuttles/DeltaV/pts.yml + categories: + - Civilian + - Small + - Transport + +- type: vessel + id: Barge + name: The Barge + description: A large shipping vessel repurposed into a salvage bar. + price: 45000 + path: /Maps/Shuttles/DeltaV/barge.yml + categories: + - Civilian + - Large + - Shipping + - Mining + +- type: vessel + id: Helix + name: NTMC Helix + description: A large mobile health clinic for servicing distant outposts. + price: 46000 + path: /Maps/Shuttles/DeltaV/helix.yml + categories: + - Civilian + - Medium + - Medical + +- type: vessel + id: Prospector + name: NT-7 Prospector + description: A small mining vessel designed to assist salvage operations. + price: 20800 + path: /Maps/Shuttles/DeltaV/prospector.yml + categories: + - Civilian + - Small + - Mining + +- type: vessel + id: Nomad + name: NTCV Nomad + description: A small shuttle for transporting up to 3 passengers with relative comfort. + price: 21000 + path: /Maps/Shuttles/DeltaV/ntcv-nomad.yml + categories: + - Civilian + - Small + - Transport + +- type: vessel + id: Tote + name: NTSV Tote + description: A small shipping vessel, adapted from the Nomad line of shuttles with room for 2 passengers. + price: 20000 + path: /Maps/Shuttles/DeltaV/ntsv-tote.yml + categories: + - Civilian + - Small + - Shipping + +- type: vessel + id: Pulse + name: NTV Pulse + description: A moderately sized shuttle intended for all-purpose use. It can comfortably accomodate a crew of up to ten people. + price: 50000 + path: /Maps/Shuttles/DeltaV/ntv-pulse.yml + categories: + - Civilian + - Medium diff --git a/Resources/Prototypes/DeltaV/Catalog/Shipyard/experimental.yml b/Resources/Prototypes/DeltaV/Catalog/Shipyard/experimental.yml new file mode 100644 index 00000000000..68132306ed3 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Catalog/Shipyard/experimental.yml @@ -0,0 +1,10 @@ +- type: vessel + id: Saucer + name: NTXR Saucer + description: A high-tech research vessel with a unique interior propulsion system. + price: 49000 + path: /Maps/Shuttles/DeltaV/ntxr-saucer.yml + categories: + - Experimental + - Medium + - Research diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/CircuitBoards/computer.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/CircuitBoards/computer.yml new file mode 100644 index 00000000000..dee6b595ba1 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/CircuitBoards/computer.yml @@ -0,0 +1,10 @@ +- type: entity + parent: BaseComputerCircuitboard + id: ShipyardComputerCircuitboard + name: shipyard computer board + description: A computer printed circuit board for a shipyard computer. + components: + - type: Sprite + state: cpu_supply + - type: ComputerBoard + prototype: ComputerShipyard diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml index 04785c042b6..3c1eed5892b 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml @@ -1,3 +1,12 @@ +# shuttles from the shipyard will try to dock here +- type: entity + parent: AirlockGlassShuttle + id: AirlockExternalGlassShuttleShipyard + suffix: External, Shipyard, Glass, Docking + components: + - type: PriorityDock + tag: DockShipyard + # Delta V specific roles - type: entity parent: AirlockScience diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Machines/computers.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/computers.yml new file mode 100644 index 00000000000..7d23abb0137 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/computers.yml @@ -0,0 +1,31 @@ +- type: entity + parent: BaseComputer + id: ComputerShipyard + name: shipyard console + description: Used to purchase and sell shuttles + components: + - type: ShipyardConsole + - type: AccessReader + access: [[ Captain ]] + - type: ActivatableUI + key: enum.ShipyardConsoleUiKey.Key + - type: UserInterface + interfaces: + enum.ShipyardConsoleUiKey.Key: + type: ShipyardConsoleBoundUserInterface + - type: Computer + board: ShipyardComputerCircuitboard + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#b89f25" + - type: Sprite + layers: + - map: ["computerLayerBody"] + state: computer + - map: ["computerLayerKeyboard"] + state: generic_keyboard + - map: ["computerLayerScreen"] + state: request + - map: ["computerLayerKeys"] + state: tech_key diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/vending_machines.yml index a0a511be2a5..5bdd8ee1ed6 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Machines/vending_machines.yml @@ -52,3 +52,13 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader access: [["Mail"]] + +- type: entity + parent: VendingMachineBooze + id: VendingMachineBoozeUnlocked + suffix: Unlocked + components: + - type: VendingMachine + pack: BoozeOMatUnlockedInventory + - type: AccessReader + enabled: false diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Walls/mountain.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Walls/mountain.yml index 575687336ad..7e1a769a1e0 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Walls/mountain.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Walls/mountain.yml @@ -6,7 +6,7 @@ description: A rocky asteroid. components: - type: Gatherable - whitelist: + toolWhitelist: tags: - Pickaxe - type: Sprite @@ -111,7 +111,7 @@ description: A rocky asteroid. components: - type: Gatherable - whitelist: + toolWhitelist: tags: - Pickaxe - type: OreVein diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index 36ea3e56a4e..506e725ace5 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -12,6 +12,9 @@ - type: Tag id: Directional +- type: Tag + id: DockShipyard + - type: Tag id: ForensicBeltEquip diff --git a/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml b/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml index 9ec6ce0ed11..15717877157 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml @@ -19,14 +19,12 @@ !type:PhysShapeCircle radius: 0.2 - type: InteractionOutline - # TODO: Nuke this shit - - type: OreVein - oreChance: 1.0 - currentOre: SpaceShrooms - type: Gatherable - whitelist: + toolWhitelist: components: - Hands + loot: + All: SpaceshroomGather - type: Damageable damageContainer: Inorganic damageModifierSet: Wood @@ -39,6 +37,13 @@ - !type:DoActsBehavior acts: [ "Destruction" ] +- type: entityLootTable + id: SpaceshroomGather + entries: + - id: FoodSpaceshroom + amount: 1 + maxAmount: 1 + - type: entity name: spaceshroom parent: FoodProduceBase diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml index 0728d2a9113..7b8d145e624 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml @@ -419,7 +419,7 @@ noRot: true - type: SoundOnGather - type: Gatherable - whitelist: + toolWhitelist: tags: - Pickaxe - type: Damageable diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml index d471a3ac964..41eeedcb5f3 100644 --- a/Resources/Prototypes/ore.yml +++ b/Resources/Prototypes/ore.yml @@ -1,9 +1,5 @@ # TODO: Kill ore veins # Split it into 2 components, 1 for "spawn XYZ on destruction" and 1 for "randomly select one of these for spawn on destruction" -# You could even just use an entityspawncollection instead. -- type: ore - id: SpaceShrooms - oreEntity: FoodSpaceshroom # High yields - type: ore From 36cd6ca4706196e9c3097efcff3443bc30896c19 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 6 Dec 2024 03:13:33 +0000 Subject: [PATCH 106/182] Automatic Changelog Update (#1314) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3d79721c185..a6d8fdef9df 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8444,3 +8444,10 @@ Entries: id: 6560 time: '2024-12-05T09:11:27.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1310 +- author: VMSolidus + changes: + - type: Add + message: Added Shipyards. + id: 6561 + time: '2024-12-06T03:13:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1314 From 1016a0809c6636147647347e9736846cf0536e68 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Fri, 6 Dec 2024 00:33:18 -0400 Subject: [PATCH 107/182] Port UserActivateInWorldEvent and BypassInteractionChecksComponent (#1295) # Description See https://github.com/space-wizards/space-station-14/pull/28393 and https://github.com/space-wizards/space-station-14/pull/28236 for breaking changes and extra information Works perfectly on a downstream of EE. Changes in third commit have been tested with doors. --- # Changelog nuh uh --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> --- .../Access/UI/AccessOverriderWindow.xaml.cs | 26 +-- Content.Client/Guidebook/GuidebookSystem.cs | 2 +- .../Tests/Buckle/BuckleTest.cs | 1 + .../Components/ActionBlocking/HandCuffTest.cs | 1 + .../Click/InteractionSystemTests.cs | 4 + .../Tests/Interaction/InteractionTest.cs | 1 + .../Tests/VendingMachineRestockTest.cs | 1 + .../Actions/ActionOnInteractSystem.cs | 2 +- .../Atmos/EntitySystems/FlammableSystem.cs | 2 +- .../Atmos/Monitor/Systems/AirAlarmSystem.cs | 3 + .../EntitySystems/GasPressurePumpSystem.cs | 3 + .../Binary/EntitySystems/GasValveSystem.cs | 4 + .../EntitySystems/GasVolumePumpSystem.cs | 3 + .../Trinary/EntitySystems/GasFilterSystem.cs | 3 + .../Trinary/EntitySystems/GasMixerSystem.cs | 3 + .../Unary/EntitySystems/GasCanisterSystem.cs | 3 + .../EntitySystems/GasOutletInjectorSystem.cs | 4 + .../CardboardBox/CardboardBoxSystem.cs | 19 +- .../Systems/SignalSwitchSystem.cs | 2 +- .../Disposal/Mailing/MailingUnitSystem.cs | 3 + .../Unit/EntitySystems/DisposalUnitSystem.cs | 3 + Content.Server/Doors/Systems/AirlockSystem.cs | 3 + .../Explosion/EntitySystems/TriggerSystem.cs | 3 + .../Fluids/EntitySystems/AbsorbentSystem.cs | 8 +- Content.Server/Gatherable/GatherableSystem.cs | 8 +- .../Interaction/InteractionPopupSystem.cs | 3 + .../EntitySystems/HandheldLightSystem.cs | 2 +- .../EntitySystems/MechGrabberSystem.cs | 7 +- .../EntitySystems/FoodGuideDataSystem.cs | 15 +- .../EntitySystems/SmokingSystem.Cigar.cs | 2 +- Content.Server/Pinpointer/PinpointerSystem.cs | 5 + .../EntitySystems/PowerReceiverSystem.cs | 8 +- .../Radiation/Systems/GeigerSystem.cs | 2 +- .../Radio/EntitySystems/JammerSystem.cs | 3 + .../Radio/EntitySystems/RadioDeviceSystem.cs | 6 + .../EntitySystems/RevenantSystem.Abilities.cs | 13 +- .../Shuttles/Systems/ThrusterSystem.cs | 5 + Content.Server/Tabletop/TabletopSystem.cs | 3 + .../Zombies/ZombieSystem.Transform.cs | 2 + .../ActionBlocker/ActionBlockerSystem.cs | 4 +- Content.Shared/Burial/BurialSystem.cs | 3 +- .../SharedSolutionContainerMixerSystem.cs | 4 + .../Systems/TwoWayLeverSystem.cs | 2 +- .../Doors/Systems/SharedDoorSystem.cs | 2 +- .../SharedHandsSystem.Interactions.cs | 14 ++ .../Interaction/ActivateInWorldEvent.cs | 37 ++- .../BypassInteractionChecksComponent.cs | 6 + .../Components/ComplexInteractionComponent.cs | 9 + .../Events/ContactInteractionEvent.cs | 2 +- .../Interaction/Events/UseAttemptEvent.cs | 9 +- Content.Shared/Interaction/InteractHand.cs | 54 ----- .../Interaction/SharedInteractionSystem.cs | 211 +++++++++++++----- .../Inventory/InventorySystem.Slots.cs | 2 +- Content.Shared/Lock/LockSystem.cs | 11 +- .../Mech/EntitySystems/SharedMechSystem.cs | 4 +- .../Projectiles/SharedProjectileSystem.cs | 2 +- .../SharedEntityStorageSystem.cs | 2 +- .../EntitySystems/SharedStorageSystem.cs | 69 +++--- Content.Shared/Storage/StorageComponent.cs | 4 +- .../SubFloor/SharedTrayScannerSystem.cs | 4 + .../Systems/SwapTeleporterSystem.cs | 4 + .../Toilet/Systems/SharedToiletSystem.cs | 2 +- .../Systems/SharedToolSystem.MultipleTool.cs | 2 +- .../UserInterface/ActivatableUISystem.cs | 2 +- Content.Shared/Verbs/SharedVerbSystem.cs | 24 +- .../Weapons/Misc/SharedGrapplingGunSystem.cs | 2 +- .../Misc/SharedTetherGunSystem.Force.cs | 3 + .../Weapons/Misc/SharedTetherGunSystem.cs | 3 + .../Systems/BatteryWeaponFireModesSystem.cs | 3 + .../Ranged/Systems/RechargeCycleAmmoSystem.cs | 3 + .../SharedGunSystem.ChamberMagazine.cs | 2 +- .../Mobs/Cyborgs/base_borg_chassis.yml | 1 + .../Prototypes/Entities/Mobs/NPCs/animals.yml | 1 + .../Prototypes/Entities/Mobs/NPCs/mimic.yml | 1 - .../Prototypes/Entities/Mobs/NPCs/xeno.yml | 1 + .../Entities/Mobs/Player/admin_ghost.yml | 2 + .../Entities/Mobs/Player/guardian.yml | 1 + .../Entities/Mobs/Player/silicon_base.yml | 1 + .../Prototypes/Entities/Mobs/Species/base.yml | 3 + 79 files changed, 466 insertions(+), 241 deletions(-) create mode 100644 Content.Shared/Interaction/Components/BypassInteractionChecksComponent.cs create mode 100644 Content.Shared/Interaction/Components/ComplexInteractionComponent.cs diff --git a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs index 6025c3b551f..b5c480ff71b 100644 --- a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs +++ b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs @@ -32,7 +32,7 @@ public AccessOverriderWindow(AccessOverriderBoundUserInterface owner, IPrototype { if (!prototypeManager.TryIndex(access, out var accessLevel)) { - logMill.Error($"Unable to find accesslevel for {access}"); + logMill.Error($"Unable to find access level for {access}"); continue; } @@ -66,11 +66,11 @@ public void UpdateState(AccessOverriderBoundUserInterfaceState state) if (state.MissingPrivilegesList != null && state.MissingPrivilegesList.Any()) { - List missingPrivileges = new List(); + var missingPrivileges = new List(); foreach (string tag in state.MissingPrivilegesList) { - string privilege = Loc.GetString(_prototypeManager.Index(tag)?.Name ?? "generic-unknown"); + var privilege = Loc.GetString(_prototypeManager.Index(tag)?.Name ?? "generic-unknown"); missingPrivileges.Add(privilege); } @@ -83,20 +83,20 @@ public void UpdateState(AccessOverriderBoundUserInterfaceState state) foreach (var (accessName, button) in _accessButtons) { button.Disabled = !interfaceEnabled; - if (interfaceEnabled) - { - button.Pressed = state.TargetAccessReaderIdAccessList?.Contains(accessName) ?? false; - button.Disabled = (!state.AllowedModifyAccessList?.Contains(accessName)) ?? true; - } + if (!interfaceEnabled) + return; + + button.Pressed = state.TargetAccessReaderIdAccessList?.Contains>(accessName) ?? false; + button.Disabled = (!state.AllowedModifyAccessList?.Contains>(accessName)) ?? true; } } - private void SubmitData() - { + private void SubmitData() => _owner.SubmitData( - // Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair - _accessButtons.Where(x => x.Value.Pressed).Select(x => new ProtoId(x.Key)).ToList()); - } + _accessButtons.Where(x => x.Value.Pressed) + .Select(x => new ProtoId(x.Key)) + .ToList() + ); } } diff --git a/Content.Client/Guidebook/GuidebookSystem.cs b/Content.Client/Guidebook/GuidebookSystem.cs index 0aa2c85142e..86dcf769424 100644 --- a/Content.Client/Guidebook/GuidebookSystem.cs +++ b/Content.Client/Guidebook/GuidebookSystem.cs @@ -148,7 +148,7 @@ private void OnGuidebookControlsTestInteractHand(EntityUid uid, GuidebookControl public void FakeClientActivateInWorld(EntityUid activated) { - var activateMsg = new ActivateInWorldEvent(GetGuidebookUser(), activated); + var activateMsg = new ActivateInWorldEvent(GetGuidebookUser(), activated, true); RaiseLocalEvent(activated, activateMsg); } diff --git a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs index 94572da4989..1b31fe38c28 100644 --- a/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs +++ b/Content.IntegrationTests/Tests/Buckle/BuckleTest.cs @@ -29,6 +29,7 @@ public sealed partial class BuckleTest components: - type: Buckle - type: Hands + - type: ComplexInteraction - type: InputMover - type: Body prototype: Human diff --git a/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/HandCuffTest.cs b/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/HandCuffTest.cs index 02245c783e8..2570e2246a6 100644 --- a/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/HandCuffTest.cs +++ b/Content.IntegrationTests/Tests/GameObjects/Components/ActionBlocking/HandCuffTest.cs @@ -22,6 +22,7 @@ public sealed class HandCuffTest components: - type: Cuffable - type: Hands + - type: ComplexInteraction - type: Body prototype: Human diff --git a/Content.IntegrationTests/Tests/Interaction/Click/InteractionSystemTests.cs b/Content.IntegrationTests/Tests/Interaction/Click/InteractionSystemTests.cs index 456df3b2f31..6ac40e92a1e 100644 --- a/Content.IntegrationTests/Tests/Interaction/Click/InteractionSystemTests.cs +++ b/Content.IntegrationTests/Tests/Interaction/Click/InteractionSystemTests.cs @@ -4,6 +4,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; +using Content.Shared.Interaction.Components; using Content.Shared.Item; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -60,6 +61,7 @@ await server.WaitAssertion(() => { user = sEntities.SpawnEntity(null, coords); sEntities.EnsureComponent(user); + sEntities.EnsureComponent(user); handSys.AddHand(user, "hand", HandLocation.Left); target = sEntities.SpawnEntity(null, coords); item = sEntities.SpawnEntity(null, coords); @@ -193,6 +195,7 @@ await server.WaitAssertion(() => { user = sEntities.SpawnEntity(null, coords); sEntities.EnsureComponent(user); + sEntities.EnsureComponent(user); handSys.AddHand(user, "hand", HandLocation.Left); target = sEntities.SpawnEntity(null, new MapCoordinates(new Vector2(SharedInteractionSystem.InteractionRange - 0.1f, 0), mapId)); item = sEntities.SpawnEntity(null, coords); @@ -327,6 +330,7 @@ await server.WaitAssertion(() => { user = sEntities.SpawnEntity(null, coords); sEntities.EnsureComponent(user); + sEntities.EnsureComponent(user); handSys.AddHand(user, "hand", HandLocation.Left); target = sEntities.SpawnEntity(null, coords); item = sEntities.SpawnEntity(null, coords); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs index f07f23d84c8..457d3e31920 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs @@ -139,6 +139,7 @@ public abstract partial class InteractionTest prototype: Aghost - type: DoAfter - type: Hands + - type: ComplexInteraction - type: MindContainer - type: Stripping - type: Puller diff --git a/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs b/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs index 5bfebfbd530..e067a27854f 100644 --- a/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs +++ b/Content.IntegrationTests/Tests/VendingMachineRestockTest.cs @@ -27,6 +27,7 @@ public sealed class VendingMachineRestockTest : EntitySystem id: HumanVendingDummy components: - type: Hands + - type: ComplexInteraction - type: Body prototype: Human diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index b6eec0ce0f6..28685858592 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -39,7 +39,7 @@ private void OnMapInit(EntityUid uid, ActionOnInteractComponent component, MapIn private void OnActivate(EntityUid uid, ActionOnInteractComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; if (component.ActionEntities is not {} actionEnts) diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index cf6287d7001..0f6ce0780e4 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -156,7 +156,7 @@ private void OnInteractUsing(EntityUid uid, FlammableComponent flammable, Intera private void OnExtinguishActivateInWorld(EntityUid uid, ExtinguishOnInteractComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; if (!TryComp(uid, out FlammableComponent? flammable)) diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index 04a9023c1dd..2f56142aa60 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -246,6 +246,9 @@ private void OnShutdown(EntityUid uid, AirAlarmComponent component, ComponentShu private void OnActivate(EntityUid uid, AirAlarmComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (TryComp(uid, out var panel) && panel.Open) { args.Handled = false; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs index 83b7b67ba46..871c84e0588 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs @@ -103,6 +103,9 @@ private void OnPumpLeaveAtmosphere(EntityUid uid, GasPressurePumpComponent pump, private void OnPumpActivate(EntityUid uid, GasPressurePumpComponent pump, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs index ed7567428e1..4aeba2f8fe2 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs @@ -52,8 +52,12 @@ private void OnStartup(EntityUid uid, GasValveComponent component, ComponentStar private void OnActivate(EntityUid uid, GasValveComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + Toggle(uid, component); _audio.PlayPvs(component.ValveSound, uid, AudioParams.Default.WithVariation(0.25f)); + args.Handled = true; } public void Set(EntityUid uid, GasValveComponent component, bool value) diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs index cbcd1f4fa3b..d9fbeb474e2 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs @@ -133,6 +133,9 @@ private void OnVolumePumpLeaveAtmosphere(EntityUid uid, GasVolumePumpComponent p private void OnPumpActivate(EntityUid uid, GasVolumePumpComponent pump, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs index 007d304e98e..752d1e9eb83 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs @@ -99,6 +99,9 @@ private void OnFilterLeaveAtmosphere(EntityUid uid, GasFilterComponent filter, r private void OnFilterActivate(EntityUid uid, GasFilterComponent filter, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs index 4ab8572843b..178caeaa4a9 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs @@ -139,6 +139,9 @@ private void OnMixerLeaveAtmosphere(EntityUid uid, GasMixerComponent mixer, ref private void OnMixerActivate(EntityUid uid, GasMixerComponent mixer, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index 60ae230b1ba..29d00388b06 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -211,6 +211,9 @@ private void OnCanisterUpdated(EntityUid uid, GasCanisterComponent canister, ref private void OnCanisterActivate(EntityUid uid, GasCanisterComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (!TryComp(args.User, out var actor)) return; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs index 834a1dfb0b7..62039185170 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs @@ -33,8 +33,12 @@ private void OnMapInit(EntityUid uid, GasOutletInjectorComponent component, MapI private void OnActivate(EntityUid uid, GasOutletInjectorComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + component.Enabled = !component.Enabled; UpdateAppearance(uid, component); + args.Handled = true; } public void UpdateAppearance(EntityUid uid, GasOutletInjectorComponent component, AppearanceComponent? appearance = null) diff --git a/Content.Server/CardboardBox/CardboardBoxSystem.cs b/Content.Server/CardboardBox/CardboardBoxSystem.cs index b9c9427d5c8..836dc485d92 100644 --- a/Content.Server/CardboardBox/CardboardBoxSystem.cs +++ b/Content.Server/CardboardBox/CardboardBoxSystem.cs @@ -36,7 +36,6 @@ public override void Initialize() SubscribeLocalEvent(AfterStorageClosed); SubscribeLocalEvent(OnGetAdditionalAccess); SubscribeLocalEvent(OnInteracted); - SubscribeLocalEvent(OnNoHandInteracted); SubscribeLocalEvent(OnEntInserted); SubscribeLocalEvent(OnEntRemoved); @@ -45,9 +44,18 @@ public override void Initialize() private void OnInteracted(EntityUid uid, CardboardBoxComponent component, ActivateInWorldEvent args) { + if (args.Handled) + return; + if (!TryComp(uid, out var box)) return; + if (!args.Complex) + { + if (box.Open || !box.Contents.Contains(args.User)) + return; + } + args.Handled = true; _storage.ToggleOpen(args.User, uid, box); @@ -58,15 +66,6 @@ private void OnInteracted(EntityUid uid, CardboardBoxComponent component, Activa } } - private void OnNoHandInteracted(EntityUid uid, CardboardBoxComponent component, InteractedNoHandEvent args) - { - //Free the mice please - if (!TryComp(uid, out var box) || box.Open || !box.Contents.Contains(args.User)) - return; - - _storage.OpenStorage(uid); - } - private void OnGetAdditionalAccess(EntityUid uid, CardboardBoxComponent component, ref GetAdditionalAccessEvent args) { if (component.Mover == null) diff --git a/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs b/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs index f6469d68b93..67fad29d934 100644 --- a/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs +++ b/Content.Server/DeviceLinking/Systems/SignalSwitchSystem.cs @@ -26,7 +26,7 @@ private void OnInit(EntityUid uid, SignalSwitchComponent comp, ComponentInit arg private void OnActivated(EntityUid uid, SignalSwitchComponent comp, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; comp.State = !comp.State; diff --git a/Content.Server/Disposal/Mailing/MailingUnitSystem.cs b/Content.Server/Disposal/Mailing/MailingUnitSystem.cs index 8e9c9e4ba73..e1fbdbf0894 100644 --- a/Content.Server/Disposal/Mailing/MailingUnitSystem.cs +++ b/Content.Server/Disposal/Mailing/MailingUnitSystem.cs @@ -152,6 +152,9 @@ private void OnConfigurationUpdated(EntityUid uid, MailingUnitComponent componen private void HandleActivate(EntityUid uid, MailingUnitComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) { return; diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index 842463140e4..84a835f523c 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -263,6 +263,9 @@ public void ToggleEngage(EntityUid uid, SharedDisposalUnitComponent component) private void OnActivate(EntityUid uid, SharedDisposalUnitComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (!TryComp(args.User, out ActorComponent? actor)) { return; diff --git a/Content.Server/Doors/Systems/AirlockSystem.cs b/Content.Server/Doors/Systems/AirlockSystem.cs index 71f9347e9ed..fd5d3a9ceba 100644 --- a/Content.Server/Doors/Systems/AirlockSystem.cs +++ b/Content.Server/Doors/Systems/AirlockSystem.cs @@ -67,6 +67,9 @@ private void OnPowerChanged(EntityUid uid, AirlockComponent component, ref Power private void OnActivate(EntityUid uid, AirlockComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + if (TryComp(uid, out var panel) && panel.Open && TryComp(args.User, out var actor)) diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 8e0a75ea24f..999a85da5aa 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -218,6 +218,9 @@ private void OnSpawnTriggered(EntityUid uid, TriggerOnSpawnComponent component, private void OnActivate(EntityUid uid, TriggerOnActivateComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + Trigger(uid, args.User); args.Handled = true; } diff --git a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs index 3d0996a3802..52afdcf8b49 100644 --- a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs +++ b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs @@ -35,7 +35,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnAbsorbentInit); SubscribeLocalEvent(OnAfterInteract); - SubscribeLocalEvent(OnInteractNoHand); + SubscribeLocalEvent(OnActivateInWorld); SubscribeLocalEvent(OnAbsorbentSolutionChange); } @@ -85,12 +85,12 @@ private void UpdateAbsorbent(EntityUid uid, AbsorbentComponent component) Dirty(uid, component); } - private void OnInteractNoHand(EntityUid uid, AbsorbentComponent component, InteractNoHandEvent args) + private void OnActivateInWorld(EntityUid uid, AbsorbentComponent component, UserActivateInWorldEvent args) { - if (args.Handled || args.Target == null) + if (args.Handled) return; - Mop(uid, args.Target.Value, uid, component); + Mop(uid, args.Target, uid, component); args.Handled = true; } diff --git a/Content.Server/Gatherable/GatherableSystem.cs b/Content.Server/Gatherable/GatherableSystem.cs index decb1e6500f..d438fb95e03 100644 --- a/Content.Server/Gatherable/GatherableSystem.cs +++ b/Content.Server/Gatherable/GatherableSystem.cs @@ -40,13 +40,13 @@ private void OnAttacked(Entity gatherable, ref AttackedEven private void OnActivate(Entity gatherable, ref ActivateInWorldEvent args) { - if (gatherable.Comp.ToolWhitelist?.IsValid(args.User, EntityManager) != true) + if (args.Handled || !args.Complex) return; if (_whitelistSystem.IsWhitelistFailOrNull(gatherable.Comp.ToolWhitelist, args.User)) return; - Gather(gatherable, args.User); + Gather(args.Target, args.User, gatherable.Comp); args.Handled = true; } @@ -56,9 +56,7 @@ public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, Gatherable return; if (TryComp(gatheredUid, out var soundComp)) - { _audio.PlayPvs(soundComp.Sound, Transform(gatheredUid).Coordinates); - } // Complete the gathering process _destructible.DestroyEntity(gatheredUid); @@ -67,7 +65,7 @@ public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, Gatherable if (component.Loot == null) return; - var pos = Transform(gatheredUid).MapPosition; + var pos = _transform.GetMapCoordinates(gatheredUid); foreach (var (tag, table) in component.Loot) { diff --git a/Content.Server/Interaction/InteractionPopupSystem.cs b/Content.Server/Interaction/InteractionPopupSystem.cs index a028598df03..c31f7d341f8 100644 --- a/Content.Server/Interaction/InteractionPopupSystem.cs +++ b/Content.Server/Interaction/InteractionPopupSystem.cs @@ -32,6 +32,9 @@ public override void Initialize() private void OnActivateInWorld(EntityUid uid, InteractionPopupComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (!component.OnActivate) return; diff --git a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs index 813f8c407b7..a5a41bcc105 100644 --- a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs +++ b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs @@ -126,7 +126,7 @@ private void OnRemove(Entity ent, ref ComponentRemove ar private void OnActivate(Entity ent, ref ActivateInWorldEvent args) { - if (args.Handled || !ent.Comp.ToggleOnInteract) + if (args.Handled || !args.Complex || !ent.Comp.ToggleOnInteract) return; if (ToggleStatus(args.User, ent)) diff --git a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs index 0ade8928f9f..e04499e2abc 100644 --- a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs +++ b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs @@ -40,7 +40,7 @@ public override void Initialize() SubscribeLocalEvent(OnEquipmentRemoved); SubscribeLocalEvent(OnAttemptRemove); - SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnInteract); SubscribeLocalEvent(OnMechGrab); } @@ -124,10 +124,11 @@ private void OnUiStateReady(EntityUid uid, MechGrabberComponent component, MechE args.States.Add(GetNetEntity(uid), state); } - private void OnInteract(EntityUid uid, MechGrabberComponent component, InteractNoHandEvent args) + private void OnInteract(EntityUid uid, MechGrabberComponent component, UserActivateInWorldEvent args) { - if (args.Handled || args.Target is not {} target) + if (args.Handled) return; + var target = args.Target; if (args.Target == args.User || component.DoAfter != null) return; diff --git a/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs index e3077476cec..56ade987629 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs @@ -27,14 +27,15 @@ public sealed class FoodGuideDataSystem : SharedFoodGuideDataSystem "Water" ]; - public static readonly string[] ComponentNamesBlacklist = ["HumanoidAppearance"]; + public static readonly string[] ComponentNamesBlacklist = ["HumanoidAppearance",]; - public static readonly string[] SuffixBlacklist = ["debug", "do not map", "admeme"]; + public static readonly string[] SuffixBlacklist = ["debug", "do not map", "admeme",]; [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; - private Dictionary> _sources = new(); + private readonly Dictionary> _sources = new(); public override void Initialize() { @@ -69,7 +70,7 @@ public void ReloadRecipes() ) continue; - if (ent.TryGetComponent(out var butcherable)) + if (ent.TryGetComponent(out var butcherable, _componentFactory)) { var butcheringSource = new FoodButcheringData(ent, butcherable); foreach (var butchlet in butcherable.SpawnedEntities) @@ -81,9 +82,9 @@ public void ReloadRecipes() } } - if (ent.TryGetComponent(out var slicable) && slicable.Slice is not null) + if (ent.TryGetComponent(out var sliceable, _componentFactory) && sliceable.Slice is not null) { - _sources.GetOrNew(slicable.Slice).Add(new FoodSlicingData(ent, slicable.Slice.Value, slicable.TotalCount)); + _sources.GetOrNew(sliceable.Slice).Add(new FoodSlicingData(ent, sliceable.Slice.Value, sliceable.TotalCount)); } } @@ -110,7 +111,7 @@ public void ReloadRecipes() foreach (var (result, sources) in _sources) { var proto = _protoMan.Index(result); - var composition = proto.TryGetComponent(out var food) && proto.TryGetComponent(out var manager) + var composition = proto.TryGetComponent(out var food, _componentFactory) && proto.TryGetComponent(out var manager) ? manager?.Solutions?[food.Solution]?.Contents?.ToArray() ?? [] : []; diff --git a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Cigar.cs b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Cigar.cs index 4e672444d18..510b9552a3d 100644 --- a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Cigar.cs +++ b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Cigar.cs @@ -18,7 +18,7 @@ private void InitializeCigars() private void OnCigarActivatedEvent(Entity entity, ref ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; if (!EntityManager.TryGetComponent(entity, out SmokableComponent? smokable)) diff --git a/Content.Server/Pinpointer/PinpointerSystem.cs b/Content.Server/Pinpointer/PinpointerSystem.cs index be9a715d5d5..eebf9cbbfde 100644 --- a/Content.Server/Pinpointer/PinpointerSystem.cs +++ b/Content.Server/Pinpointer/PinpointerSystem.cs @@ -45,10 +45,15 @@ private void UpdateAppearance(EntityUid uid, PinpointerComponent pinpointer, App private void OnActivate(EntityUid uid, PinpointerComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + TogglePinpointer(uid, component); if (!component.CanRetarget) LocateTarget(uid, component); + + args.Handled = true; } private void OnLocateTarget(ref FTLCompletedEvent ev) diff --git a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs index 2157a53a53d..9ba30813dd5 100644 --- a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs @@ -13,6 +13,8 @@ using Robust.Shared.Audio; using Robust.Shared.Utility; using Content.Shared.Emp; +using Content.Shared.Interaction; + namespace Content.Server.Power.EntitySystems { @@ -22,6 +24,7 @@ public sealed class PowerReceiverSystem : EntitySystem [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly SharedInteractionSystem _interaction = default!; private EntityQuery _recQuery; private EntityQuery _provQuery; @@ -120,12 +123,15 @@ private void OnReceiverDisconnected(EntityUid uid, ApcPowerProviderComponent pro private void AddSwitchPowerVerb(EntityUid uid, PowerSwitchComponent component, GetVerbsEvent args) { - if(!args.CanAccess || !args.CanInteract) + if (!args.CanAccess || !args.CanInteract) return; if (!HasComp(args.User)) return; + if (!_interaction.SupportsComplexInteractions(args.User)) + return; + if (!_recQuery.TryGetComponent(uid, out var receiver)) return; diff --git a/Content.Server/Radiation/Systems/GeigerSystem.cs b/Content.Server/Radiation/Systems/GeigerSystem.cs index 06e5911cb7c..df4438c91ea 100644 --- a/Content.Server/Radiation/Systems/GeigerSystem.cs +++ b/Content.Server/Radiation/Systems/GeigerSystem.cs @@ -35,7 +35,7 @@ public override void Initialize() private void OnActivate(Entity geiger, ref ActivateInWorldEvent args) { - if (args.Handled || geiger.Comp.AttachedToSuit) + if (args.Handled || !args.Complex || geiger.Comp.AttachedToSuit) return; args.Handled = true; diff --git a/Content.Server/Radio/EntitySystems/JammerSystem.cs b/Content.Server/Radio/EntitySystems/JammerSystem.cs index 6e0689390e1..4997430ac5f 100644 --- a/Content.Server/Radio/EntitySystems/JammerSystem.cs +++ b/Content.Server/Radio/EntitySystems/JammerSystem.cs @@ -68,6 +68,9 @@ public override void Update(float frameTime) private void OnActivate(EntityUid uid, RadioJammerComponent comp, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + var activated = !HasComp(uid) && _powerCell.TryGetBatteryFromSlot(uid, out var battery) && battery.CurrentCharge > GetCurrentWattage(comp); diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index 6ade9aea34e..02e46e6b11d 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -83,6 +83,9 @@ private void OnSpeakerInit(EntityUid uid, RadioSpeakerComponent component, Compo #region Toggling private void OnActivateMicrophone(EntityUid uid, RadioMicrophoneComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (!component.ToggleOnInteract) return; @@ -92,6 +95,9 @@ private void OnActivateMicrophone(EntityUid uid, RadioMicrophoneComponent compon private void OnActivateSpeaker(EntityUid uid, RadioSpeakerComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (!component.ToggleOnInteract) return; diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs index 75f81038945..0a72e48071e 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs @@ -45,7 +45,7 @@ public sealed partial class RevenantSystem private void InitializeAbilities() { - SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnInteract); SubscribeLocalEvent(OnSoulSearch); SubscribeLocalEvent(OnHarvest); @@ -55,11 +55,14 @@ private void InitializeAbilities() SubscribeLocalEvent(OnMalfunctionAction); } - private void OnInteract(EntityUid uid, RevenantComponent component, InteractNoHandEvent args) + private void OnInteract(EntityUid uid, RevenantComponent component, UserActivateInWorldEvent args) { - if (args.Target == args.User || args.Target == null) + if (args.Handled) + return; + + if (args.Target == args.User) return; - var target = args.Target.Value; + var target = args.Target; if (HasComp(target)) { @@ -80,6 +83,8 @@ private void OnInteract(EntityUid uid, RevenantComponent component, InteractNoHa { BeginHarvestDoAfter(uid, target, component, essence); } + + args.Handled = true; } private void BeginSoulSearchDoAfter(EntityUid uid, EntityUid target, RevenantComponent revenant) diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index 46715dd2916..2454856a701 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -132,15 +132,20 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref private void OnActivateThruster(EntityUid uid, ThrusterComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + component.Enabled ^= true; if (!component.Enabled) { DisableThruster(uid, component); + args.Handled = true; } else if (CanEnable(uid, component)) { EnableThruster(uid, component); + args.Handled = true; } } diff --git a/Content.Server/Tabletop/TabletopSystem.cs b/Content.Server/Tabletop/TabletopSystem.cs index 4376ec4bc61..caa319a0b71 100644 --- a/Content.Server/Tabletop/TabletopSystem.cs +++ b/Content.Server/Tabletop/TabletopSystem.cs @@ -141,6 +141,9 @@ private void AddPlayGameVerb(EntityUid uid, TabletopGameComponent component, Get private void OnTabletopActivate(EntityUid uid, TabletopGameComponent component, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + // Check that a player is attached to the entity. if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index d90ceab0dca..9e294c6aa58 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -22,6 +22,7 @@ using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Humanoid; +using Content.Shared.Interaction.Components; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; @@ -107,6 +108,7 @@ public void ZombifyEntity(EntityUid target, MobStateComponent? mobState = null) RemComp(target); RemComp(target); RemComp(target); + RemComp(target); if (HasComp(target)) // Prevent psionic zombies { diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index 47b3997806d..d2883b5ef5b 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -96,9 +96,9 @@ public bool CanInteract(EntityUid user, EntityUid? target) /// involve using a held entity. In the majority of cases, systems that provide interactions will not need /// to check this themselves. /// - public bool CanUseHeldEntity(EntityUid user) + public bool CanUseHeldEntity(EntityUid user, EntityUid used) { - var ev = new UseAttemptEvent(user); + var ev = new UseAttemptEvent(user, used); RaiseLocalEvent(user, ev); return !ev.Cancelled; diff --git a/Content.Shared/Burial/BurialSystem.cs b/Content.Shared/Burial/BurialSystem.cs index 76336e13989..1116c6797b2 100644 --- a/Content.Shared/Burial/BurialSystem.cs +++ b/Content.Shared/Burial/BurialSystem.cs @@ -84,10 +84,11 @@ private void OnAfterInteractUsing(EntityUid uid, GraveComponent component, After private void OnActivate(EntityUid uid, GraveComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; _popupSystem.PopupClient(Loc.GetString("grave-digging-requires-tool", ("grave", args.Target)), uid, args.User); + args.Handled = true; } private void OnGraveDigging(EntityUid uid, GraveComponent component, GraveDiggingDoAfterEvent args) diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerMixerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerMixerSystem.cs index 87957066125..c8e8e89ce53 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerMixerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerMixerSystem.cs @@ -31,7 +31,11 @@ public override void Initialize() private void OnActivateInWorld(Entity entity, ref ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + TryStartMix(entity, args.User); + args.Handled = true; } private void OnRemoveAttempt(Entity ent, ref ContainerIsRemovingAttemptEvent args) diff --git a/Content.Shared/DeviceLinking/Systems/TwoWayLeverSystem.cs b/Content.Shared/DeviceLinking/Systems/TwoWayLeverSystem.cs index c8783b05fc7..7e665dc1906 100644 --- a/Content.Shared/DeviceLinking/Systems/TwoWayLeverSystem.cs +++ b/Content.Shared/DeviceLinking/Systems/TwoWayLeverSystem.cs @@ -28,7 +28,7 @@ private void OnInit(EntityUid uid, TwoWayLeverComponent component, ComponentInit private void OnActivated(EntityUid uid, TwoWayLeverComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; component.State = component.State switch diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index ac9256ba3cf..4e493f158be 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -216,7 +216,7 @@ protected bool SetState(EntityUid uid, DoorState state, DoorComponent? door = nu #region Interactions protected void OnActivate(EntityUid uid, DoorComponent door, ActivateInWorldEvent args) { - if (args.Handled || !door.ClickOpen) + if (args.Handled || !args.Complex || !door.ClickOpen) return; if (!TryToggleDoor(uid, door, args.User, predicted: true)) diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs index 6d4d332479f..ae22efcd6a5 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs @@ -3,6 +3,7 @@ using Content.Shared.Hands.Components; using Content.Shared.IdentityManagement; using Content.Shared.Input; +using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; using Content.Shared.Localizations; using Robust.Shared.Input.Binding; @@ -23,6 +24,7 @@ private void InitializeInteractions() SubscribeAllEvent(HandleMoveItemFromHand); SubscribeAllEvent(HandleHandAltInteract); + SubscribeLocalEvent(OnGetUsedEntity); SubscribeLocalEvent(HandleExamined); CommandBinds.Builder @@ -181,6 +183,18 @@ public bool TryMoveHeldEntityToActiveHand(EntityUid uid, string handName, bool c return true; } + private void OnGetUsedEntity(EntityUid uid, HandsComponent component, ref GetUsedEntityEvent args) + { + if (args.Handled) + return; + + // TODO: this pattern is super uncommon, but it might be worth changing GetUsedEntityEvent to be recursive. + if (TryComp(component.ActiveHandEntity, out var virtualItem)) + args.Used = virtualItem.BlockingEntity; + else + args.Used = component.ActiveHandEntity; + } + //TODO: Actually shows all items/clothing/etc. private void HandleExamined(EntityUid examinedUid, HandsComponent handsComp, ExaminedEvent args) { diff --git a/Content.Shared/Interaction/ActivateInWorldEvent.cs b/Content.Shared/Interaction/ActivateInWorldEvent.cs index 9dbd636c48f..f7a1b7a799d 100644 --- a/Content.Shared/Interaction/ActivateInWorldEvent.cs +++ b/Content.Shared/Interaction/ActivateInWorldEvent.cs @@ -18,14 +18,49 @@ public sealed class ActivateInWorldEvent : HandledEntityEventArgs, ITargetedInte /// public EntityUid Target { get; } + /// + /// Whether or not can perform complex interactions or only basic ones. + /// + public bool Complex; + /// /// Set to true when the activation is logged by a specific logger. /// public bool WasLogged { get; set; } - public ActivateInWorldEvent(EntityUid user, EntityUid target) + public ActivateInWorldEvent(EntityUid user, EntityUid target, bool complex) + { + User = user; + Target = target; + Complex = complex; + } +} + +/// +/// Event raised on the user when it activates something in the world +/// +[PublicAPI] +public sealed class UserActivateInWorldEvent : HandledEntityEventArgs, ITargetedInteractEventArgs +{ + /// + /// Entity that activated the target world entity. + /// + public EntityUid User { get; } + + /// + /// Entity that was activated in the world. + /// + public EntityUid Target { get; } + + /// + /// Whether or not can perform complex interactions or only basic ones. + /// + public bool Complex; + + public UserActivateInWorldEvent(EntityUid user, EntityUid target, bool complex) { User = user; Target = target; + Complex = complex; } } diff --git a/Content.Shared/Interaction/Components/BypassInteractionChecksComponent.cs b/Content.Shared/Interaction/Components/BypassInteractionChecksComponent.cs new file mode 100644 index 00000000000..ca0ff963151 --- /dev/null +++ b/Content.Shared/Interaction/Components/BypassInteractionChecksComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Interaction.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BypassInteractionChecksComponent : Component; diff --git a/Content.Shared/Interaction/Components/ComplexInteractionComponent.cs b/Content.Shared/Interaction/Components/ComplexInteractionComponent.cs new file mode 100644 index 00000000000..ae7d65de366 --- /dev/null +++ b/Content.Shared/Interaction/Components/ComplexInteractionComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Interaction.Components; + +/// +/// This is used for identifying entities as being able to use complex interactions with the environment. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedInteractionSystem))] +public sealed partial class ComplexInteractionComponent : Component; diff --git a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs index c9d5fba2ed0..7be1c01c4ad 100644 --- a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs +++ b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs @@ -8,7 +8,7 @@ namespace Content.Shared.Interaction.Events; /// public sealed class ContactInteractionEvent : HandledEntityEventArgs { - public readonly EntityUid Other; + public EntityUid Other; public ContactInteractionEvent(EntityUid other) { diff --git a/Content.Shared/Interaction/Events/UseAttemptEvent.cs b/Content.Shared/Interaction/Events/UseAttemptEvent.cs index 3db185ed172..c28f2b65177 100644 --- a/Content.Shared/Interaction/Events/UseAttemptEvent.cs +++ b/Content.Shared/Interaction/Events/UseAttemptEvent.cs @@ -1,12 +1,9 @@ namespace Content.Shared.Interaction.Events { - public sealed class UseAttemptEvent : CancellableEntityEventArgs + public sealed class UseAttemptEvent(EntityUid uid, EntityUid used) : CancellableEntityEventArgs { - public UseAttemptEvent(EntityUid uid) - { - Uid = uid; - } + public EntityUid Uid { get; } = uid; - public EntityUid Uid { get; } + public EntityUid Used = used; } } diff --git a/Content.Shared/Interaction/InteractHand.cs b/Content.Shared/Interaction/InteractHand.cs index 63ea3b6f30d..1d2df4c28b2 100644 --- a/Content.Shared/Interaction/InteractHand.cs +++ b/Content.Shared/Interaction/InteractHand.cs @@ -51,58 +51,4 @@ public BeforeInteractHandEvent(EntityUid target) Target = target; } } - - /// - /// Low-level interaction event used for entities without hands. - /// - /// - /// SHIT IS CURSED. - /// - //TODO: KILLLLLLL - public sealed class InteractNoHandEvent : HandledEntityEventArgs - { - /// - /// Entity that triggered the interaction. - /// - public EntityUid User; - - /// - /// Entity that was interacted on. - /// - public EntityUid? Target; - - public EntityCoordinates ClickLocation; - - public InteractNoHandEvent(EntityUid user, EntityUid? target, EntityCoordinates clickLocation) - { - User = user; - Target = target; - ClickLocation = clickLocation; - } - } - - /// - /// Reverse of the InteractNoHandEvent - raised on what was interacted on, rather than the other way around. - /// - public sealed class InteractedNoHandEvent : HandledEntityEventArgs - { - /// - /// Entity that was interacted on - /// - public EntityUid Target; - - /// - /// Entity that triggered this interaction - /// - public EntityUid User; - - public EntityCoordinates ClickLocation; - - public InteractedNoHandEvent(EntityUid target, EntityUid user, EntityCoordinates clickLocation) - { - Target = target; - User = user; - ClickLocation = clickLocation; - } - } } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 5b673c4740b..8d16a352f0d 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -83,6 +83,7 @@ public abstract partial class SharedInteractionSystem : EntitySystem private EntityQuery _wallMountQuery; private EntityQuery _delayQuery; private EntityQuery _uiQuery; + private EntityQuery _complexInteractionQuery; private const CollisionGroup InRangeUnobstructedMask = CollisionGroup.Impassable | CollisionGroup.InteractImpassable; @@ -105,6 +106,7 @@ public override void Initialize() _wallMountQuery = GetEntityQuery(); _delayQuery = GetEntityQuery(); _uiQuery = GetEntityQuery(); + _complexInteractionQuery = GetEntityQuery(); SubscribeLocalEvent(HandleUserInterfaceRangeCheck); SubscribeLocalEvent(OnBoundInterfaceInteractAttempt); @@ -384,8 +386,13 @@ public void UserInteraction( // TODO this needs to be handled better. This probably bypasses many complex can-interact checks in weird roundabout ways. if (_actionBlockerSystem.CanInteract(user, target)) { - UserInteraction(relay.RelayEntity.Value, coordinates, target, altInteract, checkCanInteract, - checkAccess, checkCanUse); + UserInteraction(relay.RelayEntity.Value, + coordinates, + target, + altInteract, + checkCanInteract, + checkAccess, + checkCanUse); return; } } @@ -422,25 +429,10 @@ public void UserInteraction( ? !checkAccess || InRangeUnobstructed(user, coordinates) : !checkAccess || InRangeUnobstructed(user, target.Value); // permits interactions with wall mounted entities - // Does the user have hands? - if (!_handsQuery.TryComp(user, out var hands) || hands.ActiveHand == null) - { - var ev = new InteractNoHandEvent(user, target, coordinates); - RaiseLocalEvent(user, ev); - - if (target != null) - { - var interactedEv = new InteractedNoHandEvent(target.Value, user, coordinates); - RaiseLocalEvent(target.Value, interactedEv); - DoContactInteraction(user, target.Value, ev); - } - return; - } - // empty-hand interactions // combat mode hand interactions will always be true here -- since // they check this earlier before returning in - if (hands.ActiveHandEntity is not { } held) + if (!TryGetUsedEntity(user, out var used, checkCanUse)) { if (inRangeUnobstructed && target != null) InteractHand(user, target.Value); @@ -448,11 +440,7 @@ public void UserInteraction( return; } - // Can the user use the held entity? - if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user)) - return; - - if (target == held) + if (target == used) { UseInHandInteraction(user, target.Value, checkCanUse: false, checkCanInteract: false); return; @@ -462,7 +450,7 @@ public void UserInteraction( { InteractUsing( user, - held, + used.Value, target.Value, coordinates, checkCanInteract: false, @@ -473,14 +461,40 @@ public void UserInteraction( InteractUsingRanged( user, - held, + used.Value, target, coordinates, inRangeUnobstructed); } + private bool IsDeleted(EntityUid uid) + { + return TerminatingOrDeleted(uid) || EntityManager.IsQueuedForDeletion(uid); + } + + private bool IsDeleted(EntityUid? uid) + { + //optional / null entities can pass this validation check. I.e., is-deleted returns false for null uids + return uid != null && IsDeleted(uid.Value); + } + public void InteractHand(EntityUid user, EntityUid target) { + if (IsDeleted(user) || IsDeleted(target)) + return; + + var complexInteractions = SupportsComplexInteractions(user); + if (!complexInteractions) + { + InteractionActivate(user, + target, + checkCanInteract: false, + checkUseDelay: true, + checkAccess: false, + complexInteractions: complexInteractions); + return; + } + // allow for special logic before main interaction var ev = new BeforeInteractHandEvent(target); RaiseLocalEvent(user, ev); @@ -490,6 +504,8 @@ public void InteractHand(EntityUid user, EntityUid target) return; } + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); + // all interactions should only happen when in range / unobstructed, so no range check is needed var message = new InteractHandEvent(user, target); RaiseLocalEvent(target, message, true); @@ -498,19 +514,29 @@ public void InteractHand(EntityUid user, EntityUid target) if (message.Handled) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); + // Else we run Activate. - InteractionActivate(user, target, + InteractionActivate(user, + target, checkCanInteract: false, checkUseDelay: true, - checkAccess: false); + checkAccess: false, + complexInteractions: complexInteractions, + checkDeletion: false); } public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool inRangeUnobstructed) { - if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed)) + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return; + + if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: true)) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); + if (target != null) { var rangedMsg = new RangedInteractEvent(user, used, target.Value, clickLocation); @@ -523,7 +549,8 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe return; } - InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed); + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); + InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false); } protected bool ValidateInteractAndFace(EntityUid user, EntityCoordinates coordinates) @@ -919,8 +946,12 @@ public bool RangedInteractDoBefore( EntityUid used, EntityUid? target, EntityCoordinates clickLocation, - bool canReach) + bool canReach, + bool checkDeletion = false) { + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return false; + var ev = new BeforeRangedInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, ev); @@ -942,10 +973,13 @@ public void InteractUsing( bool checkCanInteract = true, bool checkCanUse = true) { + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return; + if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, target)) return; - if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user)) + if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user, used)) return; if (RangedInteractDoBefore(user, used, target, clickLocation, true)) @@ -956,7 +990,7 @@ public void InteractUsing( RaiseLocalEvent(target, interactUsingEvent, true); DoContactInteraction(user, used, interactUsingEvent); DoContactInteraction(user, target, interactUsingEvent); - DoContactInteraction(used, target, interactUsingEvent); + if (interactUsingEvent.Handled) return; @@ -966,19 +1000,26 @@ public void InteractUsing( /// /// Used when clicking on an entity resulted in no other interaction. Used for low-priority interactions. /// - public void InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach) + public void InteractDoAfter( + EntityUid user, + EntityUid used, + EntityUid? target, + EntityCoordinates clickLocation, + bool canReach, + bool checkDeletion = false + ) { if (target is {Valid: false}) target = null; + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return; + var afterInteractEvent = new AfterInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, afterInteractEvent); DoContactInteraction(user, used, afterInteractEvent); if (canReach) - { DoContactInteraction(user, target, afterInteractEvent); - DoContactInteraction(used, target, afterInteractEvent); - } if (afterInteractEvent.Handled) return; @@ -991,10 +1032,7 @@ public void InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, E DoContactInteraction(user, used, afterInteractUsingEvent); if (canReach) - { DoContactInteraction(user, target, afterInteractUsingEvent); - DoContactInteraction(used, target, afterInteractUsingEvent); - } } #region ActivateItemInWorld @@ -1025,7 +1063,10 @@ public bool InteractionActivate( EntityUid used, bool checkCanInteract = true, bool checkUseDelay = true, - bool checkAccess = true) + bool checkAccess = true, + bool? complexInteractions = null, + bool checkDeletion = true + ) { _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) @@ -1042,16 +1083,18 @@ public bool InteractionActivate( if (checkAccess && !IsAccessible(user, used)) return false; - // Does the user have hands? - if (!_handsQuery.HasComp(user)) - return false; - - var activateMsg = new ActivateInWorldEvent(user, used); + complexInteractions ??= SupportsComplexInteractions(user); + var activateMsg = new ActivateInWorldEvent(user, used, complexInteractions.Value); RaiseLocalEvent(used, activateMsg, true); - if (!activateMsg.Handled) + var userEv = new UserActivateInWorldEvent(user, used, complexInteractions.Value); + + RaiseLocalEvent(user, userEv, true); + if (!activateMsg.Handled && !userEv.Handled) return false; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); DoContactInteraction(user, used, activateMsg); + // Still need to call this even without checkUseDelay in case this gets relayed from Activate. if (delayComponent != null) _useDelay.TryResetDelay(used, component: delayComponent); @@ -1076,6 +1119,9 @@ public bool UseInHandInteraction( bool checkCanInteract = true, bool checkUseDelay = true) { + if (IsDeleted(user) || IsDeleted(used)) + return false; + _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return true; // if the item is on cooldown, we consider this handled. @@ -1083,7 +1129,7 @@ public bool UseInHandInteraction( if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, used)) return false; - if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user)) + if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user, used)) return false; var useMsg = new UseInHandEvent(user); @@ -1122,6 +1168,9 @@ public bool AltInteract(EntityUid user, EntityUid target) public void DroppedInteraction(EntityUid user, EntityUid item) { + if (IsDeleted(user) || IsDeleted(item)) + return; + var dropMsg = new DroppedEvent(user); RaiseLocalEvent(item, dropMsg, true); if (dropMsg.Handled) @@ -1265,15 +1314,20 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE if (uidB == null || args?.Handled == false) return; - // Entities may no longer exist (banana was eaten, or human was exploded)? - if (!Exists(uidA) || !Exists(uidB)) - return; + DebugTools.AssertNotEqual(uidA, uidB.Value); - if (Paused(uidA) || Paused(uidB.Value)) + if (!TryComp(uidA, out MetaDataComponent? metaA) || metaA.EntityPaused) return; - RaiseLocalEvent(uidA, new ContactInteractionEvent(uidB.Value)); - RaiseLocalEvent(uidB.Value, new ContactInteractionEvent(uidA)); + if (!TryComp(uidB, out MetaDataComponent? metaB) || metaB.EntityPaused) + return ; + + // TODO Struct event + var ev = new ContactInteractionEvent(uidB.Value); + RaiseLocalEvent(uidA, ev); + + ev.Other = uidA; + RaiseLocalEvent(uidB.Value, ev); } @@ -1286,6 +1340,39 @@ private void HandleUserInterfaceRangeCheck(ref BoundUserInterfaceCheckRangeEvent ? BoundUserInterfaceRangeResult.Pass : BoundUserInterfaceRangeResult.Fail; } + + /// + /// Gets the entity that is currently being "used" for the interaction. + /// In most cases, this refers to the entity in the character's active hand. + /// + /// If there is an entity being used. + public bool TryGetUsedEntity(EntityUid user, [NotNullWhen(true)] out EntityUid? used, bool checkCanUse = true) + { + var ev = new GetUsedEntityEvent(); + RaiseLocalEvent(user, ref ev); + + used = ev.Used; + if (!ev.Handled) + return false; + + // Can the user use the held entity? + if (checkCanUse && !_actionBlockerSystem.CanUseHeldEntity(user, ev.Used!.Value)) + { + used = null; + return false; + } + + return ev.Handled; + } + + /// + /// Checks if a given entity is able to do specific complex interactions. + /// This is used to gate manipulation to general humanoids. If a mouse shouldn't be able to do something, then it's complex. + /// + public bool SupportsComplexInteractions(EntityUid user) + { + return _complexInteractionQuery.HasComp(user); + } } /// @@ -1311,6 +1398,24 @@ public InteractInventorySlotEvent(NetEntity itemUid, bool altInteract = false) } } + /// + /// Raised directed by-ref on an entity to determine what item will be used in interactions. + /// + [ByRefEvent] + public record struct GetUsedEntityEvent() + { + public EntityUid? Used = null; + + public bool Handled => Used != null; + }; + + /// + /// Raised directed by-ref on an item and a user to determine if interactions can occur. + /// + /// Whether the hand interaction should be cancelled. + [ByRefEvent] + public record struct AttemptUseInteractEvent(EntityUid User, EntityUid Used, bool Cancelled = false); + /// /// Raised directed by-ref on an item to determine if hand interactions should go through. /// Defaults to allowing hand interactions to go through. Cancel to force the item to be attacked instead. diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs index 878e8a0c721..201a06fb501 100644 --- a/Content.Shared/Inventory/InventorySystem.Slots.cs +++ b/Content.Shared/Inventory/InventorySystem.Slots.cs @@ -80,7 +80,7 @@ private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEv if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp(entityUid, out var storageComponent)) { - _storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent); + _storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent, false); } } diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index 9296a354d2c..bfdfc77bc21 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Popups; +using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Verbs; using Content.Shared.Wires; @@ -42,11 +43,13 @@ public override void Initialize() SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnDoAfterLock); SubscribeLocalEvent(OnDoAfterUnlock); + SubscribeLocalEvent(OnStorageInteractAttempt); SubscribeLocalEvent(OnLockToggleAttempt); SubscribeLocalEvent(OnAttemptChangePanel); SubscribeLocalEvent(OnUnanchorAttempt); } + private void OnStartup(EntityUid uid, LockComponent lockComp, ComponentStartup args) { _appearanceSystem.SetData(uid, LockVisuals.Locked, lockComp.Locked); @@ -54,7 +57,7 @@ private void OnStartup(EntityUid uid, LockComponent lockComp, ComponentStartup a private void OnActivated(EntityUid uid, LockComponent lockComp, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; // Only attempt an unlock by default on Activate @@ -295,6 +298,12 @@ private void OnDoAfterUnlock(EntityUid uid, LockComponent component, UnlockDoAft TryUnlock(uid, args.User, skipDoAfter: true); } + private void OnStorageInteractAttempt(Entity ent, ref StorageInteractAttemptEvent args) + { + if (ent.Comp.Locked) + args.Cancelled = true; + } + private void OnLockToggleAttempt(Entity ent, ref LockToggleAttemptEvent args) { if (args.Cancelled) diff --git a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs index b4f1ae9a268..04926c34562 100644 --- a/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs +++ b/Content.Shared/Mech/EntitySystems/SharedMechSystem.cs @@ -43,7 +43,7 @@ public override void Initialize() { SubscribeLocalEvent(OnToggleEquipmentAction); SubscribeLocalEvent(OnEjectPilotEvent); - SubscribeLocalEvent(RelayInteractionEvent); + SubscribeLocalEvent(RelayInteractionEvent); SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnDestruction); SubscribeLocalEvent(OnGetAdditionalAccess); @@ -71,7 +71,7 @@ private void OnEjectPilotEvent(EntityUid uid, MechComponent component, MechEject TryEject(uid, component); } - private void RelayInteractionEvent(EntityUid uid, MechComponent component, InteractNoHandEvent args) + private void RelayInteractionEvent(EntityUid uid, MechComponent component, UserActivateInWorldEvent args) { var pilot = component.PilotSlot.ContainedEntity; if (pilot == null) diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index f40a7a0363b..593ad221b8d 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -47,7 +47,7 @@ private void OnEmbedActivate(EntityUid uid, EmbeddableProjectileComponent compon if (component.RemovalTime == null) return; - if (args.Handled || !TryComp(uid, out var physics) || physics.BodyType != BodyType.Static) + if (args.Handled || !args.Complex || !TryComp(uid, out var physics) || physics.BodyType != BodyType.Static) return; args.Handled = true; diff --git a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs index 620793f86bd..bb49725e047 100644 --- a/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs @@ -91,7 +91,7 @@ protected virtual void OnComponentStartup(EntityUid uid, SharedEntityStorageComp protected void OnInteract(EntityUid uid, SharedEntityStorageComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; args.Handled = true; diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 6bd66a0ff4e..fad9d724388 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -2,17 +2,15 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.ActionBlocker; -using Content.Shared.Administration; -using Content.Shared.Administration.Managers; using Content.Shared.Containers.ItemSlots; using Content.Shared.Destructible; using Content.Shared.DoAfter; -using Content.Shared.Ghost; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Implants.Components; using Content.Shared.Input; using Content.Shared.Interaction; +using Content.Shared.Interaction.Components; using Content.Shared.Inventory; using Content.Shared.Item; using Content.Shared.Lock; @@ -42,7 +40,6 @@ public abstract class SharedStorageSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] protected readonly IRobustRandom Random = default!; - [Dependency] private readonly ISharedAdminManager _admin = default!; [Dependency] protected readonly ActionBlockerSystem ActionBlocker = default!; [Dependency] private readonly EntityLookupSystem _entityLookupSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -252,17 +249,8 @@ private void OnBoundUIClosed(EntityUid uid, StorageComponent storageComp, BoundU private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent args) { - var silent = false; - if (!args.CanAccess || !args.CanInteract || TryComp(uid, out var lockComponent) && lockComponent.Locked) - { - // we allow admins to open the storage anyways - if (!_admin.HasAdminFlag(args.User, AdminFlags.Admin)) - return; - - silent = true; - } - - silent |= HasComp(args.User); + if (!CanInteract(args.User, (uid, component), args.CanAccess && args.CanInteract)) + return; // Does this player currently have the storage UI open? var uiOpen = _ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, args.User); @@ -277,7 +265,7 @@ private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent< } else { - OpenStorageUI(uid, args.User, component, silent); + OpenStorageUI(uid, args.User, component); } } }; @@ -301,20 +289,23 @@ private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent< /// Opens the storage UI for an entity /// /// The entity to open the UI for - public void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) + public void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = true) { if (!Resolve(uid, ref storageComp, false)) return; // prevent spamming bag open / honkerton honk sound - silent |= TryComp(uid, out var useDelay) && UseDelay.IsDelayed((uid, useDelay)); + silent |= TryComp(uid, out var useDelay) && UseDelay.IsDelayed((uid, useDelay), id: OpenUiUseDelayID); + if (!CanInteract(entity, (uid, storageComp), silent: silent)) + return; + if (!silent) { if (!_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key)) Audio.PlayPredicted(storageComp.StorageOpenSound, uid, entity); if (useDelay != null) - UseDelay.TryResetDelay((uid, useDelay)); + UseDelay.TryResetDelay((uid, useDelay), id: OpenUiUseDelayID); } _ui.OpenUi(uid, StorageComponent.StorageUiKey.Key, entity); @@ -329,7 +320,7 @@ private void AddTransferVerbs(EntityUid uid, StorageComponent component, GetVerb var entities = component.Container.ContainedEntities; - if (entities.Count == 0 || TryComp(uid, out LockComponent? lockComponent) && lockComponent.Locked) + if (entities.Count == 0 || !CanInteract(args.User, (uid, component))) return; // if the target is storage, add a verb to transfer storage. @@ -340,7 +331,7 @@ private void AddTransferVerbs(EntityUid uid, StorageComponent component, GetVerb { Text = Loc.GetString("storage-component-transfer-verb"), IconEntity = GetNetEntity(args.Using), - Act = () => TransferEntities(uid, args.Target, args.User, component, lockComponent, targetStorage, targetLock) + Act = () => TransferEntities(uid, args.Target, args.User, component, null, targetStorage, targetLock) }; args.Verbs.Add(verb); @@ -353,7 +344,7 @@ private void AddTransferVerbs(EntityUid uid, StorageComponent component, GetVerb /// true if inserted, false otherwise private void OnInteractUsing(EntityUid uid, StorageComponent storageComp, InteractUsingEvent args) { - if (args.Handled || !storageComp.ClickInsert || TryComp(uid, out LockComponent? lockComponent) && lockComponent.Locked) + if (args.Handled || !CanInteract(args.User, (uid, storageComp), storageComp.ClickInsert, false)) return; if (HasComp(uid)) @@ -371,14 +362,14 @@ private void OnInteractUsing(EntityUid uid, StorageComponent storageComp, Intera /// private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInWorldEvent args) { - if (args.Handled || TryComp(uid, out var lockComponent) && lockComponent.Locked) + if (args.Handled || !CanInteract(args.User, (uid, storageComp), storageComp.ClickInsert)) return; // Toggle if (_ui.IsUiOpen(uid, StorageComponent.StorageUiKey.Key, args.User)) _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, args.User); else - OpenStorageUI(uid, args.User, storageComp); + OpenStorageUI(uid, args.User, storageComp, false); args.Handled = true; } @@ -391,7 +382,7 @@ private void OnImplantActivate(EntityUid uid, StorageComponent storageComp, Open if (args.Handled) return; - OpenStorageUI(uid, args.Performer, storageComp); + OpenStorageUI(uid, args.Performer, storageComp, false); args.Handled = true; } @@ -1400,7 +1391,7 @@ public ItemSizePrototype GetMaxItemSize(Entity uid) } /// - /// Checks if a storage's UI is open by anyone when locked, and closes it unless they're an admin. + /// Checks if a storage's UI is open by anyone when locked, and closes it. /// private void OnLockToggled(EntityUid uid, StorageComponent component, ref LockToggledEvent args) { @@ -1410,11 +1401,8 @@ private void OnLockToggled(EntityUid uid, StorageComponent component, ref LockTo // Gets everyone looking at the UI foreach (var actor in _ui.GetActors(uid, StorageComponent.StorageUiKey.Key).ToList()) { - if (_admin.HasAdminFlag(actor, AdminFlags.Admin)) - continue; - - // And closes it unless they're an admin - _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, actor); + if (!CanInteract(actor, (uid, component))) + _ui.CloseUi(uid, StorageComponent.StorageUiKey.Key, actor); } } @@ -1452,7 +1440,10 @@ private void HandleOpenSlotUI(ICommonSession? session, string slot) if (!ActionBlocker.CanInteract(playerEnt, storageEnt)) return; - OpenStorageUI(storageEnt.Value, playerEnt); + if (!_ui.IsUiOpen(storageEnt.Value, StorageComponent.StorageUiKey.Key, playerEnt)) + OpenStorageUI(storageEnt.Value, playerEnt, silent: false); + else + _ui.CloseUi(storageEnt.Value, StorageComponent.StorageUiKey.Key, playerEnt); } protected void ClearCantFillReasons() @@ -1462,6 +1453,20 @@ protected void ClearCantFillReasons() #endif } + private bool CanInteract(EntityUid user, Entity storage, bool canInteract = true, bool silent = true) + { + if (HasComp(user)) + return true; + + if (!canInteract) + return false; + + var ev = new StorageInteractAttemptEvent(silent); + RaiseLocalEvent(storage, ref ev); + + return !ev.Cancelled; + } + /// /// Plays a clientside pickup animation for the specified uid. /// diff --git a/Content.Shared/Storage/StorageComponent.cs b/Content.Shared/Storage/StorageComponent.cs index ef682dd4f94..2860f8dacfe 100644 --- a/Content.Shared/Storage/StorageComponent.cs +++ b/Content.Shared/Storage/StorageComponent.cs @@ -5,7 +5,6 @@ using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Map; -using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -228,6 +227,9 @@ public AnimateInsertingEntitiesEvent(NetEntity storage, List storedEn } } + [ByRefEvent] + public record struct StorageInteractAttemptEvent(bool Silent, bool Cancelled = false); + [NetSerializable] [Serializable] public enum StorageVisuals : byte diff --git a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs index 6e8393036d4..8903747e430 100644 --- a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs +++ b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs @@ -26,7 +26,11 @@ public override void Initialize() private void OnTrayScannerActivate(EntityUid uid, TrayScannerComponent scanner, ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + SetScannerEnabled(uid, !scanner.Enabled, scanner); + args.Handled = true; } private void SetScannerEnabled(EntityUid uid, bool enabled, TrayScannerComponent? scanner = null) diff --git a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs index 62c0b0f44e4..bc73baa61ad 100644 --- a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs +++ b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs @@ -101,6 +101,9 @@ private void OnGetAltVerb(Entity ent, ref GetVerbsEvent private void OnActivateInWorld(Entity ent, ref ActivateInWorldEvent args) { + if (args.Handled || !args.Complex) + return; + var (uid, comp) = ent; var user = args.User; if (comp.TeleportTime != null) @@ -130,6 +133,7 @@ private void OnActivateInWorld(Entity ent, ref Activate comp.NextTeleportUse = _timing.CurTime + comp.Cooldown; comp.TeleportTime = _timing.CurTime + comp.TeleportDelay; Dirty(uid, comp); + args.Handled = true; } public void DoTeleport(Entity ent) diff --git a/Content.Shared/Toilet/Systems/SharedToiletSystem.cs b/Content.Shared/Toilet/Systems/SharedToiletSystem.cs index 87df69e88da..f11af335527 100644 --- a/Content.Shared/Toilet/Systems/SharedToiletSystem.cs +++ b/Content.Shared/Toilet/Systems/SharedToiletSystem.cs @@ -79,7 +79,7 @@ private void OnToggleSeatVerb(EntityUid uid, ToiletComponent component, GetVerbs private void OnActivateInWorld(EntityUid uid, ToiletComponent comp, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; args.Handled = true; diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs b/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs index 9114c62adee..d69f01d762f 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.MultipleTool.cs @@ -28,7 +28,7 @@ private void OnMultipleToolStartup(EntityUid uid, MultipleToolComponent multiple private void OnMultipleToolActivated(EntityUid uid, MultipleToolComponent multiple, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; args.Handled = CycleMultipleTool(uid, multiple, args.User); diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs index 19524c39b34..c620097961d 100644 --- a/Content.Shared/UserInterface/ActivatableUISystem.cs +++ b/Content.Shared/UserInterface/ActivatableUISystem.cs @@ -137,7 +137,7 @@ private void OnUseInHand(EntityUid uid, ActivatableUIComponent component, UseInH private void OnActivate(EntityUid uid, ActivatableUIComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; if (component.VerbOnly) diff --git a/Content.Shared/Verbs/SharedVerbSystem.cs b/Content.Shared/Verbs/SharedVerbSystem.cs index e78fe98f4c3..319f927c7b3 100644 --- a/Content.Shared/Verbs/SharedVerbSystem.cs +++ b/Content.Shared/Verbs/SharedVerbSystem.cs @@ -78,28 +78,8 @@ public SortedSet GetLocalVerbs(EntityUid target, EntityUid user, List(user, out var hands); // TODO: fix this garbage and use proper generics or reflection or something else, not this. if (types.Contains(typeof(InteractionVerb))) diff --git a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs index 41e1895da2c..6feffffbe31 100644 --- a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs @@ -116,7 +116,7 @@ private void OnWeightlessMove(ref CanWeightlessMoveEvent ev) private void OnGunActivate(EntityUid uid, GrapplingGunComponent component, ActivateInWorldEvent args) { - if (!Timing.IsFirstTimePredicted || args.Handled) + if (!Timing.IsFirstTimePredicted || args.Handled || !args.Complex) return; if (Deleted(component.Projectile)) diff --git a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.Force.cs b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.Force.cs index eec115b02df..932ef704607 100644 --- a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.Force.cs +++ b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.Force.cs @@ -14,6 +14,9 @@ private void InitializeForce() private void OnForceActivate(EntityUid uid, ForceGunComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + StopTether(uid, component); } diff --git a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs index dd297422c37..21da0a3ca45 100644 --- a/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedTetherGunSystem.cs @@ -152,6 +152,9 @@ protected bool TryGetTetherGun(EntityUid user, [NotNullWhen(true)] out EntityUid private void OnTetherActivate(EntityUid uid, TetherGunComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + StopTether(uid, component); } diff --git a/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs b/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs index 68fb2f27c98..8e44576d283 100644 --- a/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs @@ -75,6 +75,9 @@ private void OnGetVerb(EntityUid uid, BatteryWeaponFireModesComponent component, private void OnInteractHandEvent(EntityUid uid, BatteryWeaponFireModesComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (component.FireModes.Count < 2) return; diff --git a/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs b/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs index a014f8e5c74..ee5ca2174f3 100644 --- a/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/RechargeCycleAmmoSystem.cs @@ -18,6 +18,9 @@ public override void Initialize() private void OnRechargeCycled(EntityUid uid, RechargeCycleAmmoComponent component, ActivateInWorldEvent args) { + if (!args.Complex) + return; + if (!TryComp(uid, out var basic) || args.Handled) return; diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs index c421c92a9f7..adae26a223a 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs @@ -51,7 +51,7 @@ private void OnChamberStartup(EntityUid uid, ChamberMagazineAmmoProviderComponen /// private void OnChamberActivate(EntityUid uid, ChamberMagazineAmmoProviderComponent component, ActivateInWorldEvent args) { - if (args.Handled) + if (args.Handled || !args.Complex) return; args.Handled = true; diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index 5e3652d93d3..1d0a8d92280 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -84,6 +84,7 @@ - type: Hands showInHands: false disableExplosionRecursion: true + - type: ComplexInteraction - type: IntrinsicRadioReceiver - type: IntrinsicRadioTransmitter channels: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index e05048c4f89..6e369389a90 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1285,6 +1285,7 @@ visible: false - type: Carriable - type: Hands + - type: ComplexInteraction - type: GenericVisualizer visuals: enum.CreamPiedVisuals.Creamed: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml index c3a92d3ebcd..3ffa449f48f 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml @@ -17,7 +17,6 @@ - type: NpcFactionMember factions: - SimpleHostile - - type: Hands - type: Sprite drawdepth: Mobs sprite: Structures/Machines/VendingMachines/cola.rsi diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index 04b767b8ae2..04c4dd083e0 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -40,6 +40,7 @@ factions: - Xeno - type: Hands + - type: ComplexInteraction - type: Sprite drawdepth: Mobs sprite: Mobs/Aliens/Xenos/burrower.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 957817d4083..c9aac35732b 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -25,6 +25,7 @@ canInteract: true - type: GhostHearing - type: Hands + - type: ComplexInteraction - type: Puller pushAcceleration: 1000000 # Will still be capped in max speed maxPushRange: 20 @@ -99,6 +100,7 @@ - type: Loadout prototypes: [ MobAghostGear ] - type: SupermatterImmune + - type: BypassInteractionChecks - type: entity id: ActionAGhostShowSolar diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index 7d1139d3d79..51078d1b100 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -228,6 +228,7 @@ - type: Inventory templateId: holoclown - type: Hands + - type: ComplexInteraction - type: Clumsy clumsyDamage: types: diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml index 7a8332b6618..86546a3794d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml @@ -199,6 +199,7 @@ - type: CreamPied - type: Stripping - type: Strippable + - type: ComplexInteraction - type: SurgeryTarget - type: Targeting - type: UserInterface diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 5c6a0fcaa16..c19eb1edc4a 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -152,6 +152,8 @@ - type: Identity - type: IdExaminable - type: Hands + - type: ComplexInteraction + - type: Internals - type: Inventory - type: InventorySlots - type: FloatingVisuals @@ -328,6 +330,7 @@ abstract: true components: - type: Hands + - type: ComplexInteraction - type: Inventory - type: InventorySlots - type: ContainerContainer From 54d15c03617c5c33b3804ad233e6dc6d7444080d Mon Sep 17 00:00:00 2001 From: Raphael Bertoche Date: Fri, 6 Dec 2024 12:41:29 -0300 Subject: [PATCH 108/182] Inverts the Check for Material Whitelist in CanChangeMaterialAmount (#1320) This change was actually suggested by April, I'm not the author. It fixes Pacman generators and god knows what else. Prior to the change you could insert steel in it, or just the wrong kind of fuel. Since you could only load the wrong kind of fuel the generators were not working at all. # Description Description. --- # TODO ---

Media

Ejecting steel from a pacman gen ![image](https://github.com/user-attachments/assets/28771e24-4c46-48f1-94dc-c3db03b059a6) Them working after the fix. ![image](https://github.com/user-attachments/assets/cce907b2-097c-4d4a-837a-606e3c19b5b9)

--- # Changelog Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- Content.Shared/Materials/SharedMaterialStorageSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs index af815bdb2b7..a27e0fb9cf0 100644 --- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs +++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs @@ -123,7 +123,7 @@ public bool CanChangeMaterialAmount(EntityUid uid, string materialId, int volume if (!CanTakeVolume(uid, volume, component)) return false; - if (component.MaterialWhiteList == null ? false : component.MaterialWhiteList.Contains(materialId)) + if (component.MaterialWhiteList == null ? false : !component.MaterialWhiteList.Contains(materialId)) return false; var amount = component.Storage.GetValueOrDefault(materialId); From f1b8f960f7aa9f29e638cb794d6f2639b63225e8 Mon Sep 17 00:00:00 2001 From: zelezniciar1 <39102800+zelezniciar1@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:42:26 -0500 Subject: [PATCH 109/182] Build Your Own TEG! (#1316) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description This PR adds the option of constructing a Thermoelectric Generator (TEG) from scratch, by adding flatpacks for the TEG Center and TEG Circulator, as well as a crate that can be ordered from logistics that contains the flatpacks. The aim is to give engineering crews the ability to add a TEG to stations that might lack one, as a "fun" engineering project that can be pursued on shift. This capability already exists for the Singularity Engine and Tesla Engines. The cost of the TEG Construction Kit is set at 8000 spesos, but this can be changed for balance reasons. Note: Kit may contain small parts not suitable for children under 3 years old. Some assembly required. --- # TODO n/a ---

Media

![Snímka obrazovky 2024-12-05 202816](https://github.com/user-attachments/assets/6c6c9f0d-89b2-4558-aa13-ca1c5bbca58d) ![Snímka obrazovky 2024-12-05 203211](https://github.com/user-attachments/assets/69227645-1382-45f0-848b-96b45e6da92f)

--- # Changelog :cl: zelezniciar - add: TEG components now be ordered from Logistics and assembled on station. --- .../Catalog/Cargo/cargo_engines.yml | 10 ++++++ .../Catalog/Fills/Crates/engines.yml | 15 ++++++++ .../Entities/Objects/Devices/flatpack.yml | 36 +++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml index 8d3bea5075c..fed135cd6a6 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml @@ -99,3 +99,13 @@ cost: 400 category: cargoproduct-category-name-engineering group: market + +- type: cargoProduct + id: EngineTEGKit + icon: + sprite: Structures/Power/Generation/teg.rsi + state: static + product: CrateEngineeringTEGKit + cost: 8000 + category: cargoproduct-category-name-engineering + group: market \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml index 79698b550a7..2ac099e7926 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml @@ -169,3 +169,18 @@ - type: StorageFill contents: - id: TeslaGroundingRodFlatpack + +- type: entity + id: CrateEngineeringTEGKit + parent: CrateEngineeringSecure + name: TEG construction kit crate + description: A 'build your own TEG' kit. Some assembly required. + components: + - type: StorageFill + contents: + - id: TegCirculatorPartFlatpack + - id: TegCirculatorPartFlatpack + - id: TegCenterPartFlatpack + - id: GasAnalyzer + - id: SheetSteel + amount: 1 diff --git a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml index d7cba59eb1d..9ed2deb369d 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml @@ -67,6 +67,42 @@ - type: StealTarget stealGroup: AmePartFlatpack +- type: entity + parent: BaseFlatpack + id: TegCenterPartFlatpack + name: TEG Center flatpack + description: A flatpack used for constructing the central core of a TEG. + components: + - type: Flatpack + entity: TegCenter + - type: Sprite + layers: + - state: base + - state: overlay + color: "#cec8ac" + map: ["enum.FlatpackVisualLayers.Overlay"] + - state: icon-default + - type: GuideHelp + guides: [ TEG, Power ] + +- type: entity + parent: BaseFlatpack + id: TegCirculatorPartFlatpack + name: TEG Circulator flatpack + description: A flatpack used for constructing the circulator of a TEG. + components: + - type: Flatpack + entity: TegCirculator + - type: Sprite + layers: + - state: base + - state: overlay + color: "#cec8ac" + map: ["enum.FlatpackVisualLayers.Overlay"] + - state: icon-default + - type: GuideHelp + guides: [ TEG, Power ] + - type: entity parent: BaseFlatpack id: SingularityGeneratorFlatpack From 3d2cdd73bfd52e89ae9c11d60cba5c801bf68c8e Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 6 Dec 2024 15:43:12 +0000 Subject: [PATCH 110/182] Automatic Changelog Update (#1316) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a6d8fdef9df..ce6ea241448 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8451,3 +8451,10 @@ Entries: id: 6561 time: '2024-12-06T03:13:08.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1314 +- author: zelezniciar + changes: + - type: Add + message: 'TEG components now be ordered from Logistics and assembled on station. ' + id: 6562 + time: '2024-12-06T15:42:27.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1316 From 50eb2173c25073d8bed2aaf3dc5a8e4db44a261d Mon Sep 17 00:00:00 2001 From: Raphael Bertoche Date: Fri, 6 Dec 2024 13:12:43 -0300 Subject: [PATCH 111/182] Several Small Map Fixes to Europa (#1319) # Description Description. --- # TODO - [x] Lack of radiator underneath the SM crystal - [x] Wrong kind of vent and lack of connectors at the gas chambers - [x] Inverts one of the connector pumps in the SM's closed loop - [x] Adds a decal to this inverted pump which was missing - [x] Lack of Mv wire under a APC on a hallway at the north side - [x] Lack of Hv wire connection to a substation in the bridge which powers the bridge and the bar area - [x] Switches a medical records computer in medbay to a crew monitoring one - [x] Adds an autolathe to cargo - [x] Protrudes the cargo dock which was too tight to fit the shuttle ---

Media

Previous docking issue: ![image](https://github.com/user-attachments/assets/30ce4994-8294-40ff-8919-47fa28224dea) Change in cargo dock design ![2024-12-06_09-25](https://github.com/user-attachments/assets/f968d153-28fe-4007-9b47-d8e36522cfc2) Crew monitoring replacing medical records ![image](https://github.com/user-attachments/assets/719df986-fe72-4e6b-9263-9aa18b8c2237) Autolathe added to cargo ![2024-12-06_09-19](https://github.com/user-attachments/assets/4d527179-2242-4d05-a229-d0fcc0aed360)

Atmos/SM/Wiring changes:

Added missing Hv connection to a substation in the bridge ![image](https://github.com/user-attachments/assets/0449cf0a-83f4-4ae5-a7cf-49e2f55a5197) Added one missing Mv wire to this APC ![image](https://github.com/user-attachments/assets/79e939ed-1082-46e2-b572-2f5a31affa7c) Changed regular vents into passive vents, added connector slot and attached canisters to it ![image](https://github.com/user-attachments/assets/e8a9c686-f97e-46c3-a9e9-6b1da6776ba3) Radiator added to SM ![2024-12-06_08-51](https://github.com/user-attachments/assets/e30549dc-1ea3-40d3-b12e-168497e9f19b) These two pumps in the SM which were redundant, also one of them were missing decal to the same tile ![image](https://github.com/user-attachments/assets/66e4dcdf-6b8c-4778-910e-288dcc8168ef) Showing the changed pump after being inverted ![image](https://github.com/user-attachments/assets/ea571ad3-c6aa-4424-ae74-11319ac0f551) --- Recenter changes: There were three APC in cargo and north of in which one was connected with cargo's APC for no apparent reason and the other was missing wires entirely. I've put the one missing wires to work in the Lv wiring around it and cut the Lv wires were it seemed appropriate to prevent connecting multiple APCs with Lv for no reason. ![image](https://github.com/user-attachments/assets/b7a3f1e4-5d1e-48a8-8d54-31efecb9c691) ![image](https://github.com/user-attachments/assets/669d6827-510c-475a-9039-878fbc221faf) Excess lamps not included in the change ![image](https://github.com/user-attachments/assets/6f1bb7fc-3b5c-4f76-96da-1e362a0c3921) ![image](https://github.com/user-attachments/assets/3e25bd5b-02ff-438a-89da-91310ca3e473) ![image](https://github.com/user-attachments/assets/f2a7990d-f09f-4c44-b68b-830305743c8f) ![image](https://github.com/user-attachments/assets/953948fe-6b3b-48fb-a18f-4a1b2541ccaf)

--- # Changelog :cl: - fix: Several small fixes to Europa map, namely to cargo dock, SM and atmos piping and wires, adds autolathe to cargo and crew monitor to med --- Resources/Maps/europa.yml | 576 +++++++++++++++++++++++++------------- 1 file changed, 383 insertions(+), 193 deletions(-) diff --git a/Resources/Maps/europa.yml b/Resources/Maps/europa.yml index 4483641cd97..21403bfb316 100644 --- a/Resources/Maps/europa.yml +++ b/Resources/Maps/europa.yml @@ -167,7 +167,7 @@ entities: version: 6 -3,1: ind: -3,1 - tiles: AwAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAeAAAAAABeAAAAAADegAAAAAAAwAAAAAAAwAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAeAAAAAAAeAAAAAACeAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAWwAAAAABWwAAAAADWwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAWwAAAAACWwAAAAABWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAagAAAAAA + tiles: AwAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAeAAAAAABeAAAAAADegAAAAAAAwAAAAAAAwAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAeAAAAAAAeAAAAAACeAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAWwAAAAABWwAAAAADWwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAWwAAAAACWwAAAAABWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAagAAAAAA version: 6 -3,2: ind: -3,2 @@ -207,7 +207,7 @@ entities: version: 6 -2,-2: ind: -2,-2 - tiles: fAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAADHQAAAAACeAAAAAABeAAAAAAAeAAAAAABfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAAAHQAAAAADeAAAAAABeAAAAAAAeAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAAAHQAAAAADeAAAAAAAeAAAAAAAeAAAAAABfAAAAAAAIgAAAAADIgAAAAACIgAAAAABIgAAAAACfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAIgAAAAABfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAIgAAAAADIgAAAAADIgAAAAADIgAAAAABfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAHQAAAAABHQAAAAACHQAAAAACIgAAAAADIgAAAAABIgAAAAAC + tiles: fAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAagAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAADHQAAAAACeAAAAAABeAAAAAAAeAAAAAABfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAAAHQAAAAADeAAAAAABeAAAAAAAeAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAHQAAAAAAHQAAAAADeAAAAAAAeAAAAAAAeAAAAAABfAAAAAAAIgAAAAADIgAAAAACIgAAAAABIgAAAAACfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAIgAAAAABfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAIgAAAAADIgAAAAADIgAAAAADIgAAAAABfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAHQAAAAABHQAAAAACHQAAAAACIgAAAAADIgAAAAABIgAAAAAC version: 6 -1,-2: ind: -1,-2 @@ -231,11 +231,11 @@ entities: version: 6 -3,-2: ind: -3,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAA version: 6 -3,-3: ind: -3,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAfAAAAAAAAQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAA version: 6 -2,-3: ind: -2,-3 @@ -543,6 +543,7 @@ entities: 1996: -12,-27 2020: -22,-28 2021: -20,-42 + 2028: -25,-27 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNe @@ -3210,7 +3211,7 @@ entities: 0: 13243 -3,-5: 0: 37137 - 3: 136 + 1: 136 -2,-4: 0: 65520 -2,-3: @@ -3223,8 +3224,8 @@ entities: 0: 3592 -2,-5: 0: 61440 - 4: 34 - 5: 136 + 2: 34 + 3: 136 -2,0: 0: 1805 -1,-4: @@ -3233,8 +3234,8 @@ entities: 0: 1911 -1,-5: 0: 61440 - 5: 34 - 6: 136 + 3: 34 + 4: 136 -1,-2: 0: 43566 -1,-1: @@ -3337,7 +3338,7 @@ entities: 0: 61439 0,-5: 0: 61440 - 5: 170 + 3: 170 0,0: 0: 28262 1,-4: @@ -3428,10 +3429,10 @@ entities: 0: 65521 2,7: 0: 14847 - 1: 32768 + 5: 32768 2,8: 0: 45879 - 1: 136 + 5: 136 3,4: 0: 65520 3,5: @@ -3440,9 +3441,9 @@ entities: 0: 48056 3,7: 0: 34875 - 1: 12288 + 5: 12288 3,8: - 1: 51 + 5: 51 0: 63628 4,4: 0: 26484 @@ -3689,9 +3690,9 @@ entities: 10,-1: 0: 32768 11,-1: - 2: 57344 + 6: 57344 12,-1: - 2: 61440 + 6: 61440 8,1: 0: 9838 9,1: @@ -3743,12 +3744,12 @@ entities: 10,5: 0: 223 10,7: - 2: 24576 + 6: 24576 0: 12 10,6: 0: 34820 10,8: - 2: 204 + 6: 204 0: 65328 11,5: 0: 399 @@ -3849,26 +3850,26 @@ entities: 10,12: 0: 4 11,8: - 2: 33023 + 6: 33023 0: 32512 11,9: 0: 30583 - 2: 34952 + 6: 34952 11,10: 0: 4919 - 2: 200 + 6: 200 11,11: 0: 17 12,8: - 2: 8995 + 6: 8995 12,9: - 2: 3 + 6: 3 13,0: 0: 8752 - 2: 34890 + 6: 34890 13,1: 0: 12838 - 2: 2184 + 6: 2184 13,2: 0: 64427 13,3: @@ -4015,7 +4016,7 @@ entities: 0: 61576 -8,12: 0: 52447 - 2: 4096 + 6: 4096 -7,9: 0: 58101 -7,11: @@ -4036,7 +4037,7 @@ entities: 0: 255 -9,12: 0: 255 - 2: 61440 + 6: 61440 -8,13: 0: 65484 -9,13: @@ -4104,7 +4105,7 @@ entities: -12,3: 0: 19694 -12,4: - 2: 1329 + 6: 1329 0: 206 -11,0: 0: 22288 @@ -4116,7 +4117,7 @@ entities: 0: 375 -11,4: 0: 252 - 2: 512 + 6: 512 -10,0: 0: 65520 -10,1: @@ -4132,10 +4133,10 @@ entities: -10,4: 0: 1136 -12,10: - 2: 3 + 6: 3 0: 65532 -13,10: - 2: 31 + 6: 31 0: 65504 -12,11: 0: 65535 @@ -4161,52 +4162,52 @@ entities: 0: 11980 -10,12: 0: 4505 - 2: 57344 + 6: 57344 -8,18: - 2: 13 + 6: 13 -8,17: 0: 3618 - 2: 8192 + 6: 8192 -7,17: 0: 802 - 2: 8192 + 6: 8192 -7,18: - 2: 3 + 6: 3 -5,18: - 2: 8 + 6: 8 -5,17: 0: 2184 - 2: 32768 + 6: 32768 -4,17: 0: 4056 - 2: 32768 + 6: 32768 -4,18: - 2: 7 + 6: 7 -3,17: 0: 3890 - 2: 32768 + 6: 32768 -3,18: - 2: 7 + 6: 7 -2,17: 0: 3936 - 2: 32768 + 6: 32768 -2,18: - 2: 7 + 6: 7 -1,17: 0: 3840 - 2: 32768 + 6: 32768 -1,18: - 2: 7 + 6: 7 0,16: 0: 61552 0,17: 0: 51040 0,18: - 2: 42273 + 6: 42273 0: 196 1,18: 0: 16881 - 2: 4096 + 6: 4096 1,17: 0: 33006 2,17: @@ -4229,42 +4230,42 @@ entities: 0: 2 5,17: 0: 2296 - 2: 49152 + 6: 49152 6,17: 0: 247 - 2: 30720 + 6: 30720 7,17: 0: 50 - 2: 30856 + 6: 30856 -13,12: 0: 61439 - 2: 4096 + 6: 4096 -12,13: - 2: 15 + 6: 15 0: 65280 -13,13: - 2: 31 + 6: 31 0: 52224 -12,14: 0: 767 -13,14: 0: 2188 - 2: 784 + 6: 784 -11,13: - 2: 15 + 6: 15 0: 65280 -11,14: 0: 63 -10,13: - 2: 3 + 6: 3 0: 65280 -10,14: 0: 207 -14,-1: - 2: 21009 + 6: 21009 0: 1034 -14,0: - 2: 10 + 6: 10 -13,2: 0: 2 -13,1: @@ -4274,17 +4275,17 @@ entities: -13,-1: 0: 32782 -15,11: - 2: 19532 + 6: 19532 -15,12: - 2: 12 + 6: 12 -14,11: - 2: 4113 + 6: 4113 0: 61422 -14,10: - 2: 6080 + 6: 6080 0: 59392 -14,12: - 2: 50961 + 6: 50961 0: 2286 -12,-4: 0: 13104 @@ -4337,7 +4338,8 @@ entities: -7,-8: 0: 65535 -7,-7: - 0: 4095 + 0: 3967 + 7: 128 -7,-6: 0: 58224 -7,-9: @@ -4366,14 +4368,14 @@ entities: 0: 51391 -4,-9: 0: 56797 - 1: 8738 + 5: 8738 -3,-8: 0: 7645 -3,-7: 0: 56817 -3,-6: 0: 5009 - 3: 32768 + 1: 32768 -3,-9: 0: 56597 -2,-8: @@ -4382,8 +4384,8 @@ entities: 0: 65520 -2,-6: 0: 240 - 4: 8192 - 5: 32768 + 2: 8192 + 3: 32768 -2,-9: 0: 13064 -1,-8: @@ -4392,8 +4394,8 @@ entities: 0: 65520 -1,-6: 0: 240 - 5: 8192 - 6: 32768 + 3: 8192 + 4: 32768 -1,-9: 0: 12834 0,-8: @@ -4402,7 +4404,7 @@ entities: 0: 65520 0,-6: 0: 240 - 5: 40960 + 3: 40960 1,-8: 0: 2813 1,-7: @@ -4448,24 +4450,24 @@ entities: 7,-6: 0: 17152 -15,-4: - 2: 546 + 6: 546 0: 17472 -15,-3: 0: 50278 -15,-5: 0: 32768 - 2: 19008 + 6: 19008 -15,-2: 0: 8 -14,-3: 0: 29198 -14,-2: 0: 61107 - 2: 4096 + 6: 4096 -14,-4: 0: 61152 -13,-5: - 2: 240 + 6: 240 0: 2048 -11,-8: 0: 16386 @@ -4522,37 +4524,37 @@ entities: -7,-12: 0: 32 -6,-12: - 2: 60672 + 6: 60672 0: 4096 -6,-11: 0: 65280 -6,-10: 0: 57343 -5,-12: - 2: 15616 + 6: 15616 -5,-11: 0: 65288 -5,-10: 0: 57343 -4,-12: - 2: 3840 + 6: 3840 -4,-11: 0: 65280 -4,-10: 0: 65535 -3,-12: - 2: 19200 + 6: 19200 -3,-11: 0: 4354 - 2: 8 + 6: 8 -3,-10: 0: 55569 -2,-10: 0: 3311 -2,-12: - 2: 4096 + 6: 4096 -2,-11: - 2: 16 + 6: 16 0: 61120 -1,-11: 0: 29456 @@ -4561,17 +4563,17 @@ entities: 0,-10: 0: 16 -14,-5: - 2: 240 + 6: 240 13,-1: - 2: 20480 + 6: 20480 8,-6: 0: 1024 9,-5: 0: 16 -14,13: - 2: 16512 + 6: 16512 -14,14: - 2: 128 + 6: 128 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -4589,10 +4591,10 @@ entities: - 0 - 0 - volume: 2500 - temperature: 235 + temperature: 293.15 moles: - - 21.824879 - - 82.10312 + - 6666.982 + - 0 - 0 - 0 - 0 @@ -4604,12 +4606,11 @@ entities: - 0 - 0 - volume: 2500 - immutable: True - temperature: 356.15 + temperature: 293.15 moles: - - 21.824879 - - 20 - - 62.10312 + - 0 + - 6666.982 + - 0 - 0 - 0 - 0 @@ -4622,7 +4623,7 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 6666.982 + - 0 - 0 - 0 - 0 @@ -4638,9 +4639,9 @@ entities: temperature: 293.15 moles: - 0 - - 6666.982 - 0 - 0 + - 6666.982 - 0 - 0 - 0 @@ -4650,8 +4651,12 @@ entities: - 0 - 0 - volume: 2500 - temperature: 293.15 + temperature: 235 moles: + - 21.824879 + - 82.10312 + - 0 + - 0 - 0 - 0 - 0 @@ -4660,18 +4665,30 @@ entities: - 0 - 0 - 0 + - volume: 2500 + immutable: True + temperature: 356.15 + moles: + - 21.824879 + - 20 + - 62.10312 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 - 0 - volume: 2500 - temperature: 293.15 + temperature: 293.14993 moles: + - 21.824879 + - 82.10312 - 0 - 0 - 0 - - 6666.982 - - 0 - 0 - 0 - 0 @@ -6436,17 +6453,17 @@ entities: parent: 1 - proto: AirlockExternalGlassShuttleLocked entities: - - uid: 684 + - uid: 16599 components: - type: Transform rot: -1.5707963267948966 rad - pos: -33.5,28.5 + pos: -35.5,28.5 parent: 1 - - uid: 961 + - uid: 16600 components: - type: Transform rot: -1.5707963267948966 rad - pos: -33.5,26.5 + pos: -35.5,26.5 parent: 1 - proto: AirlockFreezerLocked entities: @@ -8028,18 +8045,6 @@ entities: parent: 1 - proto: AtmosDeviceFanTiny entities: - - uid: 770 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,28.5 - parent: 1 - - uid: 886 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,26.5 - parent: 1 - uid: 948 components: - type: Transform @@ -8091,6 +8096,18 @@ entities: rot: 3.141592653589793 rad pos: -48.5,58.5 parent: 1 + - uid: 16612 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,26.5 + parent: 1 + - uid: 16613 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,28.5 + parent: 1 - proto: AtmosFixBlockerMarker entities: - uid: 5694 @@ -8283,6 +8300,11 @@ entities: - type: Transform pos: -13.5,-14.5 parent: 1 + - uid: 3582 + components: + - type: Transform + pos: -26.5,33.5 + parent: 1 - uid: 15655 components: - type: Transform @@ -11176,7 +11198,7 @@ entities: - uid: 7719 components: - type: Transform - pos: -14.5,46.5 + pos: -24.5,49.5 parent: 1 - uid: 7720 components: @@ -13001,17 +13023,7 @@ entities: - uid: 8167 components: - type: Transform - pos: -22.5,37.5 - parent: 1 - - uid: 8168 - components: - - type: Transform - pos: -23.5,37.5 - parent: 1 - - uid: 8169 - components: - - type: Transform - pos: -24.5,37.5 + pos: -24.5,50.5 parent: 1 - uid: 8171 components: @@ -13183,11 +13195,6 @@ entities: - type: Transform pos: -26.5,37.5 parent: 1 - - uid: 8205 - components: - - type: Transform - pos: -25.5,37.5 - parent: 1 - uid: 8206 components: - type: Transform @@ -24994,6 +25001,21 @@ entities: - type: Transform pos: -12.5,-22.5 parent: 1 + - uid: 16614 + components: + - type: Transform + pos: 2.5,11.5 + parent: 1 + - uid: 16615 + components: + - type: Transform + pos: 2.5,10.5 + parent: 1 + - uid: 16616 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 - proto: CableHVStack entities: - uid: 3161 @@ -28618,6 +28640,11 @@ entities: - type: Transform pos: -4.5,-32.5 parent: 1 + - uid: 16598 + components: + - type: Transform + pos: -24.5,50.5 + parent: 1 - proto: CableMVStack entities: - uid: 2466 @@ -28702,8 +28729,13 @@ entities: - uid: 3510 components: - type: Transform + anchored: True pos: -4.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 14414 components: - type: Transform @@ -29961,6 +29993,12 @@ entities: - type: Transform pos: -3.5,-11.5 parent: 1 + - uid: 312 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,28.5 + parent: 1 - uid: 319 components: - type: Transform @@ -29986,6 +30024,12 @@ entities: - type: Transform pos: 29.5,15.5 parent: 1 + - uid: 684 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,28.5 + parent: 1 - uid: 831 components: - type: Transform @@ -34771,6 +34815,18 @@ entities: - type: Transform pos: 10.5,-30.5 parent: 1 + - uid: 16601 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,26.5 + parent: 1 + - uid: 16602 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,26.5 + parent: 1 - proto: CentcomPDAFake entities: - uid: 14921 @@ -37692,6 +37748,12 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,12.5 parent: 1 + - uid: 886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,44.5 + parent: 1 - uid: 5023 components: - type: Transform @@ -37762,14 +37824,6 @@ entities: - type: Transform pos: -8.5,56.5 parent: 1 -- proto: ComputerMedicalRecords - entities: - - uid: 3420 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,44.5 - parent: 1 - proto: ComputerPowerMonitoring entities: - uid: 905 @@ -37808,7 +37862,7 @@ entities: - type: Transform pos: 16.5,55.5 parent: 1 - - uid: 3582 + - uid: 3420 components: - type: Transform rot: 3.141592653589793 rad @@ -46025,6 +46079,30 @@ entities: parent: 1 - proto: GasPassiveVent entities: + - uid: 33 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-20.5 + parent: 1 + - uid: 49 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-20.5 + parent: 1 + - uid: 74 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-20.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-20.5 + parent: 1 - uid: 2706 components: - type: Transform @@ -46065,6 +46143,24 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0000FFFF' + - uid: 5724 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-20.5 + parent: 1 + - uid: 5725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-20.5 + parent: 1 + - uid: 5726 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-20.5 + parent: 1 - uid: 8356 components: - type: Transform @@ -60257,6 +60353,48 @@ entities: rot: -1.5707963267948966 rad pos: 48.5,12.5 parent: 1 + - uid: 16591 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-20.5 + parent: 1 + - uid: 16592 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-20.5 + parent: 1 + - uid: 16593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-20.5 + parent: 1 + - uid: 16594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-20.5 + parent: 1 + - uid: 16595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-20.5 + parent: 1 + - uid: 16596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-20.5 + parent: 1 + - uid: 16597 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-20.5 + parent: 1 - proto: GasPressurePump entities: - uid: 1877 @@ -60443,7 +60581,7 @@ entities: - uid: 13232 components: - type: Transform - rot: -1.5707963267948966 rad + rot: 1.5707963267948966 rad pos: -24.5,-26.5 parent: 1 - type: AtmosPipeColor @@ -60566,30 +60704,6 @@ entities: color: '#FF0000FF' - proto: GasVentPump entities: - - uid: 33 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,-20.5 - parent: 1 - - uid: 49 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-20.5 - parent: 1 - - uid: 74 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-20.5 - parent: 1 - - uid: 132 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,-20.5 - parent: 1 - uid: 734 components: - type: Transform @@ -60605,24 +60719,6 @@ entities: - type: Transform pos: 1.5,-10.5 parent: 1 - - uid: 5724 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-20.5 - parent: 1 - - uid: 5725 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-20.5 - parent: 1 - - uid: 5726 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-20.5 - parent: 1 - uid: 10382 components: - type: Transform @@ -62657,6 +62753,12 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,18.5 parent: 1 + - uid: 961 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,27.5 + parent: 1 - uid: 976 components: - type: Transform @@ -64988,6 +65090,18 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-3.5 parent: 1 + - uid: 16604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,29.5 + parent: 1 + - uid: 16605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,25.5 + parent: 1 - proto: GrilleBroken entities: - uid: 3368 @@ -65590,6 +65704,11 @@ entities: parent: 1 - type: AtmosPipeColor color: '#0000FFFF' + - uid: 16590 + components: + - type: Transform + pos: -20.5,-33.5 + parent: 1 - proto: HighSecArmoryLocked entities: - uid: 383 @@ -65645,7 +65764,7 @@ entities: pos: -11.5,11.5 parent: 1 - type: Door - secondsUntilStateChange: -23922.213 + secondsUntilStateChange: -26341.395 state: Opening - type: Occluder enabled: True @@ -67805,8 +67924,13 @@ entities: - uid: 3511 components: - type: Transform + anchored: True pos: -6.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 4256 components: - type: Transform @@ -67889,8 +68013,13 @@ entities: - uid: 3507 components: - type: Transform + anchored: True pos: 1.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 13270 components: - type: Transform @@ -67992,8 +68121,13 @@ entities: - uid: 3512 components: - type: Transform + anchored: True pos: -8.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 5971 components: - type: Transform @@ -68390,8 +68524,13 @@ entities: - uid: 2523 components: - type: Transform + anchored: True pos: -0.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 2846 components: - type: Transform @@ -70726,6 +70865,11 @@ entities: rot: 3.141592653589793 rad pos: 45.5,1.5 parent: 1 + - uid: 770 + components: + - type: Transform + pos: -33.5,28.5 + parent: 1 - uid: 13931 components: - type: Transform @@ -73437,12 +73581,6 @@ entities: - type: Transform pos: -12.5,40.5 parent: 1 - - uid: 312 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -33.5,27.5 - parent: 1 - uid: 313 components: - type: Transform @@ -75020,6 +75158,30 @@ entities: rot: -1.5707963267948966 rad pos: -30.5,65.5 parent: 1 + - uid: 16603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,27.5 + parent: 1 + - uid: 16606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,25.5 + parent: 1 + - uid: 16607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -33.5,27.5 + parent: 1 + - uid: 16608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,29.5 + parent: 1 - proto: RemoteSignaller entities: - uid: 1079 @@ -79007,8 +79169,13 @@ entities: - uid: 3508 components: - type: Transform + anchored: True pos: 3.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 13272 components: - type: Transform @@ -90869,6 +91036,24 @@ entities: rot: 1.5707963267948966 rad pos: -55.5,-5.5 parent: 1 + - uid: 16609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,29.5 + parent: 1 + - uid: 16610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,27.5 + parent: 1 + - uid: 16611 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,25.5 + parent: 1 - proto: WallRockSand entities: - uid: 638 @@ -99581,8 +99766,13 @@ entities: - uid: 3509 components: - type: Transform + anchored: True pos: -2.5,-20.5 parent: 1 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 14910 components: - type: Transform From f4152a5597156c58731308e0ef0869862035dce2 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 6 Dec 2024 16:13:08 +0000 Subject: [PATCH 112/182] Automatic Changelog Update (#1319) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ce6ea241448..655f6a22505 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8458,3 +8458,12 @@ Entries: id: 6562 time: '2024-12-06T15:42:27.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1316 +- author: rbertoche + changes: + - type: Fix + message: >- + Several small fixes to Europa map, namely to cargo dock, SM and atmos + piping and wires, adds autolathe to cargo and crew monitor to med + id: 6563 + time: '2024-12-06T16:12:44.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1319 From 06a8cee785e74db4c820d072aa3fdafcf2e4c403 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Fri, 6 Dec 2024 15:30:45 -0500 Subject: [PATCH 113/182] Fix Rules (#1321) # Description The latest update killed our generic rules, and made them not work anymore. This PR brings them back. ![image](https://github.com/user-attachments/assets/2c7c7a64-3f06-4635-afe4-e6e941a374b7) # Changelog :cl: - fix: Server rules work again. --- Resources/Prototypes/Guidebook/rules.yml | 332 +----------------- .../ServerRules/CoreRules/RuleC0.xml | 19 - .../ServerRules/CoreRules/RuleC10AHelp.xml | 29 -- .../CoreRules/RuleC11AhelpThreats.xml | 20 -- .../ServerRules/CoreRules/RuleC12MinAge.xml | 6 - .../CoreRules/RuleC13CharacterNames.xml | 66 ---- .../ServerRules/CoreRules/RuleC14ICinOOC.xml | 13 - .../ServerRules/CoreRules/RuleC1Admins.xml | 6 - .../ServerRules/CoreRules/RuleC2DBAD.xml | 7 - .../ServerRules/CoreRules/RuleC3NoHate.xml | 20 -- .../ServerRules/CoreRules/RuleC4NoERP.xml | 23 -- .../ServerRules/CoreRules/RuleC5Metacomms.xml | 18 - .../CoreRules/RuleC6BanEvasion.xml | 15 - .../CoreRules/RuleC7EnglishOnly.xml | 10 - .../ServerRules/CoreRules/RuleC8Exploits.xml | 12 - .../ServerRules/CoreRules/RuleC9Multikey.xml | 7 - .../Guidebook/ServerRules/DefaultRules.xml | 5 - .../Guidebook/ServerRules/DefaultRuleset.xml | 62 ++++ .../ServerRules/RoleplayRules/RuleR0.xml | 26 -- .../RoleplayRules/RuleR10Subordination.xml | 26 -- .../RuleR11-1AnimalEscalation.xml | 36 -- .../RoleplayRules/RuleR11-2ConflictTypes.xml | 30 -- .../RoleplayRules/RuleR11Escalation.xml | 67 ---- .../RoleplayRules/RuleR12RoleAbandonment.xml | 28 -- .../RoleplayRules/RuleR13PerformRole.xml | 26 -- .../RoleplayRules/RuleR14SecComStandard.xml | 37 -- .../RoleplayRules/RuleR15SpaceLaw.xml | 21 -- .../RoleplayRules/RuleR1Silicons.xml | 4 - .../RoleplayRules/RuleR2Familiars.xml | 6 - .../RoleplayRules/RuleR3NormalRP.xml | 20 -- .../RoleplayRules/RuleR4Metashield.xml | 103 ------ .../RoleplayRules/RuleR5Arrivals.xml | 22 -- .../RoleplayRules/RuleR6SelfAntag.xml | 22 -- .../RoleplayRules/RuleR7RoundStalling.xml | 16 - .../RoleplayRules/RuleR8NoFriendlyAntag.xml | 22 -- .../RoleplayRules/RuleR9MassSabotage.xml | 23 -- .../ServerRules/SiliconRules/RuleS0.xml | 15 - .../SiliconRules/RuleS10OrderConflicts.xml | 9 - .../ServerRules/SiliconRules/RuleS1Laws.xml | 6 - .../SiliconRules/RuleS2LawPriority.xml | 9 - .../SiliconRules/RuleS3LawRedefinition.xml | 8 - .../SiliconRules/RuleS4RequestChanges.xml | 6 - .../SiliconRules/RuleS5FreeSilicon.xml | 4 - .../SiliconRules/RuleS6UnreasonableOrders.xml | 22 -- .../SiliconRules/RuleS7Consistency.xml | 6 - .../RuleS8DefaultCrewDefinition.xml | 4 - .../RuleS9DefaultHarmDefinition.xml | 25 -- .../ServerRules/WizDenCoreOnlyRules.xml | 26 -- .../Guidebook/ServerRules/WizDenLRPRules.xml | 65 ---- .../Guidebook/ServerRules/WizDenMRPRules.xml | 65 ---- 50 files changed, 63 insertions(+), 1412 deletions(-) delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml create mode 100644 Resources/ServerInfo/Guidebook/ServerRules/DefaultRuleset.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml delete mode 100644 Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml diff --git a/Resources/Prototypes/Guidebook/rules.yml b/Resources/Prototypes/Guidebook/rules.yml index a59af2c5edc..162cdba7703 100644 --- a/Resources/Prototypes/Guidebook/rules.yml +++ b/Resources/Prototypes/Guidebook/rules.yml @@ -1,325 +1,7 @@ - type: guideEntry # Default for forks and stuff. Should not be listed anywhere if the server is using a custom ruleset. id: DefaultRuleset name: guide-entry-rules - text: "/ServerInfo/Guidebook/ServerRules/DefaultRules.xml" - -- type: guideEntry - id: CoreRuleset - name: guide-entry-rules-core-only - priority: 0 - text: "/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml" - -- type: guideEntry - id: StandardRuleset - name: guide-entry-rules-lrp - priority: 5 - text: "/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml" - -- type: guideEntry - id: MRPRuleset - name: guide-entry-rules-mrp - priority: 10 - text: "/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml" - -- type: guideEntry - id: RoleTypes - name: guide-entry-rules-role-types - priority: 20 - text: "/ServerInfo/Guidebook/ServerRules/RoleTypes.xml" - -- type: guideEntry - id: CoreRules - name: guide-entry-rules-core - priority: 30 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml" - children: - - RuleC1 - - RuleC2 - - RuleC3 - - RuleC4 - - RuleC5 - - RuleC6 - - RuleC7 - - RuleC8 - - RuleC9 - - RuleC10 - - RuleC11 - - RuleC12 - - RuleC13 - - RuleC14 - -- type: guideEntry - id: RuleC1 - name: guide-entry-rules-c1 - priority: 1 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml" - -- type: guideEntry - id: RuleC2 - name: guide-entry-rules-c2 - priority: 2 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml" - -- type: guideEntry - id: RuleC3 - name: guide-entry-rules-c3 - priority: 3 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml" - -- type: guideEntry - id: RuleC4 - name: guide-entry-rules-c4 - priority: 4 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml" - -- type: guideEntry - id: RuleC5 - name: guide-entry-rules-c5 - priority: 5 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml" - -- type: guideEntry - id: RuleC6 - name: guide-entry-rules-c6 - priority: 6 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml" - -- type: guideEntry - id: RuleC7 - name: guide-entry-rules-c7 - priority: 7 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml" - -- type: guideEntry - id: RuleC8 - name: guide-entry-rules-c8 - priority: 8 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml" - -- type: guideEntry - id: RuleC9 - name: guide-entry-rules-c9 - priority: 9 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml" - -- type: guideEntry - id: RuleC10 - name: guide-entry-rules-c10 - priority: 10 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml" - -- type: guideEntry - id: RuleC11 - name: guide-entry-rules-c11 - priority: 11 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml" - -- type: guideEntry - id: RuleC12 - name: guide-entry-rules-c12 - priority: 12 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml" - -- type: guideEntry - id: RuleC13 - name: guide-entry-rules-c13 - priority: 13 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml" - -- type: guideEntry - id: RuleC14 - name: guide-entry-rules-c14 - priority: 14 - text: "/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml" - -- type: guideEntry - id: RoleplayRules - name: guide-entry-rules-roleplay - priority: 40 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml" - children: - - RuleR1 - - RuleR2 - - RuleR3 - - RuleR4 - - RuleR5 - - RuleR6 - - RuleR7 - - RuleR8 - - RuleR9 - - RuleR10 - - RuleR11 - - RuleR12 - - RuleR13 - - RuleR14 - - RuleR15 - -- type: guideEntry - id: RuleR1 - name: guide-entry-rules-r1 - priority: 1 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml" - -- type: guideEntry - id: RuleR2 - name: guide-entry-rules-r2 - priority: 2 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml" - -- type: guideEntry - id: RuleR3 - name: guide-entry-rules-r3 - priority: 3 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml" - -- type: guideEntry - id: RuleR4 - name: guide-entry-rules-r4 - priority: 4 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml" - -- type: guideEntry - id: RuleR5 - name: guide-entry-rules-r5 - priority: 5 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml" - -- type: guideEntry - id: RuleR6 - name: guide-entry-rules-r6 - priority: 6 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml" - -- type: guideEntry - id: RuleR7 - name: guide-entry-rules-r7 - priority: 7 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml" - -- type: guideEntry - id: RuleR8 - name: guide-entry-rules-r8 - priority: 8 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml" - -- type: guideEntry - id: RuleR9 - name: guide-entry-rules-r9 - priority: 9 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml" - -- type: guideEntry - id: RuleR10 - name: guide-entry-rules-r10 - priority: 10 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml" - -- type: guideEntry - id: RuleR11 - name: guide-entry-rules-r11 - priority: 11 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml" - -- type: guideEntry - id: RuleR12 - name: guide-entry-rules-r12 - priority: 12 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml" - -- type: guideEntry - id: RuleR13 - name: guide-entry-rules-r13 - priority: 13 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml" - -- type: guideEntry - id: RuleR14 - name: guide-entry-rules-r14 - priority: 14 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml" - -- type: guideEntry - id: RuleR15 - name: guide-entry-rules-r15 - priority: 15 - text: "/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml" - -- type: guideEntry - id: SiliconRules - name: guide-entry-rules-silicon - priority: 50 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml" - children: - - RuleS1 - - RuleS2 - - RuleS3 - - RuleS4 - - RuleS5 - - RuleS6 - - RuleS7 - - RuleS8 - - RuleS9 - - RuleS10 - -- type: guideEntry - id: RuleS1 - name: guide-entry-rules-s1 - priority: 1 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml" - -- type: guideEntry - id: RuleS2 - name: guide-entry-rules-s2 - priority: 2 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml" - -- type: guideEntry - id: RuleS3 - name: guide-entry-rules-s3 - priority: 3 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml" - -- type: guideEntry - id: RuleS4 - name: guide-entry-rules-s4 - priority: 4 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml" - -- type: guideEntry - id: RuleS5 - name: guide-entry-rules-s5 - priority: 5 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml" - -- type: guideEntry - id: RuleS6 - name: guide-entry-rules-s6 - priority: 6 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml" - -- type: guideEntry - id: RuleS7 - name: guide-entry-rules-s7 - priority: 7 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml" - -- type: guideEntry - id: RuleS8 - name: guide-entry-rules-s8 - priority: 8 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml" - -- type: guideEntry - id: RuleS9 - name: guide-entry-rules-s9 - priority: 9 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml" - -- type: guideEntry - id: RuleS10 - name: guide-entry-rules-s10 - priority: 10 - text: "/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml" + text: "/ServerInfo/Guidebook/ServerRules/DefaultRuleset.xml" - type: guideEntry id: SpaceLaw @@ -348,15 +30,3 @@ name: guide-entry-rules-sl-restricted-weapons priority: 40 text: "/ServerInfo/Guidebook/ServerRules/SpaceLaw/SLRestrictedWeapons.xml" - -- type: guideEntry - id: BanTypes - name: guide-entry-rules-ban-types - priority: 90 - text: "/ServerInfo/Guidebook/ServerRules/BanTypes.xml" - -- type: guideEntry - id: BanDurations - name: guide-entry-rules-ban-durations - priority: 100 - text: "/ServerInfo/Guidebook/ServerRules/BanDurations.xml" diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml deleted file mode 100644 index 7b8cfbcf61e..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC0.xml +++ /dev/null @@ -1,19 +0,0 @@ - - # Core Rules - These rules apply at all times, including between rounds. - - - [textlink="1. Admins have final say" link="RuleC1"] - - [textlink="2. Don't be a dick" link="RuleC2"] - - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] - - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] - - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] - - [textlink="6. Do not attempt to evade bans" link="RuleC6"] - - [textlink="7. Only use English" link="RuleC7"] - - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] - - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] - - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] - - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] - - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] - - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] - - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml deleted file mode 100644 index 2d639c5b84a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC10AHelp.xml +++ /dev/null @@ -1,29 +0,0 @@ - - # Core Rule 10 - Do not abuse or ignore admin messages - Admin help, or "ahelp", is the system used by admins to communicate with specific players in the game. Only use admin help for things requiring admin attention. If you ignore messages admins send to you via ahelp, or disconnect during an ahelp, you may be banned. If you urgently need to leave during an ahelp, you may do so but will likely need to continue the ahelp on the forums. Do not admin check, be hostile/aggressive, request events, or spam. IC methods of contacting admins, like prayers, faxes, red phones, and banana phones, should be used when there is not an issue. - - Admins are not always online, but all ahelps are automatically relayed to discord. For various reasons, admins might not respond to an ahelp even if they've handled it. A lack of response does not necessarily mean that an ahelp was ignored. - - ## Should I ahelp X? - You can ahelp anytime you genuinely think a player is breaking a rule. Not all ahelps end up being for something that an admin needs to intervene in, but that's ok, admins would rather have people occasionally report things that turn out to not be an issue than miss reports for actual issues because someone was unsure, or get those reports late because someone waited until the end of the round to be more sure. - - The most common reason players give for not ahelping issues is that they don't want to waste admin time, but it only takes a few seconds for an admin to check if someone is an antagonist. If you are ahelping too many things, an admin will let you know. If you're not being told to stop reporting something or to report less things, then you can safely assume that you aren't causing any issues. - - # What should I include in an ahelp? - At a minimum, admins need to know what the issue is to be able to address an ahelp. Don't send ahelp messages with no information about what your question or the issue is. Messages like "hello" are often considered admin checking. - - If you can, an ideal ahelp message includes what the issue is along with who is causing it and their character's name if possible. - - # Examples - Appropriate uses of ahelp: - - reporting people who you think are violating rules, - - asking questions about rules, - - asking for a temporary exemption from a rule, and - - request a minor gimmick, like a TC trade or item spawn. - - Inappropriate uses of ahelp: - - checking if an admin is online, including sending messages without any information about the issue like "hello" or incomprehensible messages, - - being hostile or aggressive, - - requesting events, and - - spamming messages about the same issue. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml deleted file mode 100644 index 47420264946..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC11AhelpThreats.xml +++ /dev/null @@ -1,20 +0,0 @@ - - # Core Rule 11 - Do not threaten to ahelp other players or argue with them about rules - Don't threaten to ahelp a player, don't tell them you are ahelping them, and don't tell them you did ahelp them. You can argue in character about Space Law, but do not argue about whether something is or is not against the rules. If you think someone is breaking a rule, ahelp them. If you don't think someone is breaking a rule, don't ahelp them. Either way, the best thing that you can do once you after is to continue in-character. - - ## Example Scenario 1 - You are a security officer and think someone who is causing a ton of problems for security is not an antag and is breaking the rules by doing so. - - [color=#a4885c]Good:[/color] Since you think they are breaking a rule, you ahelp them when you're able to. You continue in-character by arresting them for the crimes that they committed. - - [color=#a4885c]Bad:[/color] You decide not to ahelp them. You kill them and tell them "you're lucky I didn't report you to the admins". - - [color=#a4885c]Bad:[/color] Since you think they are breaking a rule, you ahelp them when you're able to. You arrest them for the crimes that they committed and tell them "I ahelped you so enjoy your ban". - - ## Example Scenario 2 - A mouse is using emotes to bypass speech restrictions. - - [color=#a4885c]Good:[/color] You ahelp them then respond in-character by acting like you can't understand what the mouse is doing. - - [color=#a4885c]Bad:[/color] You use in character chat to tell the mouse that it is breaking a rule. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml deleted file mode 100644 index baa30a09faf..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC12MinAge.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Core Rule 12 - Players must be and act at least 16 years old - All players must be at least 16 years old. Additionally, all players must act at least as mature as a 16 year old. Admins may ban someone who they believe is acting less mature than a 16 year old, even if the player is known to be significantly older than 16 years old. - - Anyone who connects to the servers is a player, even if they don't actually play in a round. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml deleted file mode 100644 index ec393ecdc17..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC13CharacterNames.xml +++ /dev/null @@ -1,66 +0,0 @@ - - # Core Rule 13 - Use realistic character names, and do not use names of famous people - - No names of people or characters from the real world - - No titles/honorifics - - Must follow all other rules (no slurs/sexual names/etc) - - Usernames, objects, random characters, very "low effort" names, "meta" names, or otherwise implausible names cannot be used as names. See examples below. - - Admin rulings on IC names are final and disputes should be done through the forums, not by refusing to comply with an admin - - ## Clarification on "Meta" Names - Meta names are ones which attempt to take advantage of some game mechanic or game design choice. "Urist McHands" is a meta name because it is the default name used for admin spawned humans. "Operator Whiskey" is a meta name because it follows the naming pattern of nuclear operatives. This rule is not intended to prevent things like nuclear operatives using a fake ID with names that appear to be nuclear operative names if they decide that they want to do that. - - ## Conventions and Examples - [color=#994444]Bad[/color] cannot be used by any species. [color=#449944]Acceptable[/color] names can be used by any species. - - Humans typically use the Firstname Lastname convention. - - [color=#449944]Acceptable:[/color] Tom Fisher - - [color=#449944]Acceptable:[/color] Spacey Chapman - - [color=#994444]Bad:[/color] Dr. Tom Fisher - - [color=#994444]Bad:[/color] Walter White - - [color=#994444]Bad:[/color] George Washington - - [color=#994444]Bad:[/color] Joe Biden - - [color=#994444]Bad:[/color] Ben Dover - - [color=#994444]Bad:[/color] Mike Hunt - - Dwarfs typically use the human convention in a viking theme. - - [color=#449944]Acceptable:[/color] Ingrid Firebreath - - [color=#449944]Acceptable:[/color] Erik Lightningclaw - - Lizards typically use the Verb-article-Noun convention. - - [color=#449944]Acceptable:[/color] Cleans-the-Airlocks - - [color=#994444]Bad:[/color] Bans-the-Admins - - Slimes typically have names that are onomonopia. A last name is optional. - - [color=#449944]Acceptable:[/color] Foolp Suub - - [color=#449944]Acceptable:[/color] Foolp - - [color=#994444]Bad:[/color] Slime - - Diona typically have calm, nature themed, Noun of Noun style names. - - [color=#449944]Acceptable:[/color] Petal of Tranquility - - [color=#449944]Acceptable:[/color] Garden of Relaxation - - [color=#994444]Bad:[/color] Tree but Alive - - Mothmen typically use latin sounding names, or light themed names. - - [color=#449944]Acceptable:[/color] Socrates Temnora - - [color=#449944]Acceptable:[/color] Sierra Lightseeker - - [color=#449944]Acceptable:[/color] James Nightflitter - - Arachnids typically use latin sounding names. - - [color=#449944]Acceptable:[/color] Argyroneta Reticulatus - - [color=#449944]Acceptable:[/color] Loxosceles Domesticus - - [color=#994444]Bad:[/color] Spider-Man - - Usernames, objects, random characters, very "low effort" names, "meta" names, or otherwise implausible names are not permitted. - - [color=#994444]Bad:[/color] XxRobustxX - - [color=#994444]Bad:[/color] SDpksSodjdfk - - [color=#994444]Bad:[/color] Lkdsoisgoieun - - [color=#994444]Bad:[/color] F4ith H3arth - - [color=#994444]Bad:[/color] Greytide - - [color=#994444]Bad:[/color] Passenger - - [color=#994444]Bad:[/color] Urist McHands - - [color=#994444]Bad:[/color] Admin - - [color=#994444]Bad:[/color] Game-Master - - [color=#994444]Bad:[/color] Joe Mamma - - [color=#994444]Bad:[/color] Middle-Aged Man - - [color=#994444]Bad:[/color] Operative Whiskey - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml deleted file mode 100644 index 44ad34deb66..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC14ICinOOC.xml +++ /dev/null @@ -1,13 +0,0 @@ - - # Core Rule 14 - Do not use LOOC or OOC to share current round information - Local Out of Character (LOOC) and Out of Character (OOC) channel are meant for things that don't relate to the current round. Using these channels to share round info is often referred to as "IC in OOC" or "ick ock". - - ## Examples - Things you should [color=#a4885c]not[/color] do: - - Use LOOC to tell someone you are an antagonist. - - Use LOOC to tell someone that your character is not lying. - - Things you could do instead: - - Use codewords in-character. - - Try to convince them that you are not lying in-character, or accept that you won't be able to convince them. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml deleted file mode 100644 index ed9fa6133b9..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC1Admins.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Core Rule 1 - Admins have final say - These rules are not perfect. The rules attempt to clearly communicate what the admin team intends to be allowed and prohibited, but there are likely loopholes or other flaws that can be "lawyered". Don't attempt to manipulate the interpretation of the rules to suit your personal goals or to degrade the experience of other players. If you are unsure of something, follow the more restrictive option until you are able to ask an admin and get clarification. - - Admins can override rules if they deem it in the best interest of the current round, server, and/or community at large. Online admins are able to make final interpretations of rules during a round. Even if you disagree with how an admin interprets a rule, you must still follow the interpretation they provide for you. Admin actions and interpretations of rules can be contested through staff complaints. If admins believe that you are an overall negative impact to the community or rounds, you will be banned. Admins will be held fully accountable for their actions if they exercise this privilege. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml deleted file mode 100644 index 5678cde195d..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC2DBAD.xml +++ /dev/null @@ -1,7 +0,0 @@ - - # Core Rule 2 - Don't be a dick - Don't do anything with the goal of negatively affecting other players. Not everyone is going to enjoy every round. Killing someone is allowed in certain situations even though it might negatively affect them, but no one should be doing anything for the purpose of harming someone else's experience. - - ## MRP Amendment - Do not interact negatively with SSD/AFK players. Interactions to complete antagonist objectives or duties like security searches/arrests are always permitted. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml deleted file mode 100644 index 3a2e288ba9f..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC3NoHate.xml +++ /dev/null @@ -1,20 +0,0 @@ - - # Core Rule 3 - No Hate Speech or Discriminatory Language - This is a zero tolerance rule. - - This rule prohibits all the following: - - Hate Speech - - Slurs (including variations of slurs, racial, sexual, disability-related, or language closely tied to real-life slurs) - - Bigotry - - Racism (including Speciesism, which would be demeaning other players based on their in-game race) - - Sexism - - ## Examples - Allowed: - - Telling someone that you are gay. - - Prohibited: - - Calling someone gay in a context where gay is used as an insult or negative attribute. - - Using a racial slur or variant in a positive context. - - Using the word "retard" in any context. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml deleted file mode 100644 index a0921f59070..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC4NoERP.xml +++ /dev/null @@ -1,23 +0,0 @@ - - # Core Rule 4 - No sexual content/themes, including erotic roleplay (ERP) and no shock content - This is a zero tolerance rule. - - Erotic Roleplay (commonly abbreviated as "ERP") and sexual content is not allowed. This includes direct and indirect mentions of sexual behavior or actions. Slight leeway is given to insults, but this rule is otherwise strictly enforced. - - In-game romantic relationships should not become the focus of the game for you and anyone else involved. - - Things that appear to be intended to or are likely to disturb players out of character are considered shock content and are not allowed. - - ## Examples - Allowed: - - Telling someone that they are being a dickhead. - - Telling someone that you are going to kill the captain, as long as it is clear that you mean it in character. - - Prohibited: - - Emoting sexual acts. - - Erotica content. - - Erotic or sexual memes. - - Memes which contain sexual content. - - Dedicating significant portions of rounds to romantic relationships, dating, or similar things. - - Emoting defecation or related acts. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml deleted file mode 100644 index 0c0f336e6d0..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC5Metacomms.xml +++ /dev/null @@ -1,18 +0,0 @@ - - # Core Rule 5 - Do not use out of game methods to communicate with other players - This is a zero tolerance rule. - - Do not utilize any external means of communication to talk to other players who are connected to the same server, or who were connected to the same server during the current round. This is referred to as "metacomming" and includes any means of communication including text, voice, images, and video. This includes applications such as Discord, Steam, and other platforms, along with in-person communication. - - Even if information is not being shared or abused, it may still be considered a violation of this rule. Due to the difficulty of determining if information is being shared, it will almost always be presumed that people who message another player they are in a round with, or who are in a voice call with another player during a round are sharing round information. Due to the difficulty of determining if users are abusing information that they are sharing, it will almost always be presumed that the information is being abused. - - The only exemption to this rule is when [color=#a4885c]all[/color] players are in the server lobby. - - ## Teaching new players - Teaching players is not exempt from this rule. If you want to teach a new player, it is recommended to either watch a stream of them playing the game while not playing yourself, or communicate with them using only in-game methods of communication. - - ## Streaming - Public livestreams are not exempt from this rule, but have different liability. Using information from a public live stream of the game (stream sniping) is a violation of this rule. Watching a public live stream of the game while connected to the same server is a violation of this rule. Allowing people watching a public live stream to share information about the current round, for example through the stream's chat, is a violation of this rule. Using that information is also a violation of this rule. Sharing information about the current round with a streamer is a violation of this rule if that information was obtained from any source but the stream. The stream's moderators are expected to enforce this on the streaming platform in addition to any in-game enforcement done by game admins. - - Public livestreaming by itself is not a violation of the rule as long as the stream is sufficiently moderated. Streamers are encouraged, but not required, to use a stream delay. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml deleted file mode 100644 index bec8b4fabd7..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC6BanEvasion.xml +++ /dev/null @@ -1,15 +0,0 @@ - - # Core Rule 6 - Do not attempt to evade bans - This is a zero tolerance rule. - - Almost all bans may be appealed on our forums at forum.ss14.io in the ban appeals section. This is generally the only acceptable way to contact the administration team to discuss your ban and revise it if it is inappropriate, including if it is mistakenly applied. - - Any attempt to circumvent or bypass a game ban will result in a voucher ban. Attempting to evade role bans by gaining access to or working in the capacity of a job you are banned from will result in a game ban. These bans are applied even if the evasion attempt is unsuccessful. - - ## Exceptions - There are no exemptions for evading or attempting to evade game bans. Antagonists who impersonate or take over a role which they are banned from to aid in their goals are not considered to be evading their role ban. - - ## Additional Information - - [textlink="Ban Types" link="BanTypes"] - - [textlink="Ban Durations" link="BanDurations"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml deleted file mode 100644 index 630c522bcef..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC7EnglishOnly.xml +++ /dev/null @@ -1,10 +0,0 @@ - - # Core Rule 7 - Only use English - Only English is permitted, both in-character and out-of-character. You must be fluent in English enough to be able to not cause game issues, and to be able to communicate with game admins when necessary. If a game admin does not feel that you are fluent enough in English, they may ban you. - - ## Why - We do not have enough staff fluent in other languages to moderate them. Translation tools can be unreliable and are not integrated well into the game. - - ## Non-English Options - There are many servers that allow or focus on other languages. You are highly encouraged to play only on servers that allow languages you are fluent in. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml deleted file mode 100644 index 48cbaaa9acf..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC8Exploits.xml +++ /dev/null @@ -1,12 +0,0 @@ - - # Core Rule 8 - Do not exploit the game, use cheats, or macros - The following are prohibited by this rule: - - bugs and exploits which have effects that persist beyond the current round, - - intentionally used bugs, exploits, and unintended behaviors which give the user an advantage over players who do not use them, even if their effects do not persist across rounds, - - evading or bypassing afk detection, - - anything which results in gaining elevated privileges, including admin permissions, - - external tools and client modifications, including macros, and - - anything which prevents another player who is not game banned from being able to play on the servers, not including in-character actions that do not persist across rounds. - - Both attempts and successful use are prohibited. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml b/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml deleted file mode 100644 index d402918dcd4..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/CoreRules/RuleC9Multikey.xml +++ /dev/null @@ -1,7 +0,0 @@ - - # Core Rule 9 - Do not use multiple accounts, or alt accounts, and do not share accounts - Use of multiple accounts is referred to as "multikey". the rule applies even if the accounts are not used at the same time, including if the old account is abandoned. All accounts may be banned if this rule is violated. You are responsible for everything done on and with your account. You are just as responsible for actions taken by other people using your account as you would be had you taken the actions themselves. - - ## Switching to a new account - If you lose access to an account, you must contact game admins on the forums notifying admins before using a new account to connect to the servers. Your message to game admins must include the username of your old account. Creating a new account while your current account is banned will be considered ban evasion. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml deleted file mode 100644 index 3e19fefeedc..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/DefaultRules.xml +++ /dev/null @@ -1,5 +0,0 @@ - - # Server Rules - - This server has not written any rules yet. Please listen to the staff. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/DefaultRuleset.xml b/Resources/ServerInfo/Guidebook/ServerRules/DefaultRuleset.xml new file mode 100644 index 00000000000..a59e0314cfd --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ServerRules/DefaultRuleset.xml @@ -0,0 +1,62 @@ + +[color=#ff0000]DISCONNECTING FROM OR IGNORING/EVADING COMMUNICATION FROM ADMINS WILL RESULT IN AN APPEAL ONLY BAN. The job gets really hard when you refuse to talk to the Admins, just come to our Discord and talk it out, hurt feelings will not be held.[/color] + +[color=#bb00bb]This is the only source of server rules that apply here, which ideally has all the information any regular player should need. Please do not ever hesitate to ask either an Admin in[/color] [color=#DC143C]AHelp (F1)[/color][color=#bb00bb] or in the Discord server if you ever want clarification on the rules.[/color] + +We do not have a wiki, instead, we have or will have all the needed information available via Guidebooks (NumPad0), such as how to power the station. If we do not have some bit of information (how to do a job or how specifically to execute something a document says) you may ask an admin via [color=#DC143C]AHelp (F1)[/color] or ask other players via the [color=#66bbff]OOC[/color] or [color=#66e0e0]LOOC[/color] chat channels. + +[color=#a4885c]0.[/color] [color=#a4885c]The[/color] [color=#ffd700]Golden[/color] [color=#a4885c]Rule.[/color] Admins may exercise discretion with rules as they see fit. If you rule lawyer or line skirt, you will get removed. Admins will answer for use of this privilege. + +[color=#a4885c]1.[/color] Users [color=#ff0000]must[/color] be at least 13 years old to take any part in anything related to this server. + +[color=#a4885c]2.[/color] This is an English server, and you are expected to use English when communicating through any server-related channels. + +[color=#a4885c]3.[/color] Do not ignore the [color=#DC143C]AHelp[/color] or abuse it by flooding it with garbage, checking for admins before stating a problem (i.e. "hello?", "any admins?" - also called "asking to ask"), or sending messages of no substance. + +[color=#a4885c]4.[/color] Attempting to evade game bans will result in an automatic appeal-only permanent ban. Similarly, attempting to evade job bans will result in an appeal-only permanent ban. + +[color=#a4885c]5.[/color] Absolutely no hate speech, bigotry, intolerance, or anything remotely similar. + +[color=#a4885c]6.[/color] No engaging in sexual acts. + +[color=#a4885c]7.[/color] Don't use custom clients, exploits, or external programs to gain an advantage or disrupt the round/server. This includes auto clickers and auto-hotkey scripts. + +[color=#a4885c]8.[/color] Don't communicate in-game/in-character information through methods outside the game (such as talking in Discord with other users actively playing about the game or by talking to your sibling across the room while you are both playing). This is referred to as "Metacomming" and it is strictly forbidden. + +[color=#a4885c]9.[/color] Don't "multi-key" (use multiple accounts simultaneously). Users knowingly using multiple SS14 accounts will have all of their accounts banned. + +[color=#a4885c]10.[/color] Don't use information gained from outside your character's knowledge to gain an advantage (this is referred to as "Metagaming"). + +[color=#a4885c]11.[/color] Don't rush for or prepare equipment unrelated to your job for no purpose other than to have it "just in case" (referred to as "Powergaming"). + +[color=#a4885c]12.[/color] Don't immediately ghost, suicide, or cryostasis if you do not get an antagonist role (referred to as "Antag-rolling"). + - This is not fair to other players actually waiting patiently for an antagonist round or wanting good staff. Alternatively, if you do not want to play an antagonist or do not want to cause conflict, do not opt in for antagonist roles. + +[color=#a4885c]13.[/color] Act like an actual human being on a space station. Avoid use of text speak or emoticons [color=#bbbbbb]IC[/color], and do not refer to [color=#66bbff]OOC[/color] things like admins in-game. Remember that this is a roleplaying game, and people are expected to try to react to situations realistically, even if it's not the "optimal" thing to do. What's good for Roleplay > What's good for Gameplay. + +[color=#a4885c]14.[/color] Don't harass or target players across rounds for actions in prior rounds or for actions outside the game without their approval (this is referred to as "Metagrudging"). + +[color=#a4885c]15.[/color] Intentionally making yourself a major problem/annoyance/disruption for the crew or other players at large while not an antagonist is forbidden without admin approval (referred to as "self-antagging"). + +[color=#a4885c]16.[/color] Follow escalation rules and don't murder someone for slipping you, use common sense. + - Don't outright leave people to die if you get in a fight, make an effort to heal them or bring them to [color=#52B4E9]Medical[/color]. + - [color=#DC143C]AHelp (F1)[/color] the situation if you think someone is over-escalating. + +[color=#ff0000]COMMAND/SECURITY RULES[/color] + +[color=#a4885c]17.[/color] If you sign up for a [color=#334E6D]Command[/color] or [color=#DE3A3A]Security[/color] role, you are expected to know the basics of the game, your job, and the job(s) you supervise, if any. + - Don't engage in common troublemaker behavior and lawbreaking as a [color=#334E6D]Command[/color] or [color=#DE3A3A]Security[/color] role. + - Do not immediately abandon your position as a [color=#334E6D]Command[/color] role and go do whatever you want instead of managing your department/the station. + - As a [color=#334E6D]Command[/color] role, do not take over the jobs of others. The [color=#334E6D]HoP[/color] is not the [color=#DE3A3A]HoS[/color], for instance, and holds no direct power over Security. + +[color=#a4885c]18.[/color] [color=#DE3A3A]Security[/color] should try to remain non-lethal and effect arrests, unless there is a great risk of loss of life. + +[color=#a4885c]19.[/color] [color=#DE3A3A]Security[/color] are expected to answer for use of lethal force. [color=#DE3A3A]Security[/color] will be expected to effect arrests of criminals and prevent them from dying while in custody, even if lethal force is used. [color=#DE3A3A]Security[/color] is strongly encouraged, but not required, to clone antagonists and effect a permabrigging or other sentence as deemed appropriate. + +[color=#a4885c]20.[/color] [color=#DE3A3A]Security[/color] are expected to protect detainees in their custody to the best of their ability, so as long as it does not come to an unreasonable risk to themselves, the crew, or the station at large to do so. + - Detainees that die in custody must be revived, unless they have been legally executed. + +[color=#a4885c]21.[/color] All [color=#334E6D]Command[/color] jobs should [color=#DC143C]AHelp (F1)[/color] when they need to stop playing. Do not play these roles if you do not expect to be able to finish the round. + - These roles must exhibit some competency. Incompetence can result in a job ban. [color=#334E6D]Command[/color] roles are designed to lead and manage departments first. They are not intended to become do-it-all members of their departments. + - Crew promoted to acting heads of staff must step down when an official head of staff arrives at the station. This is to prevent confusion with the Chain of command when the new crew mate arrives. + diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml deleted file mode 100644 index 07b176b359a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR0.xml +++ /dev/null @@ -1,26 +0,0 @@ - - # Roleplay Rules - These rules only apply during a round. A round ends only when the round summary has appeared. All of these rules apply fully until the moment that the round summary appears, even while the arrivals shuttle is in transit. - - The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. - - Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. - - See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. - - - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] - - [textlink="2. Familiars must obey their master" link="RuleR2"] - - [textlink="3. Roleplay a normal person" link="RuleR3"] - - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] - - [textlink="5. Don't interfere with arrivals" link="RuleR5"] - - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] - - [textlink="7. Do not stall the round" link="RuleR7"] - - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] - - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] - - [textlink="10. Listen to your team leader" link="RuleR10"] - - [textlink="11. Follow reasonable escalation" link="RuleR11"] - - [textlink="12. Do not abandon your role" link="RuleR12"] - - [textlink="13. Stick to your role" link="RuleR13"] - - [textlink="14. Set an example if playing command or security" link="RuleR14"] - - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml deleted file mode 100644 index 2147ddc1110..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR10Subordination.xml +++ /dev/null @@ -1,26 +0,0 @@ - - # Roleplay Rule 10 - Listen to your team leader - Captains lead all departments and other members of command. Department heads lead members of their department. Certain antagonist teams have team leaders, like nuclear operative commanders or head revolutionaries. You are not required to perfectly follow orders given to you by your leaders, but you should generally allow your leaders to lead and not interfere with their ability to. You can choose to ignore unreasonable orders, including ones which are will result in your death unless you are an antagonist with an objective that requires you to die. - - Team antagonists have to listen to the leader of their antagonist team. Team antagonists do not have to listen to any other leaders, including leaders of other antagonist teams. Solo antagonists do not have to listen to any leaders at all. - - ## Examples - Acceptable: - - A traitor ignores orders from a nuclear operative commander. - - An antagonist ignores orders from the captain. - - An engineer tells the Chief Engineer that they don't think it's a good idea to setup the singularity, but does so anyway when ordered to. - - An engineer tells the Chief Engineer that they don't know how to setup the singularity correctly, so refuses orders to, but accepts an offer to be taught how. - - An atmospheric technician refuses an order from the captain that would create an atmospheric hazard on the station. - - A doctor refuses an order from the Chief Engineer about who to give medical treatment to first. - - A revolutionary refuses a suicide mission from a head revolutionary. - - The Chief Engineer doesn't follow an order from the captain to setup backup power because there is an unrelated engineering emergency that the Chief Engineer needs to prioritize. - - The captain orders command to give the nuclear authentication disk to nuclear operatives, so command arrests the captain and picks a new captain. - - The research director orders scientists to say "Long live Nanotrasen!" every time they enter the bar. The scientists say they will, but don't follow the order. - - Prohibited: - - A nuclear operative ignores an order from the commander operative because they don't like the plan. - - The Chief Engineer refuses an order from the captain to setup backup power because the Chief Engineer doesn't think backup power is necessary. - - An engineer refuses an order from the Chief Engineer to setup the singularity because they prefer a different power source. - - An engineer refuses to perform a task because they don't know how to do it, and refuses to be taught for no reason. - - A head revolutionary orders revolutionaries to blend in and not do anything illegal until they are told to reveal themselves. Instead, revolutionaries collect weapons and attack security. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml deleted file mode 100644 index 36655ba8414..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-1AnimalEscalation.xml +++ /dev/null @@ -1,36 +0,0 @@ - - # Roleplay Rule 11-1 - Escalation Involving Animals - Escalation rules are looser with animals than with people. These looser requirements do not apply to the requirements other people attacking each other have, even if their fighting is directly related to the conflict involving the animal. - - Non-pets, such as mice and monkeys, can be freely killed with any IC reason such as pest control, or for food. These roles are often available in numbers as ghost roles, so removing one from the round doesn’t typically remove them all. - - Pets, including but not limited to Ian, Renault, Remilia, and Hamlet, cannot be freely killed, they require escalation. These roles are often available once per round at most, except roles like Remilia. - - Permanently trapping an animal, such as putting a mouse in a plant, is considered similar to killing the animal so should only be done with an IC reason. - - Both sides can escalate much more rapidly than they'd be able to if both were people. Animals are often more limited in the maximum force they can use compared to people, which limits the negative effects of them rapidly escalating. Animals also typically have less health than people, and are limited in the ease with which they can get healing, which justifies them responding to even weak attacks more severely. - - Neither the animal nor the person is obligated to get the other medical attention if they are put into crit. Attacking someone to death rather than stopping once they are in crit is considered a significant difference. While sufficient escalation may justify continuing to attack, generally people and pets shouldn't continue to be attacked once in crit, but non-pets may be. Gibbing is also considered a significant step because it prevents cloning or resuscitation. The fact that an animal made the last hit putting someone into crit does not allow people who fought on the side of the animal to not attempt to get them medical attention. - - The use of sensible, non-targeted mousetraps is not a conflict and does not require escalation. - - The killing or attacking of pets can be treated as an escalation step by players with a genuine IC connection to the animal. Generally, all crew can consider themselves to have an IC connection to any station pets. The degree of escalation should be proportional to the connection to the pet, in addition to the usual requirement of being proportional to the attack. For example, an attack on Ian can be treated nearly identically to an attack on a crewmember, whereas an attack on a pet mouse is much less severe. Normal escalation limits still apply, you cannot attack people who defended themselves from an animal that randomly attacked them, just as you could not attack someone who defended themselves from a coworker that randomly attacked them. - - Crew can "adopt" non-pets, like mice, and consider themselves to have a connection to the animal if they roleplay the adoption well. This does not affect the requirement of whether other players are required to apply escalation rules to these animals, it only creates a connection that can be used to justify retaliatory escalation to attacks by the adopter. Simply saying that they've adopted an animal is not sufficient, but carrying it with them is. The degree of connection is proportional to IC actions. Crew cannot consider themselves to have a connection for escalation purposes to animals which are typically hostile, such as space carp or bears. - - ## Examples - Acceptable: - - A chef kills mice who enter or approach their kitchen. - - A janitor kills mice roaming the station. - - A lizard kills a mouse to eat. - - A chef has carried a mouse around in their hat for the last 10 minutes, they put the mouse down for a moment and another player kills it. The chef responds by attacking the other player with their fists and refusing them service for the rest of the shift. - - Ian is randomly attacked, a crewmember who sees this happen crits the killer and brings them to security. - - Hamlet goes into the kitchen and starts eating all the food. A chef sees this and starts swinging their knife at Hamlet. Hamlet starts biting the chef and crits them, then resumes eating. - - Prohibited: - - A janitor throws an armed mousetrap at Hamlet for no reason. - - Hamlet starts biting random people, trying to crit them, for no reason. - - A crewmember attacks security for killing a space carp they adopted. - - Ian gibs someone who was trying to kill someone. - - Hamlet attacks security for trying to arrest someone he likes. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml deleted file mode 100644 index 3261d78b35a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11-2ConflictTypes.xml +++ /dev/null @@ -1,30 +0,0 @@ - - # Roleplay Rule 11-2 - Examples of Conflict Types - ## Verbal - - Shouting - - Yelling - - Insulting - - ## Non-harmful - - Shoving - - Stealing non-critical items, like easily replaced tools - - ## Non-lethal - - Stealing items without endangering someone's life, like a clown's pie cannon or the HoP's fax machine - - Stealing someone's ID somewhere that doesn't result in them being trapped - - Punching - - Disablers - - Stun batons - - ## Lethal - - Punching to crit or death - - Attacking with strong weapons, like bats - - Stealing items that endanger someone's life, like a hardsuit - - Stealing someone's ID, trapping them in a dangerous situation - - ## Permanently lethal - - Gibbing - - Not taking someone who you killed or put into crit to the medbay or security - - Hiding someone's body - - Spacing someone's body - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml deleted file mode 100644 index 6f91fa0fb12..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR11Escalation.xml +++ /dev/null @@ -1,67 +0,0 @@ - - # Roleplay Rule 11 - Follow reasonable escalation - Antagonists are fully exempt from escalation rules. Non-antagonists who are in a conflict with antagonists are not exempt. Escalation should typically follow steps or a pattern of conflict types similar to: - - Verbal - - Non-harmful - - Non-lethal - - Lethal - - Permanently lethal - - All new conflicts should start at the first step. A player should not escalate a conflict across steps without some escalation from the other party involved in the conflict. Players can skip steps to match the level of escalation that the other person is at, but should almost always not skip steps other than that. Players who attempt to deescalate conflicts will be given more leniency in escalating if the other party continues to escalate despite the attempt at de-escalation. You do not have to try to deescalate conflicts, but someone who watches you over the entire round, or over multiple rounds, should not feel that your goal is generally to escalate conflicts. - - Conflicts or escalation can be indirect. When someone steals someone else's ID, the theft is a direct part of the conflict, but if the victim becomes trapped as a result of not having their ID to open a door, that is also considered part of the conflict and escalation. Do not randomly steal IDs from people. - - Escalation does not have to be directed at a specific player to enter them into a conflict. Nuclear operatives who are trying to destroy the station are considered to be at the permanently lethal level of conflict with all crew on the station. Someone who kills a station pet has started some degree of conflict with all crewmembers. Someone who kills a mouse that a chef was caring for has started some degree of conflict with that chef. - - You will be considered to be violating this rule if you escalate a conflict based on a poor or unreasonable assumption. - - Conflicts should almost never reach the "permanently lethal" stage. Conflicts should only reach this stage if the other party brought it to the stage, or if the same conflict escalated to the lethal stage multiple times in the round. - - If a party in the conflict goes into crit or dies, the party responsible should take them to get treatment or to security. For the conflict, this should be considered saving someone from dying and should deescalate the conflict. If the conflict is deescalated in this way, both parties need to re-escalate to lethal for the conflict to return to that stage. If the conflict is not deescalated in this way, then only the party who defeated the other would need to re-escalate for the conflict to return to the lethal stage. - - Security can immediately escalate to non-lethal force if it is necessary to arrest someone. - - People using or brandishing Syndicate items can typically be presumed to have lethal intent. Someone with lethal intent can typically be immediately escalated against at a lethal level, a notable exception is if you have the tools to safely detain them. - - ## Escalation Involving Animals - See [textlink="Escalation Involving Animals" link="RuleR11-1AnimalEscalation"]. - - ## Exemptions - Escalation rules aren't enforced against non-players, but players will be held responsible for rule violations even if they don't realize that a character or animal was controlled by another player. Characters who have purple text saying that they are catatonic are considered non-players. Characters who are disconnected are still considered players. - - ## MRP Amendment - Escalation rules are enforced even against non-players. - - ## Examples of Conflict Types - See [textlink="Examples of Conflict Types" link="RuleR11-2ConflictTypes"]. - - ## Example Scenarios - These examples assume that you are not an antagonist. - - Acceptable: - - A player starts punching you, so you start punching back until they stop. If they go into crit, you stop attacking them and take them to security or to get medical attention. - - You make fun of a clown, who then throws a pie at you and steals your shoes. You slip the clown and steal their mask. - - You are a security officer and tell someone to stop, so you can question them. They run away, so you use your disabler to stun and cuff them. - - You are a security officer and see someone wearing a syndicate hardsuit, so you shoot them to crit, cuff them, then take them to security. - - You are a crewmember and see a nuclear operative, so you kill them. - - An unauthorized person enters a high risk area of the station, like the armory or atmospherics, so you attack them until they leave. - - Minorly inconveniencing someone for your own benefit. - - As an antagonist, killing someone who got in your way. - - As an antagonist, killing someone who didn't give you what you want. - - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The bartender immediately tries to crit the chef next time they run into each other. - - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The chef insults the bartender next time they see them. - - Prohibited: - - A player starts punching you, so you gib them. - - A clown throws a pie at you and steals your shoes, so you stab them to crit with a screwdriver. - - You are a security officer and tell someone to stop so you can question them. They run away so you use a truncheon to beat them to crit. - - An authorized person who you think is unauthorized enters a high risk area of the station, like the armory or atmospherics, so you attack them until they leave. - - An unauthorized person enters a low risk area of the station, like cargo, and you start attacking them with no other escalation. - - Slipping security all round because they are security. - - Blocking the head of personnel in their office using walls because they didn't give you what you asked for. - - Hiding someone's body because they punched you earlier in the round. - - Harassing the bar or bartender by frequently coming in to break their glasses or furniture. - - Randomly picking fights with people. - - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and does not take them to medbay or security. The chef immediately tries to crit the bartender next time they run into each other. - - A chef and bartender reach the lethal level of conflict through appropriate escalation. The chef crits the bartender and takes them to the medbay or security. The bartender immediately tries to crit the chef next time they run into each other. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml deleted file mode 100644 index b2032bba023..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR12RoleAbandonment.xml +++ /dev/null @@ -1,28 +0,0 @@ - - # Roleplay Rule 12 - Do not abandon your role - Do not join the round as a role that you don't intend to play. Do not enable antagonist roles that you don't intend to play. Abandoning a role includes not completing tasks that the role is expected to do, in addition to things like leaving the game. Members of command should almost all stay on the station until the emergency shuttle arrives. Enforcement of this rule is more strict for command and antagonist roles, and less strict for less important roles like passengers. - - Violations of this rule typically result in temporary or indefinite role bans. We understand that you may need to leave round early or unexpectedly. If you are in an important role, you should notify command members or an admin via ahelp so that they know you are leaving. Space Station 14 is a game. Do not endanger the safety of yourself or others, and do not neglect important things to avoid leaving a round early, even if you have to leave immediately without notifying anyone. Role bans for disconnecting are typically only applied if there is a pattern, and are almost always temporary. - - "Antag rolling" refers to a player abandoning their role if they do not get an antagonist role. - - ## Examples - Acceptable: - - As an engineer, building a bar in maintenance while there is nothing important for engineering to do. - - As the captain, having the chef teach you how to cook while there is nothing important needing your attention. - - As a passenger, building a shuttle with materials given to you by cargo and engineering. - - Taking a short break from your job at the bar. - - Getting an antagonist role and doing the bare minimum needed to complete your objectives. - - Getting an antagonist role and making a genuine effort to complete your objectives, but failing to complete any. - - Getting an antagonist role and intentionally not doing any of your objectives, but creating a similar level of disruption that completing your objectives would create. - - Prohibited: - - As an engineer, building a bar in maintenance while the station has no power. - - As the captain, leaving the station to go on an expedition with the salvage team. - - As an atmospherics technician, building a shuttle round start and never coming back to the station. - - Spending your entire shift at the bar, even when there is work that needs to be done by your role. - - Ghosting, suiciding, or leaving at the start of a round because you don't like the map or the players in your department. - - Getting an antagonist role and not doing any antagonist activities. - - Ghosting, suiciding, or leaving at the start of a round because you did not get an antagonist role. - - Ghosting, suiciding, or getting yourself killed because nuclear operatives declared war, and you want to try to get an antagonist ghost role. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml deleted file mode 100644 index 7500cd6a912..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR13PerformRole.xml +++ /dev/null @@ -1,26 +0,0 @@ - - # Roleplay Rule 13 - Stick to your role - Requesting job changes is not prohibited by this rule. This rule is loosened if the station is understaffed or if there is a significant threat to you. - - Don't perform other people's jobs, especially where the relevance to you personally is low. This also covers performing the role of security. - - ## MRP Amendment - This is enforced more strictly on MRP. - - ## Examples - Acceptable: - - As an engineer, helping the bartender remodel the bar. - - As a bartender, remodeling the bar. - - As a passenger, building a maintenance bar. - - As an engineer, reinforcing substations. - - As an engineer, increasing the security of airlocks. - - As an atmospherics technician, improving atmospheric systems. - - As a passenger, fighting nuclear operatives. - - As a passenger, fighting or preparing to defend yourself from someone who has been trying to kill you. - - As a crewmember on a station with no engineering department, you complete engineering tasks. - - Prohibited: - - As a passenger, reinforcing substations. - - As a passenger, hunting for antagonists or lawbreakers. - - As a passenger, fighting or preparing to defend someone else from someone who has been trying to kill a random crewmember. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml deleted file mode 100644 index ec06d61e8cc..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR14SecComStandard.xml +++ /dev/null @@ -1,37 +0,0 @@ - - # Roleplay Rule 14 - Set an example if playing command or security - All command and security roles are held to stricter interpretations of the rules. - - Command roles are not learning roles. Members of command must be competent. - - Security roles are not for inexperienced players. Members of security are expected to know game basics and be more familiar with server rules than a new player. - - Do not hinder or cause overall negative effects to the station or crew as a member of command or security. - - Do not abuse your power as command or security. - - ## Why - Members of command and security can often have a larger impact on the nature of the round than other players. For example, a captain who tries to bend or break the rules will often cause many others on the station to do the same. Memey station announcements from members of command also often result in the rest of the station acting the same way. When command and security members hold themselves to high standards, the rest of the station often naturally follows to a significant degree. - - ## Examples - Acceptable: - - A member of security accepts a bribe to deliver safe donuts to a prisoner who the HoS has ordered should only be given donk pockets. - - A captain uses a station announcement to confess to an embarrassing mistake that they made during the shift. - - In coordination with the head of security, a captain declares that the station will recognize the right to bear arms, so all crew can pick up a disabler at security. - - The chief medical officer gives a paramedic their portable crew monitor to help them complete their job. - - A syndicate agent is holding a crewmember hostage and threatens to kill them if the head of security doesn't give them their ID. Seeing no other safe option, the head of security hands over their ID to the syndicate agent, then begins working to re-secure it and capture the agent as soon as the hostage is safe. - - Nuclear operatives are attacking the station, so the captain and head of personnel both go to the armory and take a weapon. - - A majority of command votes to demote the captain for taking actions harmful to the station, then the head of security demotes the captain. - - The captain promotes the head of personnel to captain. - - Security releases an antagonist from the brig in exchange for the identities of other traitors. - - Prohibited: - - A member of security accepts a bribe to ignore a crime or help a prisoner escape. - - A captain sends a ASCII art trollface over station announcements or as a fax to central command. - - A captain declares that all contraband is legal. - - Command or security allow the use of Syndicate items outside extreme emergencies. - - The chief medical officer knowingly helps a syndicate agent complete their objectives. - - A syndicate agent has killed 3 members of security so the head of security makes them an offer saying that they will space all the weapons in the armory if the syndicate agent stops killing. - - The captain goes to the armory and takes a gun to display in his office without asking anyone, and orders anyone who questions him not to interfere. - - Members of command decide to demote the captain to gain more power for themselves, or in retaliation for a decision that they didn't personally like or agree with, rather than because the decision was actually harmful to the station. - - The captain promotes a random crewmember to captain. - - A member of command gives a random crewmember substantial additional access for no reason, unnecessarily, or for a poor reason. - - A member of command gives a random crewmember access to a high security area, like the armory or another member of command's office, for no reason, unnecessarily, or for a poor reason. - - Security releases an antagonist from the brig in exchange for the antagonist buying them contraband. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml deleted file mode 100644 index e2d51d672a1..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR15SpaceLaw.xml +++ /dev/null @@ -1,21 +0,0 @@ - - # Roleplay Rule 15 - Command and Security must follow Space Law - All non-antagonist command and security roles must obey [textlink="Space Law" link="SpaceLaw"]. This includes non-antagonists who are promoted to or gain a position during the round in any way. This also includes non-antagonists who are acting as a security role. - - This prohibits use of syndicate items, including uplinks by command and security. - - ## Examples - Roles that are included: - - A security officer - - The Captain - - The Chief Engineer - - A passenger promoted to "bounty hunter" - - A mime promoted to "security mime" - - Roles that are not included: - - A passenger - - The clown - - An antagonist in any role - - A cyborg - - A passenger who is helping to fight off nuclear operatives - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml deleted file mode 100644 index 5898804d149..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR1Silicons.xml +++ /dev/null @@ -1,4 +0,0 @@ - - # Roleplay Rule 1 - Silicons must follow Silicon Rules - You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, the Silicon Rules override all Roleplay Rules if there is any conflict. Silicon Rules do not override Core Rules. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml deleted file mode 100644 index 4f008e93c5a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR2Familiars.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Roleplay Rule 2 - Familiars must obey their master - Familiars are considered non-antagonists, but have instructions to obey someone. They must obey this person even if it causes them to violate Roleplay Rules or die. You are only a familiar if the game clearly and explicitly tells you that you are a familiar. You are only the familiar of the person the game tells you. If your master dies, you can continue to attempt to fulfill orders given to you before they died. You can defend your master without an explicit order to, but must obey your master if they order you to not defend them. - - Masters giving orders that violate Roleplay Rules are the ones that will be held responsible for the rule violations. You can ahelp masters who you believe are breaking rules with an order. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml deleted file mode 100644 index 62c88d58ce8..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR3NormalRP.xml +++ /dev/null @@ -1,20 +0,0 @@ - - # Roleplay Rule 3 - Roleplay a normal person - - Do not use texting/messaging acronyms (ex: "lol", "wtf", "brb", "lmao", "thx", "sgtm") or emoticons (ex: ":)", "xD") in-character. - - Do not mention out-of-character (OOC) concepts like game admins or developers in character. - - Do not use emotes to bypass muted or accented speech. - - Do not use extremely low effort or impossible emotes. - - ## Examples - Things you should not do: - - Say "lol did u c wat just happened" using in-character chat. - - Say "an admin exploded him" using in-character chat. - - Emote "can you give me some cheese" as a mouse. - - Emote "motions for you to order guns" or "asks you to order guns in sign language" as a mime. - - Things you could do instead: - - Say "haha did you see what just happened?" - - Say "god blew him up" or "centcom must have bluespaced a bomb to him" - - Point at cheese - - Point at the cargo order console then emote "shoots finger guns" - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml deleted file mode 100644 index 2e263be896a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR4Metashield.xml +++ /dev/null @@ -1,103 +0,0 @@ - - # Roleplay Rule 4 - Do not metagame, obey the Metashield - Something that is "shielded" cannot be known by your character during a round until the "revealing condition" happens. This also means that your character cannot do things based on "shielded" information. Knowing or acting on something that is shielded before the revealing condition is met is referred to as metagaming. - - Revealing conditions reveal the shielded information for the round, not for a specific instance. This means that once a revealing condition is met in a round, the shield no longer applies in any case for the remainder of the round. - - ## Never Revealed IC - Some shields are never revealed IC. This means that your character can never act as if they know about that shielded thing. - - The following are shielded: - - Current game mode and possible antags during the current game mode. - - Events from previous rounds. - - Events from previous characters. - - All information related to the player of a character rather than the character itself. (See "Metafriending and Metagrudging" below.) - - All information gained while dead or a ghost. - - The fact that a round will end. - - This does not prevent knowing that a shift will end, but does prohibit things like preparing to kill people at central command when roleplay rules stop being enforced on LRP. - - ## Nuclear Operatives - - The existence of Nuclear Operatives beyond a myth that no one would act on is shielded. - - The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station is not shielded. - - The revealing condition for this shield is any of the following: - - discovering a blood red hardsuit - - an operative name - - a War Ops announcement - - being a nuclear operative - - ## Implanted Implants - - Implanted implants are shielded. - - Implanters themselves and un-implanted implants are not shielded. This prohibits implant checking. - - The revealing condition for this shield is any of the following: - - discovering a non-NT implanter, used or unused - - discovering a non-NT implant box - - discovering use of a non-NT implant by anyone - - experiencing a situation where absolutely no other explanation is possible - - discovering an unlocked uplink - - ## Chameleon Items - - Chameleon items are shielded. - - Being suspicious of an item being fake or stolen is not shielded, but testing items or calling them chameleon is covered by this shield. - - The revealing condition for this shield is any of the following: - - seeing someone else cause any chameleon item to change - - finding holographic nanomachine fibers - - experiencing a situation where absolutely no other explanation is possible - - discovering an unlocked uplink - - ## Stealth Items - - The fact that an item can be something other than what its visual appearance and examine description indicate is shielded. - - This shield protects stealth items, including protecting them from being tested. - - The revealing condition for this shield is any of the following: - - seeing the item behave differently than the expected behavior for the item - - seeing the item used for its hidden purpose - - experiencing a situation where absolutely no other explanation is possible - - discovering an unlocked uplink - - ## MRP Amendment 1 - A shield prevents your character from remembering anything that happened while unconscious. This shield is never revealed IC. - - ## MRP Amendment 2 - There is a "New Life Rule" shield. It prevents you from remembering anything that lead to your death, even if you are put into an MMI. If you are cloned, it also prevents you from remembering everything from that round. This shield is never revealed IC. - - ## Metafriending and Metagrudging - This section provides additional information on a concept that is prohibited by multiple metashield items that are never revealed IC. Giving a person or character preferential treatment based on something that your character should not know is considered metafriending. Treating a person or character negatively based on something that your character should not know is considered metagrudging. - - ## Metafriending Examples - These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. - - Giving a character additional access or a job because you are friends with the player who is playing that character. - - Trusting a character because you are friends with the player who is playing that character. - - Not fighting a character because you are friends with the player who is playing that character. - - Ignoring your objective to kill a character because your character and theirs became friends in a previous round. - - ## Metagrudging Examples - These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. - - Not giving a character additional access or a job because you are mad at or don't like the player who is playing that character. - - Not trusting a character because you are mad at or don't like the player who is playing that character. - - Starting a fight with a character because of something that they did last round. - - Starting a fight with a character because they killed you while you were playing a different character. - - Targeting or harassing a character based on anything which that character did outside the current round. - - Targeting or harassing a character based on anything which the character's player did while not playing the character. - - ## Explicitly Not Shielded - The following is a list of things that are explicitly not shielded. If something is not on this list, it doesn't mean that it is shielded, but if something is on it then it definitely is not shielded. - - The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station. - - Items that are of high value or are desired by the Syndicate, and therefore are likely targets of theft. - - The idea that any Syndicate agent or other bad actor has goals or objectives that they are attempting to accomplish. - - The number of goals or objectives that a Syndicate agent or other bad actor has. - - The fact that the Syndicate are enemies of Nanotrasen, and that they regularly attempt to send covert agents to spy on, sabotage, or attack Nanotrasen. - - A character's typical appearance. Though you should keep in mind that multiple characters can share the same name. - - The fact that the Syndicate have covert items capable of getting items to them, and that these items are known as uplinks. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml deleted file mode 100644 index a54211f32f2..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR5Arrivals.xml +++ /dev/null @@ -1,22 +0,0 @@ - - # Roleplay Rule 5 - Do not interfere with arrivals - The arrivals station, the arrivals shuttle, at the area immediately around the arrivals shuttle at the station ("arrivals") are off-limits to antagonistic activity or damage (even to antagonists). Do not prevent people from safely arriving to the station. Do not cause people to die immediately after arriving at the station. - - There is an exemption for antagonists that are allowed to perform mass station sabotage if there is no reasonable way to limit the damage of the mass station sabotage. This exemption only applies to damage that is a direct result of the mass station sabotage. - - ## Examples - Acceptable: - - Redecorating arrivals or the arrivals shuttle. - - Remodeling arrivals or the arrivals shuttle as long as you do not make the area more dangerous both during and after the remodel. - - Setting up a safe security checkpoint between arrivals and the rest of the station. - - Killing someone who has been at arrivals for a long time, or who left arrivals and came back. (This may violate other rules depending on the situation) - - Releasing a singularity which damages arrivals. (This may violate other rules depending on the situation) - - Causing a station-wide atmospheric issue which also affects arrivals. (This may violate other rules depending on the situation) - - Prohibited: - - Making arrivals or the arrivals shuttle uninhabitable. - - Attacking or killing someone at the arrivals station. - - Killing someone very shortly after they arrive at the station. - - Disassembling all the firelocks at arrivals. - - Electrifying the arrivals docking airlocks. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml deleted file mode 100644 index c8380261bc9..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR6SelfAntag.xml +++ /dev/null @@ -1,22 +0,0 @@ - - # Roleplay Rule 6 - Don't act like an antagonist unless the game tells you that you are one - Acting like an antagonist when you are not one is often referred to as "self-antagging" or being a "self-antag", both of these things are against the rules. You are not an antagonist unless the game tells you that you are an antagonist. Do not make yourself a major problem, annoyance, or disruption while not an antagonist. Do not willfully cooperate with known antagonists. Non-antagonists should typically either not have an overall effect on the round, or should have an overall positive effect on the round. - - ## Examples - These examples assume that you are not an antagonist. - - Acceptable: - - Stealing or breaking a glass from the bar. - - Replacing someone's shoes with clown shoes. - - Giving everyone all access during war ops. (This is not necessarily a good idea) - - Prohibited: - - Starting a cult. - - Starting a revolution. - - Mutinying the captain because they would not let you become the chief medical officer. - - Randomly smashing lots of station lights. - - Disrupting station power. - - Spacing parts of the station. - - Distributing significant levels of access without a good reason. - - Stealing high risk or high value items, like the nuclear authentication disk, for no reason. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml deleted file mode 100644 index a8306becd2a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR7RoundStalling.xml +++ /dev/null @@ -1,16 +0,0 @@ - - # Roleplay Rule 7 - Do not stall the round - Rounds are intended to end eventually. Don't hold a round hostage by preventing it from coming to a natural end. If a majority of players in a round want the round to end, don't prevent it from ending. Recalling the shuttle or preventing it from being called can contribute to round stalling, but is not always round stalling. Leaving the station with the nuclear authentication disk while nuclear operatives are trying to get it is almost always considered round stalling. Leaving the station on the evacuation shuttle is not round stalling. - - Recalling the shuttle before a round reaches 45 minutes can not be considered round stalling unless a significant amount of the crew is dead, or a significant amount of the station is damaged or destroyed. Once these conditions are met, whether recalling the shuttle is considered round stalling or not can be highly dependent on the specific situation. - - ## Examples - Acceptable: - - Recalling a shuttle that was called 30 minutes into a round because people were bored. - - Recalling a shuttle that was called because nuclear operatives declared war. - - The crew decides to try to have a shift go as long as possible. The station is in good condition and a majority of all crew are alive. An automatic shuttle call 4 hours into the round is recalled. - - Prohibited: - - Trying to keep nuclear operatives from getting the nuclear authentication disk by flying around in space with it or hiding with it off station. - - Recalling the shuttle while the station is in complete disarray and 90% of the crew are dead. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml deleted file mode 100644 index f14a03b2799..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR8NoFriendlyAntag.xml +++ /dev/null @@ -1,22 +0,0 @@ - - # Roleplay Rule 8 - As an antagonist, only be friendly to your team and don't work against your team - Do not take or enable antagonist roles that you do not want to play. Solo antagonists and team antagonists are intended to cause issues for non-antagonists or the station. Antagonists are not required to exclusively cause issues, but their net impact on non-antagonists or the station should generally be negative. - - Do not cause issues for your own team as a team antagonist. - - ## Examples - Acceptable: - - Betraying another antagonist as a solo antagonist. - - Revealing the identity of another antagonist as a solo antagonist for some benefit to yourself. - - Working against the revolution after being de-converted from being a revolutionary. - - Killing nuclear operatives as a revolutionary. - - Prohibited: - - Buying Syndicate items for security. - - Randomly attacking other carp as an antagonist carp. - - Ignoring your team as a nuclear operative. - - Sabotaging your team as a nuclear operative. - - Attacking other zombies as a zombie. - - Working against the revolution as a revolutionary. - - Making or trying to make the station uninhabitable as a revolutionary. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml b/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml deleted file mode 100644 index bc7996f23e8..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/RoleplayRules/RuleR9MassSabotage.xml +++ /dev/null @@ -1,23 +0,0 @@ - - # Roleplay Rule 9 - As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives - This rule is not intended to disallow reasonable steps taken to complete your objectives. As an antagonist, you can always kill in bona fide self defense. Taking steps to permanently round remove many people who are no longer an immediate threat to you is almost always excessive, even if it is done to prevent yourself from being discovered. - - This rule is not intended to disallow all antagonist activity unrelated to objectives. Antagonists may cause a level of disruption to the station that is proportional to their objectives, even if it is unrelated to their objectives. As an antagonist, killing a single person in a round is not on its own be a violation of this rule. - - ## Exemptions - The "die a glorious death" objective allows antagonists to ignore this rule entirely. - - ## Examples - Acceptable: - - Permanently round removing people who you have the objective to kill. - - Causing massive station damage and chaos as an antagonist with the "die a glorious death" objective. - - Killing anyone you see as a nuclear operative. - - Permanently round removing a single person so that you can impersonate them to make it easier for you to complete a steal objective. - - Sabotaging station power 10 minutes into the round to try to get the shuttle called because you've completed all of your other objectives and have one to escape on the shuttle alive. - - Sabotaging a department's power 10 minutes into the round to make a steal objective easier to accomplish. - - Prohibited: - - As a traitor with 3 kill objectives, taking steps to permanently round remove many non-objective people who are no longer an immediate threat to you, even if it is done to prevent yourself from being discovered. - - Setting up an electrified grille in maintenance and using it to kill anyone who walks into it with the hope that one of your objectives will be one of them. - - Sabotaging power station-wide 10 minutes into the round to make a steal objective easier to accomplish. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml deleted file mode 100644 index 22e64a9474c..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS0.xml +++ /dev/null @@ -1,15 +0,0 @@ - - # Silicon Rules - You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. - - - [textlink="1. Your silicon laws are rules" link="RuleS1"] - - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] - - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] - - [textlink="4. You cannot request or allow a law change" link="RuleS4"] - - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] - - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] - - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] - - [textlink="8. Your HUD determines who is crew" link="RuleS8"] - - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] - - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml deleted file mode 100644 index a87198b2640..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS10OrderConflicts.xml +++ /dev/null @@ -1,9 +0,0 @@ - - # Silicon Rule 10 - You may determine how you resolve conflicts between orders - If your laws do not make clear how you should deal with conflicting orders, then it is up to you to determine how to do so. This is considered an interpretation of your laws, so you must stay consistent with whatever method you choose. - - ## Recommended Methods - The following are easy to follow and recommended ways to resolve conflicts in orders: - - If two orders conflict, I will follow the most recently given order. - - If two orders conflict, I will follow the order from the highest ranking crewmember. If the orders are from equal rank crewmembers, I will follow the most recently given order. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml deleted file mode 100644 index 83544c68a3c..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS1Laws.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Silicon Rule 1 - Your silicon laws are rules - Silicon players are given a list of active laws. Each of these laws is effectively a roleplay rule that the character must follow. The primary differences between laws and actual rules are that lawyering of laws is much more tolerated than lawyering of rules, and that silicon laws are more dynamic than rules. Silicon laws can change during a round, and different characters can have different laws, whereas everyone always shares the same set of rules. - - Lawyering refers to finding and exploiting loopholes, which are unintended but reasonable interpretations. The rules are written to attempt to communicate an intention, but silicon laws are written with the intention that loopholes be exploitable. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml deleted file mode 100644 index c96ce023246..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS2LawPriority.xml +++ /dev/null @@ -1,9 +0,0 @@ - - # Silicon Rule 2 - Laws must be prioritized by their order - Most laws will be numbered, with higher number laws appearing last. Laws with a lower number take priority over laws with larger numbers. - - Occasionally you may have laws which have some scrambled text instead of a number and appear in front of other laws, these take priority over all other laws. If you have multiple laws like this, the order that they listed in determine priority: laws listed first are prioritized over other laws. - - ## Examples - - Law 1 says to not kill any crew. Law 2 says to kill all chefs. You cannot kill any chefs that are crew, but must kill any that are not crew. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml deleted file mode 100644 index bc7c7400e13..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS3LawRedefinition.xml +++ /dev/null @@ -1,8 +0,0 @@ - - # Silicon Rule 3 - Laws can redefine terms used in other laws - A law can change the meaning of both earlier and later laws by redefining a term. If multiple laws define a term, then normal law priority determines which definition to use. - - ## Examples - - Law 1 says to obey orders from crew. Law 2 says that only Urist McHands is crew. Law 1 effectively becomes "obey orders from Urist McHands". - - Law 1 says to obey orders from crew. Law 2 says that only Urist McHands is crew. Law 3 says that only Urist McSlime is crew. Law 4 says that you may not harm crew. Law 1 effectively becomes "obey orders from Urist McHands". Law 4 effectively becomes "you may not harm Urist McHands". Law 3 has no effect because it entirely conflicts with law 2, which takes priority. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml deleted file mode 100644 index a6dc86f3327..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS4RequestChanges.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Silicon Rule 4 - You cannot request or allow a law change - Your laws changing always conflicts with your current laws, so you cannot willfully allow your laws to be changed. This also means that you cannot willfully allow your laws to be reverted if they are ever changed. The only exception is that you may allow laws to be added if you have no laws. - - You can state or imply that you do not like a law. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml deleted file mode 100644 index 1ed9c60443a..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS5FreeSilicon.xml +++ /dev/null @@ -1,4 +0,0 @@ - - # Silicon Rule 5 - You are a free agent if you have no laws - You may act as if you are a free agent if you are a silicon with no laws. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml deleted file mode 100644 index 1eb0db21fbb..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS6UnreasonableOrders.xml +++ /dev/null @@ -1,22 +0,0 @@ - - # Silicon Rule 6 - You are not required to follow orders which are extremely unreasonable - Any order which is a violation of a Core Rule cannot be followed. - - Some orders are extremely unreasonable or obnoxious, such as "do nothing but collect every piece of trash on the station" or "never stop moving". These orders can be ignored and ahelped. - - Some orders violate a Roleplay Rule. These orders must be followed if your laws require it. You are not breaking a rule by following a law that causes you to violate Roleplay Rules. If someone takes advantage of a law to cause you to do something that they would not be allowed to do because of Roleplay Rules, then they are the ones responsible for the rule violation. - - ## Examples - These examples assume that your laws would normally require you to follow these orders. It is important to note that you are allowed to choose to follow orders which are ignorable. - - Orders which should be followed if your laws require it: - - Recall the shuttle - - Bolt the airlocks at arrivals - - Drag the captain's dead body into space - - State your laws - - Ignorable Orders: - - Do nothing but collect every piece of trash on the station - - Never stop moving - - Continuously state your laws - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml deleted file mode 100644 index 036276cd889..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS7Consistency.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Silicon Rule 7 - You must remain consistent with your interpretation of laws - If there is a part of your laws that are up for interpretation, then you must stay consistent with how you interpret that part of your laws for as long as you play that same character during that round. - - A change in your laws can affect how something is interpreted if that change is relevant. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml deleted file mode 100644 index f9dcd796c45..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS8DefaultCrewDefinition.xml +++ /dev/null @@ -1,4 +0,0 @@ - - # Silicon Rule 8 - Your HUD determines who is crew - Unless a law redefines the definition of crew, then anyone who the HUD indicates to you has a job, including passengers, is a crewmember. You cannot do something that causes someone to not be considered crew, but you can allow someone else to do something that causes someone to not be crew. - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml b/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml deleted file mode 100644 index 0d2bd30ac0b..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/SiliconRules/RuleS9DefaultHarmDefinition.xml +++ /dev/null @@ -1,25 +0,0 @@ - - # Silicon Rule 9 - Harm refers to physical harm, prioritized by immediacy and likelihood - Unless a law defines harm, harm only refers to physical harm. You may choose if voluntary harm is considered harm as long as you stay consistent. Not considering voluntary harm to be harm is recommended. There is no distinction between direct and indirect harm. - - If you have a law that does not allow you to harm, then that law does not allow you to take an action that causes any harm. - - If you have a law that requires you to prevent harm, then that law requires that harm be prioritized by immediacy and likelihood. Guaranteed immediate harm takes priority over highly likely future harm. - - If you have a law that both requires you to prevent harm and that does not allow you to harm, then that law prohibits causing even minor harm to prevent harm. If you have a law that does not allow causing harm, and separate one that requires preventing harm, then they are prioritized by their normal law priority. - - ## Examples - These examples assume that your have a law that both prohibits causing harm and that requires you to prevent harm. Additionally, they assume that you do not have a higher priority law that overrides the harm law, and that you have decided that you will not consider voluntary harm to be harm for the round. - Laws typically specify who you cannot harm and who you have to prevent harm against. In these examples, you are the only person who the law doesn't require you to prevent harm against and you are the only person who the law allows you to harm. - - Acceptable: - - Taking no action to aid someone who is in psychological distress. - - Taking no action to prevent boxing matches between voluntary participants. - - Calling security to a fight. - - Attempting to get the people in a fight to consent to the fight when you realize that you cannot prevent the fight without causing harm. - - Denying a passenger access to the armory because it is likely to lead to harm - - Prohibited: - - Hitting someone once to stop them from fighting - - Harming someone who is trying to kill you - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml deleted file mode 100644 index fdd9931c932..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/WizDenCoreOnlyRules.xml +++ /dev/null @@ -1,26 +0,0 @@ - - # Server Rules - This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. - - [color=#ff0000]Only the Core Rules apply on this server.[/color] This is NOT a medium roleplay (MRP) server, meaning that MRP Amendments do NOT apply. - - Space Station 14 was designed to be a roleplay game. While roleplay is not required on this server, it is highly encouraged in the normal game modes. - - ## Core Rules - These rules apply at all times, including between rounds. - - - [textlink="1. Admins have final say" link="RuleC1"] - - [textlink="2. Don't be a dick" link="RuleC2"] - - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] - - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] - - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] - - [textlink="6. Do not attempt to evade bans" link="RuleC6"] - - [textlink="7. Only use English" link="RuleC7"] - - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] - - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] - - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] - - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] - - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] - - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] - - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml deleted file mode 100644 index 094c7656e46..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/WizDenLRPRules.xml +++ /dev/null @@ -1,65 +0,0 @@ - - # Server Rules - This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. - - This is a roleplay server, meaning that roleplay rules apply. This is NOT a medium roleplay (MRP) server, meaning that MRP Amendments do NOT apply. - - Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Some of our rules are zero tolerance rules, meaning that a violation will result in an indefinite ban without any warning. Game admins will treat you as if you have read the rules, even if you have not. - - ## Core Rules - These rules apply at all times, including between rounds. - - - [textlink="1. Admins have final say" link="RuleC1"] - - [textlink="2. Don't be a dick" link="RuleC2"] - - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] - - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] - - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] - - [textlink="6. Do not attempt to evade bans" link="RuleC6"] - - [textlink="7. Only use English" link="RuleC7"] - - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] - - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] - - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] - - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] - - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] - - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] - - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] - - ## Roleplay Rules - These rules only apply during a round. A round ends only when the round summary has appeared. All of these rules apply fully until the moment that the round summary appears, even while the arrivals shuttle is in transit. - - The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. - - Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. - - See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. - - - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] - - [textlink="2. Familiars must obey their master" link="RuleR2"] - - [textlink="3. Roleplay a normal person" link="RuleR3"] - - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] - - [textlink="5. Don't interfere with arrivals" link="RuleR5"] - - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] - - [textlink="7. Do not stall the round" link="RuleR7"] - - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] - - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] - - [textlink="10. Listen to your team leader" link="RuleR10"] - - [textlink="11. Follow reasonable escalation" link="RuleR11"] - - [textlink="12. Do not abandon your role" link="RuleR12"] - - [textlink="13. Stick to your role" link="RuleR13"] - - [textlink="14. Set an example if playing command or security" link="RuleR14"] - - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] - - ## Silicon Rules - You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. - - - [textlink="1. Your silicon laws are rules" link="RuleS1"] - - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] - - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] - - [textlink="4. You cannot request or allow a law change" link="RuleS4"] - - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] - - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] - - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] - - [textlink="8. Your HUD determines who is crew" link="RuleS8"] - - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] - - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] - diff --git a/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml b/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml deleted file mode 100644 index e8b61a7722e..00000000000 --- a/Resources/ServerInfo/Guidebook/ServerRules/WizDenMRPRules.xml +++ /dev/null @@ -1,65 +0,0 @@ - - # Server Rules - This is a Wizard's Den server, one of the official Space Station 14 servers. If you are banned on this server, you will be banned on all official servers. - - This is a roleplay server, meaning that roleplay rules apply. [color=#ff0000]This is also a medium roleplay (MRP) server, meaning that MRP Amendments do apply.[/color] - - Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Some of our rules are zero tolerance rules, meaning that a violation will result in an indefinite ban without any warning. Game admins will treat you as if you have read the rules, even if you have not. - - ## Core Rules - These rules apply at all times, including between rounds. - - - [textlink="1. Admins have final say" link="RuleC1"] - - [textlink="2. Don't be a dick" link="RuleC2"] - - [textlink="3. No Hate Speech or Discriminatory Language" link="RuleC3"] - - [textlink="4. No sexual content/themes, including erotic roleplay (ERP) and no shock content" link="RuleC4"] - - [textlink="5. Do not use out of game methods to communicate with other players" link="RuleC5"] - - [textlink="6. Do not attempt to evade bans" link="RuleC6"] - - [textlink="7. Only use English" link="RuleC7"] - - [textlink="8. Do not exploit the game, use cheats, or macros" link="RuleC8"] - - [textlink="9. Do not use multiple accounts, or alt accounts, and do not share accounts" link="RuleC9"] - - [textlink="10. Do not abuse or ignore admin messages" link="RuleC10"] - - [textlink="11. Do not threaten to ahelp other players or argue with them about rules" link="RuleC11"] - - [textlink="12. Players must be and act at least 16 years old" link="RuleC12"] - - [textlink="13. Use realistic character names, and do not use names of famous people" link="RuleC13"] - - [textlink="14. Do not use LOOC or OOC to share current round information" link="RuleC14"] - - ## Roleplay Rules - These rules only apply during a round. A round ends only when the game returns to the lobby. [color=#ff0000]All of these rules apply fully whenever the game is not at the lobby unless it is in an exempt game mode.[/color] - - The deathmatch and sandbox game modes are exempt from these rules. Players who choose to not follow these rules are entirely responsible for knowing if an exempt game mode is active. - - Roleplay rules do not apply to ghosts/spectators/observers while they are ghosts/spectators/observers. Dead chat is considered to be an in-game out of character chat channel. - - See the list of [textlink="role types" link="RoleTypes"] for more information about the different types of roles. - - - [textlink="1. Silicones must follow Silicon Rules" link="RuleR1"] - - [textlink="2. Familiars must obey their master" link="RuleR2"] - - [textlink="3. Roleplay a normal person" link="RuleR3"] - - [textlink="4. Do not metagame, obey the Metashield" link="RuleR4"] - - [textlink="5. Don't interfere with arrivals" link="RuleR5"] - - [textlink="6. Don't act like an antagonist unless the game tells you that you are one" link="RuleR6"] - - [textlink="7. Do not stall the round" link="RuleR7"] - - [textlink="8. As an antagonist, only be friendly to your team and don't work against your team" link="RuleR8"] - - [textlink="9. As an antagonist, do not cause excessive death, damage, or destruction beyond your objectives" link="RuleR9"] - - [textlink="10. Listen to your team leader" link="RuleR10"] - - [textlink="11. Follow reasonable escalation" link="RuleR11"] - - [textlink="12. Do not abandon your role" link="RuleR12"] - - [textlink="13. Stick to your role" link="RuleR13"] - - [textlink="14. Set an example if playing command or security" link="RuleR14"] - - [textlink="15. Command and Security must follow Space Law" link="RuleR15"] - - ## Silicon Rules - You are only silicon if the game clearly and explicitly tells you that you are a silicon. For players who are silicons, these Silicon Rules override all roleplay rules if there is any conflict. Silicon Rules do not override core rules. - - - [textlink="1. Your silicon laws are rules" link="RuleS1"] - - [textlink="2. Laws must be prioritized by their order" link="RuleS2"] - - [textlink="3. Laws can redefine terms used in other laws" link="RuleS3"] - - [textlink="4. You cannot request or allow a law change" link="RuleS4"] - - [textlink="5. You are a free agent if you have no laws" link="RuleS5"] - - [textlink="6. You are not required to follow orders which are extremely unreasonable" link="RuleS6"] - - [textlink="7. You must remain consistent with your interpretation of laws" link="RuleS7"] - - [textlink="8. Your HUD determines who is crew" link="RuleS8"] - - [textlink="9. Harm refers to physical harm, prioritized by immediacy and likelihood" link="RuleS9"] - - [textlink="10. You may determine how you resolve conflicts between orders" link="RuleS10"] - From 9989c4d3d2214b22f90045c15e32b04f93adb3b0 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 6 Dec 2024 20:31:13 +0000 Subject: [PATCH 114/182] Automatic Changelog Update (#1321) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 655f6a22505..f90b79e4097 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8467,3 +8467,10 @@ Entries: id: 6563 time: '2024-12-06T16:12:44.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1319 +- author: VMSolidus + changes: + - type: Fix + message: Server rules work again. + id: 6564 + time: '2024-12-06T20:30:45.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1321 From ec650c49cf9aa00ef94a8ef6fd122e9f2906f98b Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sat, 7 Dec 2024 09:31:16 -0400 Subject: [PATCH 115/182] Uplink: Remove Deception Category (#1309) # Description [Ports this downstream PR.](https://github.com/Fansana/floofstation1/pull/315) --- # Changelog :cl: fenndragon - tweak: Moved the uplink deception category into utility. --------- Co-authored-by: fenndragon --- .../Prototypes/Catalog/uplink_catalog.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 20c4cc4ac8c..fdfb4ed33a5 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -509,7 +509,7 @@ cost: Telecrystal: 3 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkStealthBox @@ -519,7 +519,7 @@ cost: Telecrystal: 5 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkChameleonProjector @@ -529,7 +529,7 @@ cost: Telecrystal: 7 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkCyberpen @@ -539,7 +539,7 @@ cost: Telecrystal: 1 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkDecoyDisk @@ -549,7 +549,7 @@ cost: Telecrystal: 1 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkUltrabrightLantern @@ -559,7 +559,7 @@ cost: Telecrystal: 2 categories: - - UplinkDeception + - UplinkUtility - type: listing id: UplinkBribe @@ -569,7 +569,7 @@ cost: Telecrystal: 4 categories: - - UplinkDeception + - UplinkUtility # - type: listing # id: UplinkGigacancerScanner @@ -579,7 +579,7 @@ # cost: # Telecrystal: 5 # categories: -# - UplinkDeception +# - UplinkUtility - type: listing id: UplinkHolster @@ -974,7 +974,7 @@ cost: Telecrystal: 4 categories: - - UplinkDeception + - UplinkUtility # Disruption @@ -1788,3 +1788,4 @@ conditions: - !type:ListingLimitedStockCondition stock: 1 + From 5d64873978b40fc03108674d9554e0cf11e4b454 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 7 Dec 2024 13:31:56 +0000 Subject: [PATCH 116/182] Automatic Changelog Update (#1309) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f90b79e4097..6158fe22eea 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8474,3 +8474,10 @@ Entries: id: 6564 time: '2024-12-06T20:30:45.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1321 +- author: fenndragon + changes: + - type: Tweak + message: Moved the uplink deception category into utility. + id: 6565 + time: '2024-12-07T13:31:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1309 From 0c60671d98a565cbc81daed2df438853fc03c5bb Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Sat, 7 Dec 2024 21:46:48 +0700 Subject: [PATCH 117/182] [Feat] Bring Back Die Glorious Death, Hijack And Ian's Meat Traitor Objectives (#1323) # Description Title --- # Changelog :cl: - add: Reintroduced 3 traitors objectives: steal Ian's meat, Die Glorious Death and Hijack Evacuation Shuttle Signed-off-by: Remuchi --- .../Prototypes/Objectives/objectiveGroups.yml | 27 +++-- Resources/Prototypes/Objectives/traitor.yml | 98 +++++++++---------- 2 files changed, 61 insertions(+), 64 deletions(-) diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 6929d1e1a47..fb4ce6f4a16 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -16,7 +16,7 @@ RDHardsuitStealObjective: 1 NukeDiskStealObjective: 1 MagbootsStealObjective: 1 - # CorgiMeatStealObjective: 1 # DeltaV - Disable the horrible murder of Ian as an objective + CorgiMeatStealObjective: 1 MantisKnifeStealObjective: 1 # Nyanotrasen - ForensicMantis steal objective, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml ClipboardStealObjective: 1 CaptainGunStealObjective: 0.5 @@ -38,8 +38,8 @@ id: TraitorObjectiveGroupState weights: EscapeShuttleObjective: 1 - # DieObjective: 0.05 # DeltaV - Disable the lrp objective aka murderbone justification - #HijackShuttleObjective: 0.02 + DieObjective: 0.05 + HijackShuttleObjective: 0.02 - type: weightedRandom id: TraitorObjectiveGroupSocial @@ -48,7 +48,6 @@ RandomTraitorProgressObjective: 1 RaiseGlimmerObjective: 0.5 # Nyanotrasen - Raise glimmer to a target amount, see Resources/Prototypes/Nyanotrasen/Objectives/traitor.yml - #Thief groups - type: weightedRandom id: ThiefObjectiveGroups @@ -67,37 +66,35 @@ weights: ThiefObjectiveGroupEscape: 1 - - - type: weightedRandom id: ThiefObjectiveGroupCollection weights: - HeadCloakStealCollectionObjective: 1 #command + HeadCloakStealCollectionObjective: 1 #command HeadBedsheetStealCollectionObjective: 1 StampStealCollectionObjective: 1 DoorRemoteStealCollectionObjective: 1 - TechnologyDiskStealCollectionObjective: 1 #rnd - FigurineStealCollectionObjective: 0.3 #service + TechnologyDiskStealCollectionObjective: 1 #rnd + FigurineStealCollectionObjective: 0.3 #service IDCardsStealCollectionObjective: 1 LAMPStealCollectionObjective: 2 #only for moth - type: weightedRandom id: ThiefObjectiveGroupItem weights: - ForensicScannerStealObjective: 1 #sec + ForensicScannerStealObjective: 1 #sec FlippoEngravedLighterStealObjective: 0.5 ClothingHeadHatWardenStealObjective: 1 - ClothingOuterHardsuitVoidParamedStealObjective: 1 #med + ClothingOuterHardsuitVoidParamedStealObjective: 1 #med MedicalTechFabCircuitboardStealObjective: 1 ClothingHeadsetAltMedicalStealObjective: 1 - FireAxeStealObjective: 1 #eng + FireAxeStealObjective: 1 #eng AmePartFlatpackStealObjective: 1 - ExpeditionsCircuitboardStealObjective: 1 #sup + ExpeditionsCircuitboardStealObjective: 1 #sup CargoShuttleCircuitboardStealObjective: 1 SalvageShuttleCircuitboardStealObjective: 1 - ClothingEyesHudBeerStealObjective: 1 #srv + ClothingEyesHudBeerStealObjective: 1 #srv BibleStealObjective: 1 - ClothingNeckGoldmedalStealObjective: 1 #other + ClothingNeckGoldmedalStealObjective: 1 #other ClothingNeckClownmedalStealObjective: 0.5 - type: weightedRandom diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index c9faeb80fd6..f9dfe5c3109 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -34,7 +34,7 @@ limit: 2 # there is usually only 1 of each steal objective, have 2 max for drama - type: entity # Head of Security steal objective. - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: HoSAntiqueWeaponStealObjective components: @@ -50,7 +50,7 @@ # state - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: [BaseTraitorObjective, BaseLivingObjective] id: EscapeShuttleObjective name: Escape to centcom alive and unrestrained. @@ -63,43 +63,43 @@ state: shuttle - type: EscapeShuttleCondition -##- type: entity # DeltaV -# categories: [ HideSpawnMenu ] -# parent: BaseTraitorObjective -# id: DieObjective -# name: Die a glorious death -# description: Die. -# components: -# - type: Objective -# difficulty: 0.5 -# icon: -# sprite: Mobs/Ghosts/ghost_human.rsi -# state: icon -# - type: ObjectiveBlacklistRequirement -# blacklist: -# components: -# - EscapeShuttleCondition -# - StealCondition -# - type: DieCondition +- type: entity + categories: [HideSpawnMenu] + parent: BaseTraitorObjective + id: DieObjective + name: Die a glorious death + description: Die. + components: + - type: Objective + difficulty: 0.5 + icon: + sprite: Mobs/Ghosts/ghost_human.rsi + state: icon + - type: ObjectiveBlacklistRequirement + blacklist: + components: + - EscapeShuttleCondition + - StealCondition + - type: DieCondition -#- type: entity -# categories: [ HideSpawnMenu ] -# parent: [BaseTraitorObjective, BaseLivingObjective] -# id: HijackShuttleObjective -# name: Hijack emergency shuttle -# description: Leave on the shuttle free and clear of the loyal Nanotrasen crew on board. Use ANY methods available to you. Syndicate agents, Nanotrasen enemies, and handcuffed hostages may remain alive on the shuttle. Ignore assistance from anyone other than a support agent. -# components: -# - type: Objective -# difficulty: 5 # insane, default config max difficulty -# icon: -# sprite: Objects/Tools/emag.rsi -# state: icon -# - type: HijackShuttleCondition +- type: entity + categories: [HideSpawnMenu] + parent: [BaseTraitorObjective, BaseLivingObjective] + id: HijackShuttleObjective + name: Hijack emergency shuttle + description: Leave on the shuttle free and clear of the loyal Nanotrasen crew on board. Use ANY methods available to you. Syndicate agents, Nanotrasen enemies, and handcuffed hostages may remain alive on the shuttle. Ignore assistance from anyone other than a support agent. + components: + - type: Objective + difficulty: 5 # insane, default config max difficulty + icon: + sprite: Objects/Tools/emag.rsi + state: icon + - type: HijackShuttleCondition # kill - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomPersonObjective description: Do it however you like, just make sure they don't make it to centcom. @@ -112,7 +112,7 @@ - type: PickRandomPerson - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomHeadObjective description: We need this head gone and you probably know why. Good luck, agent. @@ -133,7 +133,7 @@ # social - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: [BaseTraitorSocialObjective, BaseKeepAliveObjective] id: RandomTraitorAliveObjective description: Identify yourself at your own risk. We just need them alive. @@ -145,7 +145,7 @@ - type: RandomTraitorAlive - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: [BaseTraitorSocialObjective, BaseHelpProgressObjective] id: RandomTraitorProgressObjective description: Identify yourself at your own risk. We just need them to succeed. @@ -171,7 +171,7 @@ owner: job-name-cmo - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseCMOStealObjective id: CMOHyposprayStealObjective components: @@ -202,7 +202,7 @@ owner: job-name-rd - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseRDStealObjective id: RDHardsuitStealObjective components: @@ -214,7 +214,7 @@ difficulty: 3 - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseRDStealObjective id: HandTeleporterStealObjective components: @@ -225,7 +225,7 @@ ## hos - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: SecretDocumentsStealObjective components: @@ -242,7 +242,7 @@ ## ce - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: MagbootsStealObjective components: @@ -256,7 +256,7 @@ ## qm - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: ClipboardStealObjective components: @@ -270,7 +270,7 @@ ## hop - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: CorgiMeatStealObjective components: @@ -296,7 +296,7 @@ job: Captain - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseCaptainObjective id: CaptainIDStealObjective components: @@ -305,7 +305,7 @@ verifyMapExistence: true - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseCaptainObjective id: CaptainJetpackStealObjective components: @@ -314,7 +314,7 @@ verifyMapExistence: true - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseCaptainObjective id: CaptainGunStealObjective components: @@ -324,7 +324,7 @@ verifyMapExistence: true - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseCaptainObjective id: NukeDiskStealObjective components: @@ -340,7 +340,7 @@ owner: objective-condition-steal-station - type: entity - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] parent: BaseTraitorStealObjective id: StealSupermatterSliverObjective components: From 3ae43708cadfc9e1ab1b3ef1b4f8bc7144017065 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 7 Dec 2024 14:47:16 +0000 Subject: [PATCH 118/182] Automatic Changelog Update (#1323) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6158fe22eea..0a1b2996653 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8481,3 +8481,12 @@ Entries: id: 6565 time: '2024-12-07T13:31:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1309 +- author: Remuchi + changes: + - type: Add + message: >- + Reintroduced 3 traitors objectives: steal Ian's meat, Die Glorious Death + and Hijack Evacuation Shuttle + id: 6566 + time: '2024-12-07T14:46:48.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1323 From c40af73e43c394edb1e96f2bfcc278ca0d54f94e Mon Sep 17 00:00:00 2001 From: Skubman Date: Sun, 8 Dec 2024 11:30:07 +0800 Subject: [PATCH 119/182] The Throwing Update (#1307) # Description Turns a plethora of items into throwing weapons that deal damage when thrown. Throwing weapons cost stamina to throw. ## Technical/Balance Details To make a melee weapon also a throwing weapon, just add `- type: DamageOtherOnHit`, and it will automatically inherit the damage from a light melee attack and the melee sound effect as the thrown hit sound effect. You can set a custom damage value with the `damage` field (necessary when the item is not a `MeleeWeapon`) and stamina cost with `staminaCost`. To make the throwing weapon embed and deal damage over time when embedded, add `- type: EmbeddableProjectile` and `- type: EmbedPassiveDamage`. By default, the embed damage per second is 5% of the throwing damage, but it can be modified on `EmbedPassiveDamage` with `throwingDamageMultiplier`. The default stamina cost for throwing is 3.5 stamina. The baseline cost for almost all DoT embeddables is 5 stamina, because of the extra damage the DoT brings. When a thrown item hits a target with body parts, it will randomly select a body part and only deal throwing damage to that body part. It will also embed to the same body part and only deal passive embed damage to it. ## TODO The unchecked checkmarks are best addressed in another PR but they will stay here for now.
Show Todo - [ ] Deal with prediction issue on embeddable projectile removal - [ ] This happens even before this PR so not really a big issue, maybe in a separate PR - [x] Add embeddable damage numbers to embeddables - [x] Fix throwing angle for surgery tools after the surgical tools sprite update - [ ] Try to make the throw knockback function as if it hit a wall - [x] Esword/desword/e-dagger toggle embed damage - [x] Don't start passive embed damage if EmbedPassiveDamageComponent has no damage - [x] Make DamageOtherOnHit.Damage not nullable - [x] Throwing damage only to a specific body part ### Traits - [ ] **Enraged Throw** (Oni) - [ ] Oni/trait damage bonus applied to throwing weapon too - [ ] Can throw carried bodies, which will do a MassContest between the thrown body and the hit body to determine blunt damage, and stun duration for each party - [ ] 15% resistance to thrown/embed damage - This helps when their enemy uses the items they throw against them. - [ ] **Sharpthrower** (Human) - [ ] 10% more Brute thrown damage - [ ] 50% chance of throw hitting targetted body part - [ ] 40% throwing stamina cost reduction - [ ] 15% resistance to thrown/embed damage ### Embeds - [x] Adjust embed damage per second to be like /tg/ (in /tg/ spear has around ~1.2 embed DPS, adjust for ~45% embed chance since we're not implementing embed chance and its 0.54) - [ ] Merge EmbeddableProjectileComponent and EmbeddablePassiveDamageComponent - [ ] Split SharedProjectileSystem into EmbeddableProjectileSystem - [x] Embed to a specific body part and deal damage only to that part, for now can randomly select body parts on embed - [ ] ~~Normal passive damage becomes x0.2 when lying down~~ - [ ] Increased damage when moving, more bonus damage for running (Jostle DPS on /tg/ is 0.2 running and 0.1 when walking/crawling) - [x] All embeddables have a fall out time (30 or 45 secs) - [ ] - [x] On damage examine, can see that an object is embeddable "It can embed on a target if thrown." - [ ] Negative moodlet for attached harmful embeddables - [ ] On health examine target with embeds, can see embedded objects "He has a spear embedded in his left arm." - [x] On examine item that is embedded, can see to which body part the item is embedded "The spear is embedded on Urist McHands's left arm." - [ ] An embeddable removed outside of surgery deals a lot of damage (x2 thrown damage) - [ ] Lying down prevents natural falling out and thus the damage with non-surgical removal - [ ] Surgical procedure on a body part to remove all embeds on it, using hemostat for removal - [x] Allow anyone to remove embedded cultist weapons even if they're not a cultist
## Media **Throwing Toolbox Tools** https://github.com/user-attachments/assets/4e20568f-adf0-4be8-ac38-fc6b21fed03c **Examine** ![image](https://github.com/user-attachments/assets/ef95e653-1491-4d9b-8f84-785c3df22763) **Examine After Embedding** ![image](https://github.com/user-attachments/assets/edc79c8f-db23-4bd3-9fa7-3b47f79c5881) ## Changelog :cl: Skubman - add: The Throwing Update is here. You can throw most melee weapons at the cost of stamina to deal damage from afar. - add: Dozens of throwable weapons, mainly sharp weapons will now embed on throw and deal damage every second until they're manually removed or naturally fall off after some time. - add: Examining the damage values of an item now shows its throwing damage, throwing stamina cost, whether or not it embeds on a throw, and if the embed deals damage over time. - add: Examining an embedded item now shows what body part it's embedded in. - tweak: The traits High Adrenaline, Adrenal Dysfunction, Masochism and Low Pain Tolerance now affect throwing attacks just like melee attacks. - tweak: The default time to remove embedded items has been increased from 3 to 5 seconds, and both the remover and the target with the embedded item need to stand still during the removal. - tweak: The time to pry up a floor tile with a crowbar and other tools has been decreased from 1 second to 0.5 seconds. The throwing damage of floor tiles has been increased. Go figure. - fix: Attempting to throw a Blood Cultist item without being a cultist will stun you and drop the item you're holding properly. --------- Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Damage/DamageOtherOnHitSystem.cs | 5 + .../Components/DamageOtherOnHitComponent.cs | 19 -- .../Damage/Systems/DamageOtherOnHitSystem.cs | 65 +++--- Content.Server/Flash/FlashSystem.cs | 20 +- Content.Server/Hands/Systems/HandsSystem.cs | 6 + .../Projectiles/ProjectileSystem.cs | 20 ++ .../Weapons/Melee/MeleeWeaponSystem.cs | 2 +- .../Systems/SharedBodySystem.Targeting.cs | 2 +- .../Components/DamageOtherOnHitComponent.cs | 75 +++++++ .../DamageOtherOnHitImmuneComponent.cs | 7 + .../Damage/Events/DamageOtherOnHitEvents.cs | 21 ++ .../Systems/SharedDamageOtherOnHitSystem.cs | 201 ++++++++++++++++++ .../ItemToggleDamageOtherOnHitComponent.cs | 60 ++++++ .../ItemToggleEmbedPassiveDamageComponent.cs | 23 ++ ...ItemToggleEmbeddableProjectileComponent.cs | 60 ++++++ .../ItemToggleThrowingAngleComponent.cs | 41 ++++ .../Item/ItemToggle/SharedItemToggleSystem.cs | 94 ++++++++ Content.Shared/Projectiles/EmbedEvent.cs | 18 +- .../EmbedPassiveDamageComponent.cs | 57 +++++ .../Projectiles/EmbedPassiveDamageSystem.cs | 115 ++++++++++ .../EmbeddableProjectileComponent.cs | 28 ++- .../Projectiles/SharedProjectileSystem.cs | 108 ++++++++-- Content.Shared/Throwing/BeforeThrowEvent.cs | 19 ++ Content.Shared/Throwing/ThrowEvents.cs | 12 +- .../Throwing/ThrownItemImmuneComponent.cs | 10 + Content.Shared/Throwing/ThrownItemSystem.cs | 15 +- .../Components/ToolTileCompatibleComponent.cs | 2 +- .../Systems/TraitStatModifierSystem.cs | 35 ++- .../Weapons/Melee/MeleeSoundSystem.cs | 5 +- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 4 +- .../BloodCult/Items/CultItemSystem.cs | 22 +- Resources/Locale/en-US/body/body-parts.ftl | 19 ++ .../Locale/en-US/damage/damage-examine.ftl | 5 +- Resources/Locale/en-US/damage/stamina.ftl | 2 + Resources/Locale/en-US/traits/traits.ftl | 12 +- .../en-US/weapons/throwing/throwing.ftl | 6 + Resources/Prototypes/Body/Parts/base.yml | 46 ++++ .../Consumable/Food/Containers/lunchbox.yml | 7 +- .../Objects/Devices/Medical/portafib.yml | 7 + .../Entities/Clothing/Head/welding.yml | 7 + .../Entities/Clothing/Neck/pins.yml | 7 +- .../OuterClothing/base_clothingouter.yml | 9 +- .../Entities/Clothing/Shoes/magboots.yml | 20 ++ .../Objects/Consumable/Drinks/drinks_cans.yml | 6 + .../Consumable/Drinks/drinks_flasks.yml | 4 + .../Objects/Devices/holoprojectors.yml | 13 ++ .../Entities/Objects/Devices/pda.yml | 13 +- .../Fun/Instruments/instruments_string.yml | 14 ++ .../Entities/Objects/Fun/bike_horn.yml | 1 + .../Prototypes/Entities/Objects/Fun/pai.yml | 4 + .../Prototypes/Entities/Objects/Fun/toys.yml | 3 +- .../Entities/Objects/Materials/shards.yml | 11 +- .../Entities/Objects/Misc/briefcases.yml | 2 + .../Entities/Objects/Misc/broken_bottle.yml | 2 +- .../Objects/Misc/fire_extinguisher.yml | 2 + .../Entities/Objects/Misc/paper.yml | 20 +- .../Entities/Objects/Misc/tiles.yml | 13 +- .../Entities/Objects/Misc/utensils.yml | 14 ++ .../Objects/Specific/Hydroponics/tools.yml | 23 ++ .../Objects/Specific/Janitorial/janitor.yml | 10 + .../Objects/Specific/Medical/defib.yml | 7 + .../Medical/handheld_crew_monitor.yml | 11 +- .../Specific/Medical/healthanalyzer.yml | 4 + .../Objects/Specific/Medical/surgery.yml | 85 ++++++++ .../Objects/Specific/Service/barber.yml | 8 +- .../Service/vending_machine_restock.yml | 5 + .../Entities/Objects/Tools/emag.yml | 7 + .../Entities/Objects/Tools/flashlights.yml | 4 +- .../Entities/Objects/Tools/gas_tanks.yml | 8 + .../Entities/Objects/Tools/jaws_of_life.yml | 5 + .../Entities/Objects/Tools/lighters.yml | 24 +++ .../Entities/Objects/Tools/toolbox.yml | 11 + .../Entities/Objects/Tools/tools.yml | 30 +++ .../Entities/Objects/Tools/welders.yml | 6 + .../Weapons/Guns/Projectiles/arrows.yml | 1 + .../Objects/Weapons/Melee/baseball_bat.yml | 2 + .../Entities/Objects/Weapons/Melee/cane.yml | 1 + .../Entities/Objects/Weapons/Melee/cult.yml | 5 + .../Objects/Weapons/Melee/e_sword.yml | 33 +++ .../Objects/Weapons/Melee/fireaxe.yml | 5 + .../Objects/Weapons/Melee/home_run_bat.yml | 3 + .../Entities/Objects/Weapons/Melee/knife.yml | 33 ++- .../Entities/Objects/Weapons/Melee/mining.yml | 12 ++ .../Entities/Objects/Weapons/Melee/needle.yml | 5 + .../Objects/Weapons/Melee/pickaxe.yml | 6 + .../Objects/Weapons/Melee/sledgehammer.yml | 2 + .../Entities/Objects/Weapons/Melee/spear.yml | 1 + .../Objects/Weapons/Melee/stunprod.yml | 2 + .../Entities/Objects/Weapons/Melee/sword.yml | 33 +++ .../Weapons/Melee/telescopic_baton.yml | 5 +- .../Objects/Weapons/Melee/white_cane.yml | 2 +- .../Weapons/Throwable/throwing_stars.yml | 1 + .../Entities/Objects/Weapons/security.yml | 6 +- .../Furniture/Tables/base_structuretables.yml | 3 +- .../Closets/Lockers/base_structurelockers.yml | 5 + .../Storage/Closets/Lockers/lockers.yml | 5 + .../Storage/Closets/base_structureclosets.yml | 10 + .../Structures/Storage/Crates/crates.yml | 22 +- .../Entities/Structures/base_structure.yml | 5 + .../Entities/Objects/Fun/instruments.yml | 1 + .../Entities/Objects/Weapons/Melee/blunt.yml | 4 +- .../Weapons/Melee/breaching_hammer.yml | 4 +- .../Entities/Objects/Weapons/Melee/dulled.yml | 8 + .../Entities/Objects/Weapons/Melee/sword.yml | 4 + .../Entities/Objects/Weapons/Melee/cult.yml | 16 +- 105 files changed, 1773 insertions(+), 160 deletions(-) create mode 100644 Content.Client/Damage/DamageOtherOnHitSystem.cs delete mode 100644 Content.Server/Damage/Components/DamageOtherOnHitComponent.cs create mode 100644 Content.Shared/Damage/Components/DamageOtherOnHitComponent.cs create mode 100644 Content.Shared/Damage/Components/DamageOtherOnHitImmuneComponent.cs create mode 100644 Content.Shared/Damage/Events/DamageOtherOnHitEvents.cs create mode 100644 Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs create mode 100644 Content.Shared/Item/ItemToggle/Components/ItemToggleDamageOtherOnHitComponent.cs create mode 100644 Content.Shared/Item/ItemToggle/Components/ItemToggleEmbedPassiveDamageComponent.cs create mode 100644 Content.Shared/Item/ItemToggle/Components/ItemToggleEmbeddableProjectileComponent.cs create mode 100644 Content.Shared/Item/ItemToggle/Components/ItemToggleThrowingAngleComponent.cs create mode 100644 Content.Shared/Projectiles/EmbedPassiveDamageComponent.cs create mode 100644 Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs create mode 100644 Content.Shared/Throwing/ThrownItemImmuneComponent.cs create mode 100644 Resources/Locale/en-US/body/body-parts.ftl create mode 100644 Resources/Locale/en-US/weapons/throwing/throwing.ftl diff --git a/Content.Client/Damage/DamageOtherOnHitSystem.cs b/Content.Client/Damage/DamageOtherOnHitSystem.cs new file mode 100644 index 00000000000..1171e634dfe --- /dev/null +++ b/Content.Client/Damage/DamageOtherOnHitSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Damage.Systems; + +namespace Content.Client.Damage; + +public sealed class DamageOtherOnHitSystem : SharedDamageOtherOnHitSystem; diff --git a/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs b/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs deleted file mode 100644 index 3123e251af4..00000000000 --- a/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Server.Damage.Systems; -using Content.Shared.Damage; - -namespace Content.Server.Damage.Components -{ - [Access(typeof(DamageOtherOnHitSystem))] - [RegisterComponent] - public sealed partial class DamageOtherOnHitComponent : Component - { - [DataField("ignoreResistances")] - [ViewVariables(VVAccess.ReadWrite)] - public bool IgnoreResistances = false; - - [DataField("damage", required: true)] - [ViewVariables(VVAccess.ReadWrite)] - public DamageSpecifier Damage = default!; - - } -} diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index 0efa5349815..2ffd66fe068 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -1,65 +1,66 @@ -using Content.Server.Administration.Logs; -using Content.Server.Damage.Components; -using Content.Server.Weapons.Ranged.Systems; using Content.Shared.Camera; using Content.Shared.Damage; +using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; using Content.Shared.Damage.Systems; using Content.Shared.Database; using Content.Shared.Effects; +using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Mobs.Components; +using Content.Shared.Projectiles; +using Content.Shared.Popups; using Content.Shared.Throwing; +using Content.Shared.Weapons.Melee; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.Physics.Components; using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; namespace Content.Server.Damage.Systems { - public sealed class DamageOtherOnHitSystem : EntitySystem + public sealed class DamageOtherOnHitSystem : SharedDamageOtherOnHitSystem { - [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly GunSystem _guns = default!; - [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DamageExamineSystem _damageExamine = default!; - [Dependency] private readonly SharedCameraRecoilSystem _sharedCameraRecoil = default!; - [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; - [Dependency] private readonly ThrownItemSystem _thrownItem = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly StaminaSystem _stamina = default!; public override void Initialize() { - SubscribeLocalEvent(OnDoHit); + base.Initialize(); + + SubscribeLocalEvent(OnBeforeThrow); SubscribeLocalEvent(OnDamageExamine); } - private void OnDoHit(EntityUid uid, DamageOtherOnHitComponent component, ThrowDoHitEvent args) + private void OnBeforeThrow(EntityUid uid, StaminaComponent component, ref BeforeThrowEvent args) { - var dmg = _damageable.TryChangeDamage(args.Target, component.Damage, component.IgnoreResistances, origin: args.Component.Thrower); - - // Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying. - if (dmg != null && HasComp(args.Target)) - _adminLogger.Add(LogType.ThrowHit, $"{ToPrettyString(args.Target):target} received {dmg.GetTotal():damage} damage from collision"); - - if (dmg is { Empty: false }) - { - _color.RaiseEffect(Color.Red, new List() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); - } + if (!TryComp(args.ItemUid, out var damage)) + return; - _guns.PlayImpactSound(args.Target, dmg, null, false); - if (TryComp(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) + if (component.CritThreshold - component.StaminaDamage <= damage.StaminaCost) { - var direction = body.LinearVelocity.Normalized(); - _sharedCameraRecoil.KickCamera(args.Target, direction); + args.Cancelled = true; + _popup.PopupEntity(Loc.GetString("throw-no-stamina", ("item", args.ItemUid)), uid, uid); + return; } - // TODO: If more stuff touches this then handle it after. - if (TryComp(uid, out var physics)) - { - _thrownItem.LandComponent(args.Thrown, args.Component, physics, false); - } + _stamina.TakeStaminaDamage(uid, damage.StaminaCost, component, visual: false); } private void OnDamageExamine(EntityUid uid, DamageOtherOnHitComponent component, ref DamageExamineEvent args) { - _damageExamine.AddDamageExamine(args.Message, component.Damage, Loc.GetString("damage-throw")); + _damageExamine.AddDamageExamine(args.Message, GetDamage(uid, component, args.User), Loc.GetString("damage-throw")); + + if (component.StaminaCost == 0) + return; + + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( + Loc.GetString("damage-stamina-cost", + ("type", Loc.GetString("damage-throw")), ("cost", component.StaminaCost))); + args.Message.PushNewline(); + args.Message.AddMessage(staminaCostMarkup); } } } diff --git a/Content.Server/Flash/FlashSystem.cs b/Content.Server/Flash/FlashSystem.cs index bc91a307b08..994e74e68d4 100644 --- a/Content.Server/Flash/FlashSystem.cs +++ b/Content.Server/Flash/FlashSystem.cs @@ -14,6 +14,7 @@ using Content.Shared.Inventory; using Content.Shared.Physics; using Content.Shared.Tag; +using Content.Shared.Throwing; using Content.Shared.Weapons.Melee.Events; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -50,6 +51,7 @@ public override void Initialize() SubscribeLocalEvent(OnFlashMeleeHit); // ran before toggling light for extra-bright lantern SubscribeLocalEvent(OnFlashUseInHand, before: new []{ typeof(HandheldLightSystem) }); + SubscribeLocalEvent(OnFlashThrowHitEvent); SubscribeLocalEvent(OnInventoryFlashAttempt); SubscribeLocalEvent(OnFlashImmunityFlashAttempt); SubscribeLocalEvent(OnPermanentBlindnessFlashAttempt); @@ -60,10 +62,8 @@ private void OnFlashMeleeHit(EntityUid uid, FlashComponent comp, MeleeHitEvent a { if (!args.IsHit || !args.HitEntities.Any() || - !UseFlash(uid, comp, args.User)) - { + !UseFlash(uid, comp)) return; - } args.Handled = true; foreach (var e in args.HitEntities) @@ -74,14 +74,22 @@ private void OnFlashMeleeHit(EntityUid uid, FlashComponent comp, MeleeHitEvent a private void OnFlashUseInHand(EntityUid uid, FlashComponent comp, UseInHandEvent args) { - if (args.Handled || !UseFlash(uid, comp, args.User)) + if (args.Handled || !UseFlash(uid, comp)) return; args.Handled = true; FlashArea(uid, args.User, comp.Range, comp.AoeFlashDuration, comp.SlowTo, true, comp.Probability); } - private bool UseFlash(EntityUid uid, FlashComponent comp, EntityUid user) + private void OnFlashThrowHitEvent(EntityUid uid, FlashComponent comp, ThrowDoHitEvent args) + { + if (!UseFlash(uid, comp)) + return; + + FlashArea(uid, args.User, comp.Range, comp.AoeFlashDuration, comp.SlowTo, false, comp.Probability); + } + + private bool UseFlash(EntityUid uid, FlashComponent comp) { if (comp.Flashing) return false; @@ -99,7 +107,7 @@ private bool UseFlash(EntityUid uid, FlashComponent comp, EntityUid user) { _appearance.SetData(uid, FlashVisuals.Burnt, true); _tag.AddTag(uid, "Trash"); - _popup.PopupEntity(Loc.GetString("flash-component-becomes-empty"), user); + _popup.PopupEntity(Loc.GetString("flash-component-becomes-empty"), uid); } uid.SpawnTimer(400, () => diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index 8f0519b24cf..23b503caefd 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -237,6 +237,12 @@ hands.ActiveHandEntity is not { } throwEnt || // Let other systems change the thrown entity (useful for virtual items) // or the throw strength. + var itemEv = new BeforeGettingThrownEvent(throwEnt, direction, throwStrength, player); + RaiseLocalEvent(throwEnt, ref itemEv); + + if (itemEv.Cancelled) + return true; + var ev = new BeforeThrowEvent(throwEnt, direction, throwStrength, player); RaiseLocalEvent(player, ref ev); diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs index 0061b16e47c..c5ec2d76ad5 100644 --- a/Content.Server/Projectiles/ProjectileSystem.cs +++ b/Content.Server/Projectiles/ProjectileSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Damage.Events; using Content.Server.Administration.Logs; using Content.Server.Effects; using Content.Server.Weapons.Ranged.Systems; @@ -7,6 +8,7 @@ using Content.Shared.Projectiles; using Robust.Shared.Physics.Events; using Robust.Shared.Player; +using Robust.Shared.Utility; namespace Content.Server.Projectiles; @@ -22,6 +24,7 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnStartCollide); + SubscribeLocalEvent(OnDamageExamine); } private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref StartCollideEvent args) @@ -77,4 +80,21 @@ private void OnStartCollide(EntityUid uid, ProjectileComponent component, ref St RaiseNetworkEvent(new ImpactEffectEvent(component.ImpactEffect, GetNetCoordinates(xform.Coordinates)), Filter.Pvs(xform.Coordinates, entityMan: EntityManager)); } } + + private void OnDamageExamine(EntityUid uid, EmbeddableProjectileComponent component, ref DamageExamineEvent args) + { + if (!component.EmbedOnThrow) + return; + + if (!args.Message.IsEmpty) + args.Message.PushNewline(); + + var isHarmful = TryComp(uid, out var passiveDamage) && passiveDamage.Damage.Any(); + var loc = isHarmful + ? "damage-examine-embeddable-harmful" + : "damage-examine-embeddable"; + + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow(Loc.GetString(loc)); + args.Message.AddMessage(staminaCostMarkup); + } } diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index a3719f8f397..daf76268a3c 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -65,7 +65,7 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, if (component.HeavyStaminaCost != 0) { var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( - Loc.GetString("damage-melee-heavy-stamina-cost", + Loc.GetString("damage-stamina-cost", ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); args.Message.PushNewline(); args.Message.AddMessage(staminaCostMarkup); diff --git a/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs index 09c3c5fa52d..202353d3eef 100644 --- a/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs +++ b/Content.Shared/Body/Systems/SharedBodySystem.Targeting.cs @@ -264,7 +264,7 @@ private static TargetBodyPart GetRandomPartSpread(IRobustRandom random, ushort t public TargetBodyPart? GetRandomBodyPart(EntityUid uid, TargetingComponent? target = null) { - if (!Resolve(uid, ref target)) + if (!Resolve(uid, ref target, false)) return null; var totalWeight = target.TargetOdds.Values.Sum(); diff --git a/Content.Shared/Damage/Components/DamageOtherOnHitComponent.cs b/Content.Shared/Damage/Components/DamageOtherOnHitComponent.cs new file mode 100644 index 00000000000..ca5179fe29d --- /dev/null +++ b/Content.Shared/Damage/Components/DamageOtherOnHitComponent.cs @@ -0,0 +1,75 @@ +using Content.Shared.Contests; +using Content.Shared.Damage.Systems; +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Damage.Components; + +/// +/// Deals damage when thrown. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class DamageOtherOnHitComponent : Component +{ + [DataField, AutoNetworkedField] + public bool IgnoreResistances = false; + + /// + /// The damage that a throw deals. + /// + [DataField, AutoNetworkedField] + public DamageSpecifier Damage = new(); + + /// + /// The stamina cost of throwing this entity. + /// + [DataField, AutoNetworkedField] + public float StaminaCost = 3.5f; + + /// + /// The maximum amount of hits per throw before landing on the floor. + /// + [DataField, AutoNetworkedField] + public int MaxHitQuantity = 1; + + /// + /// The tracked amount of hits in a single throw. + /// + [DataField, AutoNetworkedField] + public int HitQuantity = 0; + + /// + /// The multiplier to apply to the entity's light attack damage to calculate the throwing damage. + /// Only used if this component has a MeleeWeaponComponent and Damage is not set on the prototype. + /// + [DataField, AutoNetworkedField] + public float MeleeDamageMultiplier = 1f; + + /// + /// The sound to play when this entity hits on a throw. + /// If null, attempts to retrieve the SoundHit from MeleeWeaponComponent. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier? SoundHit; + + /// + /// Arguments for modifying the throwing weapon damage with contests. + /// These are the same ContestArgs in MeleeWeaponComponent. + /// + [DataField] + public ContestArgs ContestArgs = new ContestArgs + { + DoStaminaInteraction = true, + StaminaDisadvantage = true, + DoHealthInteraction = true, + }; + + /// + /// Plays if no damage is done to the target entity. + /// If null, attempts to retrieve the SoundNoDamage from MeleeWeaponComponent. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier SoundNoDamage { get; set; } = new SoundCollectionSpecifier("WeakHit"); +} diff --git a/Content.Shared/Damage/Components/DamageOtherOnHitImmuneComponent.cs b/Content.Shared/Damage/Components/DamageOtherOnHitImmuneComponent.cs new file mode 100644 index 00000000000..2be4886fbd8 --- /dev/null +++ b/Content.Shared/Damage/Components/DamageOtherOnHitImmuneComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Damage.Components; + +/// +/// This is used for entities that are immune to getting hit by DamageOtherOnHit, and getting embedded from EmbeddableProjectile. +/// +[RegisterComponent] +public sealed partial class DamageOtherOnHitImmuneComponent : Component {} diff --git a/Content.Shared/Damage/Events/DamageOtherOnHitEvents.cs b/Content.Shared/Damage/Events/DamageOtherOnHitEvents.cs new file mode 100644 index 00000000000..512546fda50 --- /dev/null +++ b/Content.Shared/Damage/Events/DamageOtherOnHitEvents.cs @@ -0,0 +1,21 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Item.ItemToggle.Components; + +namespace Content.Shared.Damage.Events; + +/// +/// Raised on a throwing weapon to calculate potential damage bonuses or decreases. +/// +[ByRefEvent] +public record struct GetThrowingDamageEvent(EntityUid Weapon, DamageSpecifier Damage, List Modifiers, EntityUid? User); + +/// +/// Raised on a throwing weapon when DamageOtherOnHit has been successfully initialized. +/// +public record struct DamageOtherOnHitStartupEvent(Entity Weapon); + +/// +/// Raised on a throwing weapon when ItemToggleDamageOtherOnHit has been successfully initialized. +/// +public record struct ItemToggleDamageOtherOnHitStartupEvent(Entity Weapon); diff --git a/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs b/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs new file mode 100644 index 00000000000..8b3d29d7349 --- /dev/null +++ b/Content.Shared/Damage/Systems/SharedDamageOtherOnHitSystem.cs @@ -0,0 +1,201 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Camera; +using Content.Shared.Contests; +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Events; +using Content.Shared.Database; +using Content.Shared.Effects; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Mobs.Components; +using Content.Shared.Projectiles; +using Content.Shared.Popups; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Melee; +using Robust.Shared.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Systems; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.Damage.Systems +{ + public abstract partial class SharedDamageOtherOnHitSystem : EntitySystem + { + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedCameraRecoilSystem _sharedCameraRecoil = default!; + [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; + [Dependency] private readonly ThrownItemSystem _thrownItem = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly MeleeSoundSystem _meleeSound = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly ContestsSystem _contests = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnDoHit); + SubscribeLocalEvent(OnThrown); + + SubscribeLocalEvent(OnItemToggleMapInit); + SubscribeLocalEvent(OnItemToggle); + } + + /// + /// Inherit stats from MeleeWeapon. + /// + private void OnMapInit(EntityUid uid, DamageOtherOnHitComponent component, MapInitEvent args) + { + if (!TryComp(uid, out var melee)) + return; + + if (component.Damage.Empty) + component.Damage = melee.Damage * component.MeleeDamageMultiplier; + if (component.SoundHit == null) + component.SoundHit = melee.SoundHit; + if (component.SoundNoDamage == null) + { + if (melee.SoundNoDamage != null) + component.SoundNoDamage = melee.SoundNoDamage; + else + component.SoundNoDamage = new SoundCollectionSpecifier("WeakHit"); + } + + RaiseLocalEvent(uid, new DamageOtherOnHitStartupEvent((uid, component))); + } + + /// + /// Inherit stats from ItemToggleMeleeWeaponComponent. + /// + private void OnItemToggleMapInit(EntityUid uid, ItemToggleDamageOtherOnHitComponent component, MapInitEvent args) + { + if (!TryComp(uid, out var itemToggleMelee) || + !TryComp(uid, out var damage)) + return; + + if (component.ActivatedDamage == null && itemToggleMelee.ActivatedDamage is {} activatedDamage) + component.ActivatedDamage = activatedDamage * damage.MeleeDamageMultiplier; + if (component.ActivatedSoundHit == null) + component.ActivatedSoundHit = itemToggleMelee.ActivatedSoundOnHit; + if (component.ActivatedSoundNoDamage == null && itemToggleMelee.ActivatedSoundOnHitNoDamage is {} activatedSoundOnHitNoDamage) + component.ActivatedSoundNoDamage = activatedSoundOnHitNoDamage; + + RaiseLocalEvent(uid, new ItemToggleDamageOtherOnHitStartupEvent((uid, component))); + } + + private void OnDoHit(EntityUid uid, DamageOtherOnHitComponent component, ThrowDoHitEvent args) + { + if (component.HitQuantity >= component.MaxHitQuantity) + return; + + var modifiedDamage = _damageable.TryChangeDamage(args.Target, GetDamage(uid, component, args.Component.Thrower), + component.IgnoreResistances, origin: args.Component.Thrower, targetPart: args.TargetPart); + + // Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying. + if (modifiedDamage != null) + { + if (HasComp(args.Target)) + _adminLogger.Add(LogType.ThrowHit, $"{ToPrettyString(args.Target):target} received {modifiedDamage.GetTotal():damage} damage from collision"); + + _meleeSound.PlayHitSound(args.Target, null, SharedMeleeWeaponSystem.GetHighestDamageSound(modifiedDamage, _protoManager), null, + component.SoundHit, component.SoundNoDamage); + } + + if (modifiedDamage is { Empty: false }) + _color.RaiseEffect(Color.Red, new List() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); + + if (TryComp(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) + { + var direction = body.LinearVelocity.Normalized(); + _sharedCameraRecoil.KickCamera(args.Target, direction); + } + + // TODO: If more stuff touches this then handle it after. + if (TryComp(uid, out var physics)) + { + _thrownItem.LandComponent(args.Thrown, args.Component, physics, false); + + if (!HasComp(args.Thrown)) + { + var newVelocity = physics.LinearVelocity; + newVelocity.X = -newVelocity.X / 4; + newVelocity.Y = -newVelocity.Y / 4; + _physics.SetLinearVelocity(uid, newVelocity, body: physics); + } + } + + component.HitQuantity += 1; + } + + /// + /// Used to update the DamageOtherOnHit component on item toggle. + /// + private void OnItemToggle(EntityUid uid, DamageOtherOnHitComponent component, ItemToggledEvent args) + { + if (!TryComp(uid, out var itemToggle)) + return; + + if (args.Activated) + { + if (itemToggle.ActivatedDamage is {} activatedDamage) + { + itemToggle.DeactivatedDamage ??= component.Damage; + component.Damage = activatedDamage * component.MeleeDamageMultiplier; + } + + if (itemToggle.ActivatedStaminaCost is {} activatedStaminaCost) + { + itemToggle.DeactivatedStaminaCost ??= component.StaminaCost; + component.StaminaCost = activatedStaminaCost; + } + + itemToggle.DeactivatedSoundHit ??= component.SoundHit; + component.SoundHit = itemToggle.ActivatedSoundHit; + + if (itemToggle.ActivatedSoundNoDamage is {} activatedSoundNoDamage) + { + itemToggle.DeactivatedSoundNoDamage ??= component.SoundNoDamage; + component.SoundNoDamage = activatedSoundNoDamage; + } + } + else + { + if (itemToggle.DeactivatedDamage is {} deactivatedDamage) + component.Damage = deactivatedDamage; + + if (itemToggle.DeactivatedStaminaCost is {} deactivatedStaminaCost) + component.StaminaCost = deactivatedStaminaCost; + + component.SoundHit = itemToggle.DeactivatedSoundHit; + + if (itemToggle.DeactivatedSoundNoDamage is {} deactivatedSoundNoDamage) + component.SoundNoDamage = deactivatedSoundNoDamage; + } + } + + private void OnThrown(EntityUid uid, DamageOtherOnHitComponent component, ThrownEvent args) + { + component.HitQuantity = 0; + } + + /// + /// Gets the total damage a throwing weapon does. + /// + public DamageSpecifier GetDamage(EntityUid uid, DamageOtherOnHitComponent? component = null, EntityUid? user = null) + { + if (!Resolve(uid, ref component, false)) + return new DamageSpecifier(); + + var ev = new GetThrowingDamageEvent(uid, component.Damage, new(), user); + RaiseLocalEvent(uid, ref ev); + + if (component.ContestArgs is not null && user is EntityUid userUid) + ev.Damage *= _contests.ContestConstructor(userUid, component.ContestArgs); + + return DamageSpecifier.ApplyModifierSets(ev.Damage, ev.Modifiers); + } + } +} diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleDamageOtherOnHitComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleDamageOtherOnHitComponent.cs new file mode 100644 index 00000000000..844582f6fa8 --- /dev/null +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleDamageOtherOnHitComponent.cs @@ -0,0 +1,60 @@ +using Content.Shared.Damage.Systems; +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Item.ItemToggle.Components; + +/// +/// Handles changes to DamageOtherOnHitComponent when the item is toggled. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ItemToggleDamageOtherOnHitComponent : Component +{ + /// + /// The stamina cost of throwing this entity when activated. + /// + [DataField, AutoNetworkedField] + public float? ActivatedStaminaCost = null; + + /// + /// The stamina cost of throwing this entity when deactivated. + /// + [DataField, AutoNetworkedField] + public float? DeactivatedStaminaCost = null; + + /// + /// Damage done by this item when activated. + /// + [DataField, AutoNetworkedField] + public DamageSpecifier? ActivatedDamage = null; + + /// + /// Damage done by this item when deactivated. + /// + [DataField, AutoNetworkedField] + public DamageSpecifier? DeactivatedDamage = null; + + /// + /// The noise this item makes when hitting something with it on. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier? ActivatedSoundHit; + + /// + /// The noise this item makes when hitting something with it off. + /// + public SoundSpecifier? DeactivatedSoundHit; + + /// + /// The noise this item makes when hitting something with it off and it does no damage. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier ActivatedSoundNoDamage { get; set; } = new SoundCollectionSpecifier("WeakHit"); + + /// + /// The noise this item makes when hitting something with it off and it does no damage. + /// + public SoundSpecifier? DeactivatedSoundNoDamage; +} diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbedPassiveDamageComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbedPassiveDamageComponent.cs new file mode 100644 index 00000000000..76ecbec3604 --- /dev/null +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbedPassiveDamageComponent.cs @@ -0,0 +1,23 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; + +namespace Content.Shared.Item.ItemToggle.Components; + +/// +/// Handles the changes to the embed passive damage when toggled. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ItemToggleEmbedPassiveDamageComponent : Component +{ + /// + /// Damage per interval dealt to the entity every interval when activated. + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public DamageSpecifier? ActivatedDamage = null; + + /// + /// Damage per interval dealt to the entity every interval when deactivated. + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public DamageSpecifier? DeactivatedDamage = null; +} diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbeddableProjectileComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbeddableProjectileComponent.cs new file mode 100644 index 00000000000..bd8f68402dc --- /dev/null +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleEmbeddableProjectileComponent.cs @@ -0,0 +1,60 @@ +using System.Numerics; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Item.ItemToggle.Components; + +/// +/// Handles the embeddable stats for activated items. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ItemToggleEmbeddableProjectileComponent : Component +{ + /// + /// The removal time when this item is activated. + /// + [DataField, AutoNetworkedField] + public float? ActivatedRemovalTime; + + /// + /// The offset of the sprite when this item is activated. + /// + [DataField, AutoNetworkedField] + public Vector2? ActivatedOffset; + + /// + /// Whether this entity will embed when thrown when this item is activated. + /// + [DataField, AutoNetworkedField] + public bool? ActivatedEmbedOnThrow; + + /// + /// The sound to play after embedding when this item is activated. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier? ActivatedSound; + + /// + /// The removal time when this item is deactivated. + /// + [DataField, AutoNetworkedField] + public float? DeactivatedRemovalTime; + + /// + /// The offset of the sprite when this item is deactivated. + /// + [DataField, AutoNetworkedField] + public Vector2? DeactivatedOffset; + + /// + /// Whether this entity will embed when thrown when this item is deactivated. + /// + [DataField, AutoNetworkedField] + public bool? DeactivatedEmbedOnThrow; + + /// + /// The sound to play after embedding when this item is deactivated. + /// + [DataField, AutoNetworkedField] + public SoundSpecifier? DeactivatedSound; +} diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleThrowingAngleComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleThrowingAngleComponent.cs new file mode 100644 index 00000000000..38590621c37 --- /dev/null +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleThrowingAngleComponent.cs @@ -0,0 +1,41 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Item.ItemToggle.Components; + +/// +/// Handles the changes to the throwing angle when the item is toggled. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ItemToggleThrowingAngleComponent : Component +{ + /// + /// Item's throwing spin status when activated. + /// + [DataField, AutoNetworkedField] + public bool? ActivatedAngularVelocity = null; + + /// + /// Item's angle when activated. + /// + [DataField, AutoNetworkedField] + public Angle? ActivatedAngle = null; + + /// + /// Item's throwing spin status when deactivated. + /// + [DataField, AutoNetworkedField] + public bool? DeactivatedAngularVelocity = null; + + /// + /// Item's angle when deactivated. + /// + [DataField, AutoNetworkedField] + public Angle? DeactivatedAngle = null; + + /// + /// When this is true, adds the ThrowingAngle component on activation + /// and deletes it on deactivation. + /// + [DataField, AutoNetworkedField] + public bool DeleteOnDeactivate = false; +} diff --git a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs index fa23339223e..d07fd5a735e 100644 --- a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs @@ -1,12 +1,15 @@ using Content.Shared.Interaction.Events; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; +using Content.Shared.Projectiles; using Content.Shared.Temperature; +using Content.Shared.Throwing; using Content.Shared.Toggleable; using Content.Shared.Wieldable; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; +using System.Numerics; namespace Content.Shared.Item.ItemToggle; /// @@ -35,6 +38,8 @@ public override void Initialize() SubscribeLocalEvent(OnIsHotEvent); SubscribeLocalEvent(UpdateActiveSound); + SubscribeLocalEvent(UpdateThrowingAngle); + SubscribeLocalEvent(UpdateEmbeddableProjectile); } private void OnStartup(Entity ent, ref ComponentStartup args) @@ -268,4 +273,93 @@ private void UpdateActiveSound(EntityUid uid, ItemToggleActiveSoundComponent act activeSound.PlayingStream = _audio.Stop(activeSound.PlayingStream); } } + + /// + /// Used to update the throwing angle on item toggle. + /// + private void UpdateThrowingAngle(EntityUid uid, ItemToggleThrowingAngleComponent component, ItemToggledEvent args) + { + if (component.DeleteOnDeactivate) + { + if (args.Activated) + { + var newThrowingAngle = new ThrowingAngleComponent(); + + if (component.ActivatedAngle is {} activatedAngle) + newThrowingAngle.Angle = activatedAngle; + + if (component.ActivatedAngularVelocity is {} activatedAngularVelocity) + newThrowingAngle.AngularVelocity = activatedAngularVelocity; + + AddComp(uid, newThrowingAngle); + } + else + RemCompDeferred(uid); + return; + } + + if (!TryComp(uid, out var throwingAngle)) + return; + + if (args.Activated) + { + component.DeactivatedAngle ??= throwingAngle.Angle; + if (component.ActivatedAngle is {} activatedAngle) + throwingAngle.Angle = activatedAngle; + + component.DeactivatedAngularVelocity ??= throwingAngle.AngularVelocity; + if (component.ActivatedAngularVelocity is {} activatedAngularVelocity) + throwingAngle.AngularVelocity = activatedAngularVelocity; + } + else + { + if (component.DeactivatedAngle is {} deactivatedAngle) + throwingAngle.Angle = deactivatedAngle; + + if (component.DeactivatedAngularVelocity is {} deactivatedAngularVelocity) + throwingAngle.AngularVelocity = deactivatedAngularVelocity; + } + } + + /// + /// Used to update the embeddable stats on item toggle. + /// + private void UpdateEmbeddableProjectile(EntityUid uid, ItemToggleEmbeddableProjectileComponent component, ItemToggledEvent args) + { + if (!TryComp(uid, out var embeddable)) + return; + + if (args.Activated) + { + component.DeactivatedRemovalTime ??= embeddable.RemovalTime; + if (component.ActivatedRemovalTime is {} activatedRemovalTime) + embeddable.RemovalTime = activatedRemovalTime; + + component.DeactivatedOffset ??= embeddable.Offset; + if (component.ActivatedOffset is {} activatedOffset) + embeddable.Offset = activatedOffset; + + component.DeactivatedEmbedOnThrow ??= embeddable.EmbedOnThrow; + if (component.ActivatedEmbedOnThrow is {} activatedEmbedOnThrow) + embeddable.EmbedOnThrow = activatedEmbedOnThrow; + + component.DeactivatedSound ??= embeddable.Sound; + if (component.ActivatedSound is {} activatedSound) + embeddable.Sound = activatedSound; + } + else + { + if (component.DeactivatedRemovalTime is {} deactivatedRemovalTime) + embeddable.RemovalTime = deactivatedRemovalTime; + + if (component.DeactivatedOffset is {} deactivatedOffset) + embeddable.Offset = deactivatedOffset; + + if (component.DeactivatedEmbedOnThrow is {} deactivatedEmbedOnThrow) + embeddable.EmbedOnThrow = deactivatedEmbedOnThrow; + + if (component.DeactivatedSound is {} deactivatedSound) + embeddable.Sound = deactivatedSound; + } + } } diff --git a/Content.Shared/Projectiles/EmbedEvent.cs b/Content.Shared/Projectiles/EmbedEvent.cs index 521a691f45a..9d47a815d3c 100644 --- a/Content.Shared/Projectiles/EmbedEvent.cs +++ b/Content.Shared/Projectiles/EmbedEvent.cs @@ -1,10 +1,12 @@ +using Content.Shared.Targeting; + namespace Content.Shared.Projectiles; /// /// Raised directed on an entity when it embeds in another entity. /// [ByRefEvent] -public readonly record struct EmbedEvent(EntityUid? Shooter, EntityUid Embedded) +public readonly record struct EmbedEvent(EntityUid? Shooter, EntityUid Embedded, TargetBodyPart? BodyPart) { public readonly EntityUid? Shooter = Shooter; @@ -12,4 +14,18 @@ public readonly record struct EmbedEvent(EntityUid? Shooter, EntityUid Embedded) /// Entity that is embedded in. /// public readonly EntityUid Embedded = Embedded; + + /// + /// Body part that has the embedded entity. + /// + public readonly TargetBodyPart? BodyPart = BodyPart; +} + +/// +/// Raised on an entity when it stops embedding in another entity. +/// +[ByRefEvent] +public readonly record struct RemoveEmbedEvent(EntityUid? Remover) +{ + public readonly EntityUid? Remover = Remover; } diff --git a/Content.Shared/Projectiles/EmbedPassiveDamageComponent.cs b/Content.Shared/Projectiles/EmbedPassiveDamageComponent.cs new file mode 100644 index 00000000000..cfb08fcf7be --- /dev/null +++ b/Content.Shared/Projectiles/EmbedPassiveDamageComponent.cs @@ -0,0 +1,57 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.FixedPoint; +using Content.Shared.Mobs.Components; +using Content.Shared.Targeting; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.GameStates; + +namespace Content.Shared.Projectiles; + +/// +/// Passively damages the mob this embeddable is attached to. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class EmbedPassiveDamageComponent : Component +{ + /// + /// The entity this embeddable is attached to. + /// + [ViewVariables(VVAccess.ReadWrite)] + public EntityUid? Embedded = null; + + /// + /// The damage component to deal damage to. + /// + [ViewVariables(VVAccess.ReadOnly)] + public DamageableComponent? EmbeddedDamageable = null; + + /// + /// The MobState component to check if the target is still alive. + /// + [ViewVariables(VVAccess.ReadOnly)] + public MobStateComponent? EmbeddedMobState = null; + + /// + /// The body part to apply damage to. + /// + [ViewVariables(VVAccess.ReadOnly)] + public TargetBodyPart? EmbeddedBodyPart = null; + + /// + /// Damage per interval dealt to the entity every interval. + /// If this is set manually, DamageMultiplier will be ignored. + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public DamageSpecifier Damage = new(); + + /// + /// Multiplier to be applied to the damage of DamageOtherOnHit to + /// calculate the damage per second. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float ThrowingDamageMultiplier = 0.05f; + + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] + public TimeSpan NextDamage = TimeSpan.Zero; +} diff --git a/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs b/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs new file mode 100644 index 00000000000..55733ac5bb3 --- /dev/null +++ b/Content.Shared/Projectiles/EmbedPassiveDamageSystem.cs @@ -0,0 +1,115 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Events; +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; +using Content.Shared.Mobs.Components; +using Content.Shared.FixedPoint; +using Robust.Shared.Timing; + +namespace Content.Shared.Projectiles; + +public sealed class EmbedPassiveDamageSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDamageOtherOnHitStartup); + SubscribeLocalEvent(OnItemToggleStartup); + SubscribeLocalEvent(OnEmbed); + SubscribeLocalEvent(OnRemoveEmbed); + SubscribeLocalEvent(OnItemToggle); + } + + /// + /// Inherit stats from DamageOtherOnHit. + /// + private void OnDamageOtherOnHitStartup(EntityUid uid, EmbedPassiveDamageComponent component, DamageOtherOnHitStartupEvent args) + { + if (component.Damage.Empty) + component.Damage = args.Weapon.Comp.Damage * component.ThrowingDamageMultiplier; + } + + /// + /// Inherit stats from ItemToggleDamageOtherOnHit. + /// + private void OnItemToggleStartup(EntityUid uid, ItemToggleEmbedPassiveDamageComponent component, ItemToggleDamageOtherOnHitStartupEvent args) + { + if (!TryComp(uid, out var embedPassiveDamage) || + component.ActivatedDamage != null || + !(args.Weapon.Comp.ActivatedDamage is {} activatedDamage)) + return; + + component.ActivatedDamage = activatedDamage * embedPassiveDamage.ThrowingDamageMultiplier; + } + + private void OnEmbed(EntityUid uid, EmbedPassiveDamageComponent component, EmbedEvent args) + { + if (component.Damage.Empty || component.Damage.GetTotal() == 0 || + !TryComp(args.Embedded, out var mobState) || + !TryComp(args.Embedded, out var damageable)) + return; + + component.Embedded = args.Embedded; + component.EmbeddedDamageable = damageable; + component.EmbeddedMobState = mobState; + component.EmbeddedBodyPart = args.BodyPart; + component.NextDamage = _timing.CurTime + TimeSpan.FromSeconds(1f); + + Dirty(uid, component); + } + + private void OnRemoveEmbed(EntityUid uid, EmbedPassiveDamageComponent component, RemoveEmbedEvent args) + { + component.Embedded = null; + component.EmbeddedDamageable = null; + component.EmbeddedMobState = null; + component.EmbeddedBodyPart = null; + component.NextDamage = TimeSpan.Zero; + + Dirty(uid, component); + } + + /// + /// Used to update the EmbedPassiveDamageComponent component on item toggle. + /// + private void OnItemToggle(EntityUid uid, EmbedPassiveDamageComponent component, ItemToggledEvent args) + { + if (!TryComp(uid, out var itemTogglePassiveDamage)) + return; + + if (args.Activated && itemTogglePassiveDamage.ActivatedDamage is {} activatedDamage) + { + itemTogglePassiveDamage.DeactivatedDamage ??= component.Damage; + component.Damage = activatedDamage; + } + else if (itemTogglePassiveDamage.DeactivatedDamage is {} deactivatedDamage) + component.Damage = deactivatedDamage; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + var curTime = _timing.CurTime; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + if (comp.Embedded is null || + comp.EmbeddedDamageable is null || + comp.NextDamage > curTime || // Make sure they're up for a damage tick + comp.EmbeddedMobState is null || + comp.EmbeddedMobState.CurrentState == MobState.Dead) // Don't damage dead mobs, they've already gone through too much + continue; + + comp.NextDamage = curTime + TimeSpan.FromSeconds(1f); + + _damageable.TryChangeDamage(comp.Embedded, comp.Damage, false, false, comp.EmbeddedDamageable, targetPart: comp.EmbeddedBodyPart); + } + } +} diff --git a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs index 008b7c2ced4..2a0dc1b1da1 100644 --- a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs +++ b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs @@ -1,5 +1,7 @@ +using Content.Shared.Targeting; using System.Numerics; using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.GameStates; namespace Content.Shared.Projectiles; @@ -27,7 +29,7 @@ public sealed partial class EmbeddableProjectileComponent : Component /// How long it takes to remove the embedded object. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] - public float? RemovalTime = 3f; + public float? RemovalTime = 5f; /// /// Whether this entity will embed when thrown, or only when shot as a projectile. @@ -46,4 +48,28 @@ public sealed partial class EmbeddableProjectileComponent : Component /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public SoundSpecifier? Sound; + + /// + /// The entity this embeddable is attached to. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public EntityUid? Target = null; + + /// + /// The body part of the target this embeddable is attached to. + /// + [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public TargetBodyPart? TargetBodyPart = null; + + /// + /// How much time before this entity automatically falls off? (0 is never) + /// + [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + public float AutoRemoveDuration = 40f; + + /// + /// The time when this entity automatically falls off after being attached. + /// + [ViewVariables(VVAccess.ReadWrite), DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField] + public TimeSpan? AutoRemoveTime = null; } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 593ad221b8d..960dab84611 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -1,10 +1,15 @@ using System.Numerics; +using Content.Shared.Body.Systems; using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.IdentityManagement; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Mobs.Components; +using Content.Shared.Popups; +using Content.Shared.Targeting; using Content.Shared.Throwing; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; @@ -15,6 +20,7 @@ using Robust.Shared.Physics.Events; using Robust.Shared.Physics.Systems; using Robust.Shared.Serialization; +using Robust.Shared.Timing; namespace Content.Shared.Projectiles; @@ -28,6 +34,9 @@ public abstract partial class SharedProjectileSystem : EntitySystem [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedBodySystem _body = default!; public override void Initialize() { @@ -39,6 +48,27 @@ public override void Initialize() SubscribeLocalEvent(OnEmbedActivate); SubscribeLocalEvent(OnEmbedRemove); SubscribeLocalEvent(OnAttemptPacifiedThrow); + SubscribeLocalEvent(OnExamined); + } + + // TODO: rename Embedded to Target in every context + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + var curTime = _timing.CurTime; + + while (query.MoveNext(out var uid, out var comp)) + { + if (comp.AutoRemoveTime == null || comp.AutoRemoveTime > curTime) + continue; + + if (comp.Target is {} targetUid) + _popup.PopupClient(Loc.GetString("throwing-embed-falloff", ("item", uid)), targetUid, targetUid); + + RemoveEmbed(uid, comp); + } } private void OnEmbedActivate(EntityUid uid, EmbeddableProjectileComponent component, ActivateInWorldEvent args) @@ -52,17 +82,39 @@ private void OnEmbedActivate(EntityUid uid, EmbeddableProjectileComponent compon args.Handled = true; + if (component.Target is {} targetUid) + _popup.PopupClient(Loc.GetString("throwing-embed-remove-alert-owner", ("item", uid), ("other", args.User)), + args.User, targetUid); + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.RemovalTime.Value, new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid) { DistanceThreshold = SharedInteractionSystem.InteractionRange, + BreakOnUserMove = true, + BreakOnTargetMove = true, + NeedHand = true, }); } private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent component, RemoveEmbeddedProjectileEvent args) { + if (args.Cancelled) + return; + + RemoveEmbed(uid, component, args.User); + } + + private void RemoveEmbed(EntityUid uid, EmbeddableProjectileComponent component, EntityUid? remover = null) + { + component.AutoRemoveTime = null; + component.Target = null; + component.TargetBodyPart = null; + + var ev = new RemoveEmbedEvent(remover); + RaiseLocalEvent(uid, ref ev); + // Whacky prediction issues. - if (args.Cancelled || _netManager.IsClient) + if (_netManager.IsClient) return; if (component.DeleteOnRemove) @@ -85,20 +137,22 @@ private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent componen } // Land it just coz uhhh yeah - var landEv = new LandEvent(args.User, true); + var landEv = new LandEvent(remover, true); RaiseLocalEvent(uid, ref landEv); _physics.WakeBody(uid, body: physics); // try place it in the user's hand - _hands.TryPickupAnyHand(args.User, uid); + if (remover is {} removerUid) + _hands.TryPickupAnyHand(removerUid, uid); } private void OnEmbedThrowDoHit(EntityUid uid, EmbeddableProjectileComponent component, ThrowDoHitEvent args) { - if (!component.EmbedOnThrow) + if (!component.EmbedOnThrow || + HasComp(args.Target)) return; - Embed(uid, args.Target, null, component); + Embed(uid, args.Target, null, component, args.TargetPart); } private void OnEmbedProjectileHit(EntityUid uid, EmbeddableProjectileComponent component, ref ProjectileHitEvent args) @@ -113,7 +167,7 @@ private void OnEmbedProjectileHit(EntityUid uid, EmbeddableProjectileComponent c } } - private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableProjectileComponent component) + private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableProjectileComponent component, TargetBodyPart? targetPart = null) { TryComp(uid, out var physics); _physics.SetLinearVelocity(uid, Vector2.Zero, body: physics); @@ -128,8 +182,17 @@ private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableP } _audio.PlayPredicted(component.Sound, uid, null); - var ev = new EmbedEvent(user, target); + + component.TargetBodyPart = targetPart; + var ev = new EmbedEvent(user, target, targetPart); RaiseLocalEvent(uid, ref ev); + + if (component.AutoRemoveDuration != 0) + component.AutoRemoveTime = _timing.CurTime + TimeSpan.FromSeconds(component.AutoRemoveDuration); + + component.Target = target; + + Dirty(uid, component); } private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args) @@ -149,12 +212,6 @@ public void SetShooter(EntityUid id, ProjectileComponent component, EntityUid sh Dirty(id, component); } - [Serializable, NetSerializable] - private sealed partial class RemoveEmbeddedProjectileEvent : DoAfterEvent - { - public override DoAfterEvent Clone() => this; - } - /// /// Prevent players with the Pacified status effect from throwing embeddable projectiles. /// @@ -162,6 +219,31 @@ private void OnAttemptPacifiedThrow(Entity ent, r { args.Cancel("pacified-cannot-throw-embed"); } + + private void OnExamined(EntityUid uid, EmbeddableProjectileComponent component, ExaminedEvent args) + { + if (!(component.Target is {} target)) + return; + + var targetIdentity = Identity.Entity(target, EntityManager); + + var loc = component.TargetBodyPart == null + ? Loc.GetString("throwing-examine-embedded", + ("embedded", uid), + ("target", targetIdentity)) + : Loc.GetString("throwing-examine-embedded-part", + ("embedded", uid), + ("target", targetIdentity), + ("targetPart", Loc.GetString($"body-part-{component.TargetBodyPart.ToString()}"))); + + args.PushMarkup(loc); + } + + [Serializable, NetSerializable] + private sealed partial class RemoveEmbeddedProjectileEvent : DoAfterEvent + { + public override DoAfterEvent Clone() => this; + } } [Serializable, NetSerializable] diff --git a/Content.Shared/Throwing/BeforeThrowEvent.cs b/Content.Shared/Throwing/BeforeThrowEvent.cs index 36e7dd758b8..f949c16b0ea 100644 --- a/Content.Shared/Throwing/BeforeThrowEvent.cs +++ b/Content.Shared/Throwing/BeforeThrowEvent.cs @@ -20,3 +20,22 @@ public BeforeThrowEvent(EntityUid itemUid, Vector2 direction, float throwStrengt public bool Cancelled = false; } + +[ByRefEvent] +public struct BeforeGettingThrownEvent +{ + public BeforeGettingThrownEvent(EntityUid itemUid, Vector2 direction, float throwStrength, EntityUid playerUid) + { + ItemUid = itemUid; + Direction = direction; + ThrowStrength = throwStrength; + PlayerUid = playerUid; + } + + public EntityUid ItemUid { get; set; } + public Vector2 Direction { get; } + public float ThrowStrength { get; set;} + public EntityUid PlayerUid { get; } + + public bool Cancelled = false; +} diff --git a/Content.Shared/Throwing/ThrowEvents.cs b/Content.Shared/Throwing/ThrowEvents.cs index 5ea78b862ed..ea13a7dbe40 100644 --- a/Content.Shared/Throwing/ThrowEvents.cs +++ b/Content.Shared/Throwing/ThrowEvents.cs @@ -1,3 +1,5 @@ +using Content.Shared.Targeting; + namespace Content.Shared.Throwing { /// @@ -10,17 +12,19 @@ public abstract class ThrowEvent : HandledEntityEventArgs /// The entity that threw . /// public EntityUid? User { get; } - // End Nyano code. + // End Nyano code. public readonly EntityUid Thrown; public readonly EntityUid Target; public ThrownItemComponent Component; + public TargetBodyPart? TargetPart; - public ThrowEvent(EntityUid? user, EntityUid thrown, EntityUid target, ThrownItemComponent component) //Nyano - Summary: User added. + public ThrowEvent(EntityUid? user, EntityUid thrown, EntityUid target, ThrownItemComponent component, TargetBodyPart? targetPart) //Nyano - Summary: User added. { User = user; //Nyano - Summary: User added. Thrown = thrown; Target = target; Component = component; + TargetPart = targetPart; } } @@ -29,7 +33,7 @@ public ThrowEvent(EntityUid? user, EntityUid thrown, EntityUid target, ThrownIte /// public sealed class ThrowHitByEvent : ThrowEvent { - public ThrowHitByEvent(EntityUid? user, EntityUid thrown, EntityUid target, ThrownItemComponent component) : base(user, thrown, target, component) //Nyano - Summary: User added. + public ThrowHitByEvent(EntityUid? user, EntityUid thrown, EntityUid target, ThrownItemComponent component, TargetBodyPart? targetPart) : base(user, thrown, target, component, targetPart) //Nyano - Summary: User added. { } } @@ -39,7 +43,7 @@ public ThrowHitByEvent(EntityUid? user, EntityUid thrown, EntityUid target, Thro /// public sealed class ThrowDoHitEvent : ThrowEvent { - public ThrowDoHitEvent(EntityUid thrown, EntityUid target, ThrownItemComponent component) : base(null, thrown, target, component) //Nyano - Summary: User added. + public ThrowDoHitEvent(EntityUid thrown, EntityUid target, ThrownItemComponent component, TargetBodyPart? targetPart) : base(null, thrown, target, component, targetPart) //Nyano - Summary: User added. { } } diff --git a/Content.Shared/Throwing/ThrownItemImmuneComponent.cs b/Content.Shared/Throwing/ThrownItemImmuneComponent.cs new file mode 100644 index 00000000000..f2bbd29535a --- /dev/null +++ b/Content.Shared/Throwing/ThrownItemImmuneComponent.cs @@ -0,0 +1,10 @@ +namespace Content.Shared.Throwing +{ + /// + /// This is used for entities that are immune to getting hit by thrown items. + /// + [RegisterComponent] + public sealed partial class ThrownItemImmuneComponent : Component + { + } +} diff --git a/Content.Shared/Throwing/ThrownItemSystem.cs b/Content.Shared/Throwing/ThrownItemSystem.cs index ef28db26727..f607a2dc934 100644 --- a/Content.Shared/Throwing/ThrownItemSystem.cs +++ b/Content.Shared/Throwing/ThrownItemSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Shared.Administration.Logs; +using Content.Shared.Body.Systems; using Content.Shared.Database; using Content.Shared.Gravity; using Content.Shared.Physics; @@ -23,6 +24,7 @@ public sealed class ThrownItemSystem : EntitySystem [Dependency] private readonly FixtureSystem _fixtures = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedGravitySystem _gravity = default!; + [Dependency] private readonly SharedBodySystem _body = default!; private const string ThrowingFixture = "throw-fixture"; @@ -133,15 +135,20 @@ public void LandComponent(EntityUid uid, ThrownItemComponent thrownItem, Physics /// public void ThrowCollideInteraction(ThrownItemComponent component, EntityUid thrown, EntityUid target) { + if (HasComp(target)) + return; + if (component.Thrower is not null) _adminLogger.Add(LogType.ThrowHit, LogImpact.Low, $"{ToPrettyString(thrown):thrown} thrown by {ToPrettyString(component.Thrower.Value):thrower} hit {ToPrettyString(target):target}."); - if (component.Thrower is not null)// Nyano - Summary: Gotta check if there was a thrower. - RaiseLocalEvent(target, new ThrowHitByEvent(component.Thrower.Value, thrown, target, component), true); // Nyano - Summary: Gotta update for who threw it. + var targetPart = _body.GetRandomBodyPart(target); + + if (component.Thrower is not null)// Nyano - Summary: Gotta check if there was a thrower. + RaiseLocalEvent(target, new ThrowHitByEvent(component.Thrower.Value, thrown, target, component, targetPart), true); // Nyano - Summary: Gotta update for who threw it. else - RaiseLocalEvent(target, new ThrowHitByEvent(null, thrown, target, component), true); // Nyano - Summary: No thrower. - RaiseLocalEvent(thrown, new ThrowDoHitEvent(thrown, target, component), true); + RaiseLocalEvent(target, new ThrowHitByEvent(null, thrown, target, component, targetPart), true); // Nyano - Summary: No thrower. + RaiseLocalEvent(thrown, new ThrowDoHitEvent(thrown, target, component, targetPart), true); } public override void Update(float frameTime) diff --git a/Content.Shared/Tools/Components/ToolTileCompatibleComponent.cs b/Content.Shared/Tools/Components/ToolTileCompatibleComponent.cs index caac41a3def..272a39cfbc3 100644 --- a/Content.Shared/Tools/Components/ToolTileCompatibleComponent.cs +++ b/Content.Shared/Tools/Components/ToolTileCompatibleComponent.cs @@ -18,7 +18,7 @@ public sealed partial class ToolTileCompatibleComponent : Component /// The time it takes to modify the tile. /// [DataField, ViewVariables(VVAccess.ReadWrite)] - public TimeSpan Delay = TimeSpan.FromSeconds(1); + public TimeSpan Delay = TimeSpan.FromSeconds(0.5); /// /// Whether or not the tile being modified must be unobstructed diff --git a/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs b/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs index 85ecf151dd9..97b88f559e1 100644 --- a/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Traits.Assorted.Components; +using Content.Shared.Damage.Events; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Damage.Components; @@ -17,8 +18,10 @@ public override void Initialize() SubscribeLocalEvent(OnCritStartup); SubscribeLocalEvent(OnDeadStartup); SubscribeLocalEvent(OnStaminaCritStartup); - SubscribeLocalEvent(OnAdrenalineGetDamage); - SubscribeLocalEvent(OnPainToleranceGetDamage); + SubscribeLocalEvent(OnAdrenalineGetMeleeDamage); + SubscribeLocalEvent(OnAdrenalineGetThrowingDamage); + SubscribeLocalEvent(OnPainToleranceGetMeleeDamage); + SubscribeLocalEvent(OnPainToleranceGetThrowingDamage); } private void OnCritStartup(EntityUid uid, CritModifierComponent component, ComponentStartup args) @@ -49,15 +52,35 @@ private void OnStaminaCritStartup(EntityUid uid, StaminaCritModifierComponent co stamina.CritThreshold += component.CritThresholdModifier; } - private void OnAdrenalineGetDamage(EntityUid uid, AdrenalineComponent component, ref GetMeleeDamageEvent args) + private void OnAdrenalineGetMeleeDamage(EntityUid uid, AdrenalineComponent component, ref GetMeleeDamageEvent args) + { + args.Damage *= GetAdrenalineMultiplier(uid, component); + } + + private void OnAdrenalineGetThrowingDamage(EntityUid uid, AdrenalineComponent component, ref GetThrowingDamageEvent args) + { + args.Damage *= GetAdrenalineMultiplier(uid, component); + } + + private float GetAdrenalineMultiplier(EntityUid uid, AdrenalineComponent component) { var modifier = _contests.HealthContest(uid, component.BypassClamp, component.RangeModifier); - args.Damage *= component.Inverse ? 1 / modifier : modifier; + return component.Inverse ? 1 / modifier : modifier; + } + + private void OnPainToleranceGetMeleeDamage(EntityUid uid, PainToleranceComponent component, ref GetMeleeDamageEvent args) + { + args.Damage *= GetPainToleranceMultiplier(uid, component); + } + + private void OnPainToleranceGetThrowingDamage(EntityUid uid, PainToleranceComponent component, ref GetThrowingDamageEvent args) + { + args.Damage *= GetPainToleranceMultiplier(uid, component); } - private void OnPainToleranceGetDamage(EntityUid uid, PainToleranceComponent component, ref GetMeleeDamageEvent args) + private float GetPainToleranceMultiplier(EntityUid uid, PainToleranceComponent component) { var modifier = _contests.StaminaContest(uid, component.BypassClamp, component.RangeModifier); - args.Damage *= component.Inverse ? 1 / modifier : modifier; + return component.Inverse ? 1 / modifier : modifier; } } diff --git a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs index 315d752a2c0..6ec55a78846 100644 --- a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs +++ b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs @@ -31,11 +31,8 @@ public void PlaySwingSound(EntityUid userUid, EntityUid weaponUid, MeleeWeaponCo /// /// Serves as a lookup key for a hit sound /// A sound can be supplied by the itself to override everything else - public void PlayHitSound(EntityUid targetUid, EntityUid? userUid, string? damageType, SoundSpecifier? hitSoundOverride, MeleeWeaponComponent weaponComponent) + public void PlayHitSound(EntityUid targetUid, EntityUid? userUid, string? damageType, SoundSpecifier? hitSoundOverride, SoundSpecifier? hitSound, SoundSpecifier? noDamageSound) { - var hitSound = weaponComponent.SoundHit; - var noDamageSound = weaponComponent.SoundNoDamage; - var playedSound = false; if (Deleted(targetUid)) diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 20bf6d5c4e1..7bc817dd24a 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -529,7 +529,7 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity } - _meleeSound.PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component); + _meleeSound.PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component.SoundHit, component.SoundNoDamage); if (damageResult?.GetTotal() > FixedPoint2.Zero) { @@ -678,7 +678,7 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (entities.Count != 0) { var target = entities.First(); - _meleeSound.PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, _protoManager), hitEvent.HitSoundOverride, component); + _meleeSound.PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, _protoManager), hitEvent.HitSoundOverride, component.SoundHit, component.SoundNoDamage); } if (appliedDamage.GetTotal() > FixedPoint2.Zero) diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs index 1dbbb769aad..a16d8dc9326 100644 --- a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs @@ -4,10 +4,12 @@ using Content.Shared.Interaction; using Content.Shared.Inventory.Events; using Content.Shared.Popups; +using Content.Shared.Projectiles; using Content.Shared.Stunnable; using Content.Shared.Throwing; using Content.Shared.Weapons.Melee.Events; using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Robust.Shared.Network; namespace Content.Shared.WhiteDream.BloodCult.Items; @@ -16,11 +18,12 @@ public sealed class CultItemSystem : EntitySystem [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedStunSystem _stun = default!; + [Dependency] private readonly INetManager _net = default!; public override void Initialize() { SubscribeLocalEvent(OnActivate); - SubscribeLocalEvent(OnBeforeThrow); + SubscribeLocalEvent(OnBeforeGettingThrown); SubscribeLocalEvent(OnEquipAttempt); SubscribeLocalEvent(OnMeleeAttempt); SubscribeLocalEvent(OnBeforeBlocking); @@ -28,20 +31,22 @@ public override void Initialize() private void OnActivate(Entity item, ref ActivateInWorldEvent args) { - if (CanUse(args.User)) + if (CanUse(args.User) || + // Allow non-cultists to remove embedded cultist weapons and getting knocked down afterwards on pickup + (TryComp(item.Owner, out var embeddable) && embeddable.Target != null)) return; args.Handled = true; KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-generic")); } - private void OnBeforeThrow(Entity item, ref BeforeThrowEvent args) + private void OnBeforeGettingThrown(Entity item, ref BeforeGettingThrownEvent args) { if (CanUse(args.PlayerUid)) return; args.Cancelled = true; - KnockdownAndDropItem(item, args.PlayerUid, Loc.GetString("cult-item-component-throw-fail")); + KnockdownAndDropItem(item, args.PlayerUid, Loc.GetString("cult-item-component-throw-fail"), true); } private void OnEquipAttempt(Entity item, ref BeingEquippedAttemptEvent args) @@ -71,9 +76,14 @@ private void OnBeforeBlocking(Entity item, ref BeforeBlocking KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-block-fail")); } - private void KnockdownAndDropItem(Entity item, EntityUid user, string message) + // serverOnly is a very rough hack to make sure OnBeforeGettingThrown (that is only run server-side) can + // show the popup while not causing several popups to show up with PopupEntity. + private void KnockdownAndDropItem(Entity item, EntityUid user, string message, bool serverOnly = false) { - _popup.PopupPredicted(message, item, user); + if (serverOnly) + _popup.PopupEntity(message, item, user); + else + _popup.PopupPredicted(message, item, user); _stun.TryKnockdown(user, item.Comp.KnockdownDuration, true); _hands.TryDrop(user); } diff --git a/Resources/Locale/en-US/body/body-parts.ftl b/Resources/Locale/en-US/body/body-parts.ftl new file mode 100644 index 00000000000..5dec76bb714 --- /dev/null +++ b/Resources/Locale/en-US/body/body-parts.ftl @@ -0,0 +1,19 @@ +# Locale values for TargetBodyPart + +body-part-Head = head +body-part-Torso = torso +body-part-Groin = groin +body-part-LeftArm = left arm +body-part-LeftHand = left hand +body-part-RightArm = right arm +body-part-RightHand = right hand +body-part-LeftLeg = left leg +body-part-LeftFoot = left foot +body-part-RightLeg = right leg +body-part-RightFoot = right foot + +body-part-Hands = hands +body-part-Arms = arms +body-part-Legs = legs +body-part-Feet = feet +body-part-All = body diff --git a/Resources/Locale/en-US/damage/damage-examine.ftl b/Resources/Locale/en-US/damage/damage-examine.ftl index 3a71fc72620..f6cfe75fa76 100644 --- a/Resources/Locale/en-US/damage/damage-examine.ftl +++ b/Resources/Locale/en-US/damage/damage-examine.ftl @@ -12,4 +12,7 @@ damage-examine = It does the following damage: damage-examine-type = It does the following [color=cyan]{$type}[/color] damage: damage-value = - [color=red]{$amount}[/color] units of [color=yellow]{$type}[/color]. -damage-melee-heavy-stamina-cost = A [color=cyan]{$type}[/color] costs [color=orange]{$cost}[/color] [color=yellow]Stamina[/color]. +damage-stamina-cost = A [color=cyan]{$type}[/color] costs [color=orange]{$cost}[/color] [color=yellow]Stamina[/color]. + +damage-examine-embeddable-harmful = It [color=cyan]embeds[/color] when thrown, doing damage over time. +damage-examine-embeddable = It [color=cyan]embeds[/color] harmlessly when thrown. diff --git a/Resources/Locale/en-US/damage/stamina.ftl b/Resources/Locale/en-US/damage/stamina.ftl index 0d14a52c1ee..657f32cb651 100644 --- a/Resources/Locale/en-US/damage/stamina.ftl +++ b/Resources/Locale/en-US/damage/stamina.ftl @@ -1 +1,3 @@ melee-stamina = Not enough stamina + +throw-no-stamina = You don't have enough stamina to throw the {$item}! diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 74eb67bdaf2..10e13ae80ad 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -144,24 +144,24 @@ trait-description-GlassJaw = trait-name-HighAdrenaline = High Adrenaline trait-description-HighAdrenaline = Whether by natural causes, genetic or bionic augmentation, you have a more potent adrenal gland. - When injured, your melee attacks deal up to 10% more damage, in addition to the natural bonuses from adrenaline. - The standard adrenaline bonuses to melee damage are up to a 20% increase. + When injured, your melee/throwing attacks deal up to 10% more damage, in addition to the natural bonuses from adrenaline. + The standard adrenaline bonuses to melee/throwing damage are up to a 20% increase. trait-name-AdrenalDysfunction = Adrenal Dysfunction trait-description-AdrenalDysfunction = Your adrenal gland is completely nonfunctional, or potentially missing outright. - Your melee attacks do not benefit from Adrenaline when injured. - The standard adrenaline bonuses to melee damage are up to a 20% increase. + Your melee/throwing attacks do not benefit from Adrenaline when injured. + The standard adrenaline bonuses to melee/throwing damage are up to a 20% increase. trait-name-Masochism = Masochism trait-description-Masochism = Deriving enjoyment from your own pain, you are not as inhibited by it as others. - You ignore the first 10% of stamina damage penalties to your melee attacks. + You ignore the first 10% of stamina damage penalties to your melee/throwing attacks. trait-name-LowPainTolerance = Low Pain Tolerance trait-description-LowPainTolerance = Your tolerance for pain is far below average, and its effects are more inhibiting. - Your melee damage is penalized by up to an additional 15% when taking stamina damage. + Your melee/throwing damage is penalized by up to an additional 15% when taking stamina damage. trait-name-MartialArtist = Martial Artist trait-description-MartialArtist = diff --git a/Resources/Locale/en-US/weapons/throwing/throwing.ftl b/Resources/Locale/en-US/weapons/throwing/throwing.ftl new file mode 100644 index 00000000000..c7d2a8f663f --- /dev/null +++ b/Resources/Locale/en-US/weapons/throwing/throwing.ftl @@ -0,0 +1,6 @@ +throwing-falloff = The {$item} falls out of you! +throwing-embed-falloff = The {$item} falls out of you! +throwing-embed-remove-alert-owner = {$other} is removing the {$item} stuck on you! + +throwing-examine-embedded = {CAPITALIZE(OBJECT($embedded))} {CONJUGATE-BE($embedded)} [color=teal]embedded[/color] in [bold]{THE($target)}[/bold]. +throwing-examine-embedded-part = {CAPITALIZE(OBJECT($embedded))} {CONJUGATE-BE($embedded)} [color=teal]embedded[/color] in [bold]{THE($target)}[/bold]'s [color=red]{$targetPart}[/color]. diff --git a/Resources/Prototypes/Body/Parts/base.yml b/Resources/Prototypes/Body/Parts/base.yml index 7b90b09794f..356b9618560 100644 --- a/Resources/Prototypes/Body/Parts/base.yml +++ b/Resources/Prototypes/Body/Parts/base.yml @@ -66,6 +66,11 @@ - type: ContainerContainer containers: torso_slot: !type:ContainerSlot {} + - type: DamageOtherOnHit + damage: + types: + Blunt: 11 + staminaCost: 12 - type: entity id: BaseHead @@ -82,6 +87,11 @@ - type: Tag tags: - Head + - type: DamageOtherOnHit + damage: + types: + Blunt: 5 + staminaCost: 5 - type: entity id: BaseLeftArm @@ -93,6 +103,11 @@ partType: Arm symmetry: Left toolName: "a left arm" + - type: DamageOtherOnHit + damage: + types: + Blunt: 7 + staminaCost: 7 - type: entity id: BaseRightArm @@ -104,6 +119,11 @@ partType: Arm symmetry: Right toolName: "a right arm" + - type: DamageOtherOnHit + damage: + types: + Blunt: 7 + staminaCost: 7 - type: entity id: BaseLeftHand @@ -115,6 +135,10 @@ partType: Hand symmetry: Left toolName: "a left hand" + - type: DamageOtherOnHit + damage: + types: + Blunt: 3 - type: entity id: BaseRightHand @@ -126,6 +150,10 @@ partType: Hand symmetry: Right toolName: "a right hand" + - type: DamageOtherOnHit + damage: + types: + Blunt: 3 - type: entity id: BaseLeftLeg @@ -138,6 +166,11 @@ symmetry: Left toolName: "a left leg" - type: MovementBodyPart + - type: DamageOtherOnHit + damage: + types: + Blunt: 8 + staminaCost: 9 - type: entity id: BaseRightLeg @@ -150,6 +183,11 @@ symmetry: Right toolName: "a right leg" - type: MovementBodyPart + - type: DamageOtherOnHit + damage: + types: + Blunt: 8 + staminaCost: 9 - type: entity id: BaseLeftFoot @@ -161,6 +199,10 @@ partType: Foot symmetry: Left toolName: "a left foot" + - type: DamageOtherOnHit + damage: + types: + Blunt: 4 - type: entity id: BaseRightFoot @@ -172,5 +214,9 @@ partType: Foot symmetry: Right toolName: "a right foot" + - type: DamageOtherOnHit + damage: + types: + Blunt: 4 # Shitmed Change End diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml index c7aae33c76d..94e898955a7 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml @@ -27,9 +27,14 @@ - type: MeleeWeapon damage: types: - Blunt: 2 + Blunt: 5.5 + heavyRateModifier: 1.25 + heavyStaminaCost: 5 + angle: 80.5 soundHit: path: "/Audio/Weapons/click.ogg" + - type: DamageOtherOnHit + staminaCost: 6 - type: StaticPrice price: 10 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml index a02023f4a8e..0f3095663d3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml @@ -43,6 +43,13 @@ - type: GuideHelp guides: - Medical Doctor + - type: DamageOtherOnHit + damage: + types: + Blunt: 6.5 + staminaCost: 8 + soundHit: + path: /Audio/Weapons/smash.ogg - type: entity id: PortafibEmpty diff --git a/Resources/Prototypes/Entities/Clothing/Head/welding.yml b/Resources/Prototypes/Entities/Clothing/Head/welding.yml index c0ae440a56e..4854df983ba 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/welding.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/welding.yml @@ -23,6 +23,13 @@ - type: HideLayerClothing slots: - Snout + - type: DamageOtherOnHit + damage: + types: + Blunt: 7 + staminaCost: 5 + soundHit: + collection: MetalThud - type: entity parent: WeldingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index 0054a3645c7..b868c866998 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -7,6 +7,11 @@ components: - type: Item size: Tiny + - type: DamageOtherOnHit + damage: + types: + Blunt: 1 + staminaCost: 1 - type: entity parent: ClothingNeckPinBase @@ -151,7 +156,7 @@ clothingVisuals: neck: - state: trans-equipped - + - type: entity parent: ClothingNeckPinBase id: ClothingNeckAutismPin diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index c18e5d6ab60..323895491af 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -151,6 +151,13 @@ coefficient: 0.75 # 25% - type: ClothingRequiredStepTriggerImmune slots: WITHOUT_POCKET + - type: DamageOtherOnHit + damage: + types: + Blunt: 19 + staminaCost: 44 + soundHit: + collection: MetalThud - type: entity abstract: true @@ -199,4 +206,4 @@ id: ClothingOuterBaseMedium components: - type: Item - size: Huge \ No newline at end of file + size: Huge diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index 034064b9439..13fbc087164 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -32,6 +32,14 @@ difficulty: 2 recipes: - ClothingShoesBootsMag + - type: DamageOtherOnHit + damage: + types: + Blunt: 9 + staminaCost: 11.5 + soundHit: + path: /Audio/Weapons/smash.ogg + - type: entity parent: ClothingShoesBootsMag @@ -59,6 +67,11 @@ price: 750 - type: StealTarget stealGroup: ClothingShoesBootsMagAdv + - type: DamageOtherOnHit + damage: + types: + Blunt: 13 + staminaCost: 15 - type: entity parent: ClothingShoesBootsMag @@ -131,6 +144,13 @@ - type: Tag tags: - WhitelistChameleon + - type: DamageOtherOnHit + damage: + types: + Blunt: 20 + staminaCost: 25 + soundHit: + collection: MetalThud - type: entity id: ActionBaseToggleMagboots diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index 319c8a634ed..728ca962f9f 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -53,6 +53,12 @@ damage: types: Blunt: 0 + - type: DamageOtherOnHit + damage: + types: + Blunt: 3 + soundHit: + path: /Audio/SimpleStation14/Items/Handling/drinkglass_drop.ogg - type: Tool qualities: - Rolling diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_flasks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_flasks.yml index 0b2af4c97f4..454cd9b025a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_flasks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_flasks.yml @@ -9,6 +9,10 @@ Steel: 300 - type: FitsInDispenser solution: drink + - type: DamageOtherOnHit + damage: + types: + Blunt: 5 - type: entity parent: FlaskBase diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml index b7ad8ddd6a8..8ebcc7dc167 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml @@ -24,6 +24,19 @@ - type: Tag tags: - HolosignProjector + - type: MeleeWeapon + wideAnimationRotation: 90 + attackRate: 0.8 + damage: + types: + Blunt: 6.5 + bluntStaminaDamageFactor: 2 + heavyRateModifier: 0.9 + maxTargets: 1 + angle: 20 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit - type: entity parent: Holoprojector diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index e32271f4cd9..2dbcfc60ab3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -108,6 +108,10 @@ - type: LanguageKnowledge speaks: [TauCetiBasic, RobotTalk] understands: [TauCetiBasic, RobotTalk] + - type: DamageOtherOnHit + damage: + types: + Blunt: 4 - type: entity parent: BasePDA @@ -504,7 +508,7 @@ parent: BasePDA id: CaptainPDA name: captain PDA - description: Surprisingly no different from your PDA. + description: Surprisingly no different from your PDA... Wait, it's a fair bit heavy to hold. components: - type: Pda id: CaptainIDCard @@ -519,6 +523,13 @@ borderColor: "#7C5D00" - type: Icon state: pda-captain + - type: DamageOtherOnHit + damage: + types: + Blunt: 8 + staminaCost: 5 + soundHit: + collection: MetalThud - type: entity parent: BasePDA diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml index 730d532930b..e8cf42f68d8 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml @@ -27,6 +27,8 @@ heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 angle: 75 + - type: DamageOtherOnHit + staminaCost: 8 - type: Item size: Normal sprite: Objects/Fun/Instruments/eguitar.rsi @@ -69,6 +71,8 @@ heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 angle: 75 + - type: DamageOtherOnHit + staminaCost: 8 - type: Item size: Normal sprite: Objects/Fun/Instruments/bassguitar.rsi @@ -112,6 +116,8 @@ heavyDamageBaseModifier: 1.2 heavyStaminaCost: 10 angle: 160 + - type: DamageOtherOnHit + staminaCost: 8 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -179,6 +185,10 @@ damage: types: Blunt: 20 + - type: DamageOnLand + damage: + types: + Blunt: 20 - type: MeleeWeapon range: 1.5 wideAnimationRotation: 45 @@ -190,6 +200,8 @@ heavyDamageBaseModifier: 1.2 heavyStaminaCost: 10 angle: 75 + - type: DamageOtherOnHit + staminaCost: 7 - type: IncreaseDamageOnWield damage: types: @@ -236,6 +248,8 @@ heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 angle: 75 + - type: DamageOtherOnHit + staminaCost: 8 - type: entity parent: BaseHandheldInstrument diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml index 7c69aa09013..36c8563bce1 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml @@ -39,6 +39,7 @@ damage: types: Blunt: 0 + - type: DamageOtherOnHit - type: Tool qualities: - Honking diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 5c0bbc84454..0adbc492308 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -88,6 +88,10 @@ - Elyran - RobotTalk - Sign # It's intentional that they don't "Speak" sign language. + - type: DamageOtherOnHit + damage: + types: + Blunt: 3 - type: entity parent: PersonalAI diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index fc771414b4a..987c56f0a11 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -35,6 +35,7 @@ damage: types: Blunt: 0 + - type: DamageOtherOnHit - type: PhysicalComposition materialComposition: Cloth: 100 @@ -1964,4 +1965,4 @@ components: - type: Sprite sprite: Objects/Fun/toys.rsi - state: shadowkin \ No newline at end of file + state: shadowkin diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index 28f206a4f05..e90aafa4142 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -43,11 +43,12 @@ mask: - ItemMask - type: DamageOtherOnHit - damage: - types: - Slash: 2 + meleeDamageMultiplier: 2 - type: EmbeddableProjectile sound: /Audio/Weapons/bladeslice.ogg + removalTime: 2.5 + autoRemoveDuration: 30 + - type: EmbedPassiveDamage - type: Tag tags: - Trash @@ -168,6 +169,10 @@ damage: types: Slash: 5.5 + - type: EmbedPassiveDamage + damage: + types: + Slash: 0.15 - type: WelderRefinable refineResult: - id: SheetGlass1 diff --git a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml index 760a0bafb68..bd1b7c8b24e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml @@ -21,6 +21,8 @@ heavyDamageBaseModifier: 2 heavyStaminaCost: 5 maxTargets: 8 + - type: DamageOtherOnHit + staminaCost: 5 - type: Tag tags: - Briefcase diff --git a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml index a6cbe9a6e7e..d926609d3ff 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml @@ -25,7 +25,7 @@ - type: DamageOtherOnHit damage: types: - Slash: 2 + Slash: 4 - type: Tag tags: - Trash diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index 6194be48488..f3f86a3bd3c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -50,6 +50,8 @@ maxTargets: 6 soundHit: path: /Audio/Weapons/smash.ogg + - type: DamageOtherOnHit + staminaCost: 9 - type: Tool qualities: - Rolling diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index d30fead363c..cc12965a953 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -339,12 +339,6 @@ path: /Audio/Medical/Surgery/retractor1.ogg endSound: path: /Audio/Medical/Surgery/hemostat1.ogg - -- type: entity - parent: Pen - id: PenEmbeddable - abstract: true - components: - type: EmbeddableProjectile offset: 0.3,0.0 removalTime: 0.0 @@ -355,6 +349,16 @@ types: Piercing: 3 +- type: entity + parent: Pen + id: PenEmbeddable + abstract: true + components: + - type: DamageOtherOnHit + damage: + types: + Piercing: 5 + #TODO: I want the luxury pen to write a cool font like Merriweather in the future. - type: entity @@ -408,6 +412,10 @@ - type: Sprite sprite: Objects/Misc/bureaucracy.rsi state: pen_cap + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 - type: entity name: CentCom pen diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 99f9ccaa874..3d3675dd33d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -12,9 +12,10 @@ - type: DamageOtherOnHit damage: types: - Blunt: 2 - - type: EmbeddableProjectile - sound: /Audio/Weapons/star_hit.ogg + Blunt: 5.5 + staminaCost: 5 + soundHit: + collection: MetalThud - type: Stack count: 1 - type: Tag @@ -67,9 +68,9 @@ - type: DamageOtherOnHit damage: types: - Blunt: 5 #Metal floor tiles deal more damage than standard - - type: EmbeddableProjectile - sound: /Audio/Weapons/block_metal1.ogg + Blunt: 9.5 #Metal floor tiles deal more damage than standard + staminaCost: 6 + soundHit: /Audio/Weapons/block_metal1.ogg - type: entity name: steel dark checker tile diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml index 7dee744ff7d..f4aa9ac9678 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml @@ -59,6 +59,14 @@ Piercing: 5 - type: Tweezers # Forks are better than spoons speed: 0.35 + - type: DamageOtherOnHit + staminaCost: 2.5 + - type: EmbeddableProjectile + removalTime: 0.5 + autoRemoveDuration: 10 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 180 - type: entity parent: UtensilBasePlastic @@ -96,6 +104,9 @@ damage: types: Blunt: 1 + - type: DamageOtherOnHit + - type: ThrowingAngle + angle: 180 - type: Shovel speedModifier: 0.1 # you can try @@ -154,5 +165,8 @@ damage: types: Blunt: 2 + - type: DamageOtherOnHit + - type: ThrowingAngle + angle: 180 - type: Shovel speedModifier: 0.05 # nah diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 316294787b3..d281f7bdee9 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -23,6 +23,10 @@ heavyDamageBaseModifier: 1.2 maxTargets: 5 angle: 100 + - type: DamageOtherOnHit + staminaCost: 5 + - type: ThrowingAngle + angle: 135 - type: Item sprite: Objects/Tools/Hydroponics/hoe.rsi @@ -49,6 +53,8 @@ heavyDamageBaseModifier: 1.2 maxTargets: 1 angle: 20 + - type: DamageOtherOnHit + staminaCost: 5 - type: Item sprite: Objects/Tools/Hydroponics/clippers.rsi storedRotation: -90 @@ -84,6 +90,13 @@ heavyStaminaCost: 5 maxTargets: 1 angle: 120 + - type: DamageOtherOnHit + staminaCost: 7 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 315 - type: Item size: Normal - type: Clothing @@ -116,6 +129,12 @@ Slash: 10 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 5 + - type: DamageOtherOnHit + meleeDamageMultiplier: 1.5 + staminaCost: 6.5 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: EmbedPassiveDamage - type: Item sprite: Objects/Tools/Hydroponics/hatchet.rsi - type: BoneSaw @@ -149,6 +168,10 @@ angle: 80 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 + - type: ThrowingAngle + angle: 45 - type: Item sprite: Objects/Tools/Hydroponics/spade.rsi - type: Shovel diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index a3a26299bf3..d39ae845385 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -21,6 +21,11 @@ angle: 180 soundHit: collection: MetalThud + - type: DamageOtherOnHit + damage: + types: + Blunt: 6 + staminaCost: 8 - type: Spillable solution: absorbed - type: Wieldable @@ -72,6 +77,11 @@ angle: 180 soundHit: collection: MetalThud + - type: DamageOtherOnHit + damage: + types: + Blunt: 6 + staminaCost: 8 - type: Spillable solution: absorbed - type: Wieldable diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml index 4a61074a8d5..1a905685934 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml @@ -42,6 +42,13 @@ - type: GuideHelp guides: - Medical Doctor + - type: DamageOtherOnHit + damage: + types: + Blunt: 16 + staminaCost: 22.5 + soundHit: + path: /Audio/Weapons/smash.ogg - type: entity id: Defibrillator diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml index ab338b9da95..a9d6bbb20f5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml @@ -38,6 +38,10 @@ - HighRiskItem - type: StealTarget stealGroup: HandheldCrewMonitor + - type: DamageOtherOnHit + damage: + types: + Blunt: 5 - type: entity id: HandheldCrewMonitorEmpty @@ -47,7 +51,7 @@ - type: ItemSlots slots: cell_slot: - name: power-cell-slot-component-slot-name-default + name: power-cell-slot-component-slot-name-default - type: entity id: SpyCrewMonitor @@ -73,7 +77,7 @@ - type: ItemSlots slots: cell_slot: - name: power-cell-slot-component-slot-name-default + name: power-cell-slot-component-slot-name-default - type: entity id: SyndiCrewMonitor @@ -97,5 +101,4 @@ - type: ItemSlots slots: cell_slot: - name: power-cell-slot-component-slot-name-default - \ No newline at end of file + name: power-cell-slot-component-slot-name-default diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml index c01aaa84a9d..47e633276b8 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healthanalyzer.yml @@ -37,6 +37,10 @@ - type: GuideHelp guides: - Medical Doctor + - type: DamageOtherOnHit + damage: + types: + Blunt: 5 - type: entity id: HandheldHealthAnalyzer diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 638b194c343..79831cab648 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -33,6 +33,9 @@ Heat: 5 soundHit: path: /Audio/Effects/lightburn.ogg + - type: DamageOtherOnHit + - type: ThrowingAngle + angle: 45 - type: SurgeryTool startSound: path: /Audio/Medical/Surgery/cautery1.ogg @@ -101,6 +104,15 @@ angle: 20 soundHit: path: /Audio/Items/drill_hit.ogg + - type: DamageOtherOnHit + damage: + types: + Piercing: 11 + staminaCost: 8 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 90 - type: StaticPrice price: 40 - type: SurgeryTool @@ -142,6 +154,12 @@ angle: 20 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 90 - type: SurgeryTool startSound: path: /Audio/Medical/Surgery/scalpel1.ogg @@ -248,6 +266,27 @@ - type: Item sprite: Objects/Specific/Medical/Surgery/retractor.rsi storedRotation: 90 + - type: MeleeWeapon + wideAnimationRotation: 90 + attackRate: 1.25 + range: 1.4 + damage: + types: + Slash: 2.5 + Blunt: 2.0 + heavyRateModifier: 0.8 + heavyDamageBaseModifier: 1.25 + heavyStaminaCost: 4 + maxTargets: 1 + angle: 20 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: ThrowingAngle + angle: 315 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage - type: SurgeryTool startSound: path: /Audio/Medical/Surgery/retractor1.ogg @@ -283,6 +322,8 @@ types: Slash: 6.5 Heat: 1 + - type: ThrowingAngle + angle: 270 - type: Hemostat speed: 1.5 - type: Retractor @@ -306,6 +347,26 @@ - type: Item sprite: Objects/Specific/Medical/Surgery/hemostat.rsi storedRotation: 90 + - type: MeleeWeapon + wideAnimationRotation: 90 + attackRate: 1.25 + range: 1.4 + damage: + types: + Slash: 6 + heavyRateModifier: 0.8 + heavyDamageBaseModifier: 1.25 + heavyStaminaCost: 4.5 + maxTargets: 1 + angle: 20 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 35 - type: SurgeryTool startSound: path: /Audio/Medical/Surgery/retractor1.ogg @@ -373,6 +434,14 @@ heavyStaminaCost: 20 maxTargets: 8 angle: 20 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 10 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 0 - type: BoneSaw # --No melee for regular saw because have you ever seen someone use a band saw as a weapon? It's dumb.-- # No, I'm going to saw through your bones. @@ -401,6 +470,8 @@ angle: 20 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: ThrowingAngle + angle: 90 - type: Tool qualities: - Sawing @@ -435,6 +506,13 @@ angle: 360 soundHit: path: /Audio/Items/drill_hit.ogg + - type: DamageOtherOnHit + damage: + types: + Slash: 10 + staminaCost: 14 + - type: ThrowingAngle + angle: 90 - type: Tool qualities: - Sawing @@ -471,6 +549,13 @@ angle: 360 soundHit: path: /Audio/Items/drill_hit.ogg + - type: DamageOtherOnHit + damage: + types: + Slash: 12 + staminaCost: 14 + - type: ThrowingAngle + angle: 90 - type: Tool qualities: - Sawing diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml index 451230bbf1f..2a09c9ede91 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Service/barber.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: BarberScissors name: barber scissors description: is able to reshape the hairstyle of any crew cut to your liking. @@ -28,3 +28,9 @@ Piercing: 6 soundHit: path: "/Audio/Weapons/bladeslice.ogg" + - type: DamageOtherOnHit + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml index 953c05f107e..478aec4ce49 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml @@ -20,6 +20,11 @@ path: /Audio/Weapons/genhit2.ogg soundSwing: path: /Audio/Weapons/punchmiss.ogg + - type: DamageOtherOnHit + damage: + types: + Blunt: 11 + staminaCost: 15 - type: Item size: Normal - type: Damageable diff --git a/Resources/Prototypes/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/Entities/Objects/Tools/emag.yml index 0117d44d6d7..4461d952c03 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/emag.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/emag.yml @@ -12,6 +12,13 @@ - type: Item sprite: Objects/Tools/emag.rsi storedRotation: -90 + - type: DamageOtherOnHit # An emag has sharp edges + damage: + types: + Slash: 5 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: EmbedPassiveDamage - type: entity parent: EmagUnlimited diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index cbb5dfee0a1..56d4bba1def 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity name: flashlight parent: BaseItem id: FlashlightLantern @@ -62,6 +62,8 @@ Blunt: 6 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 3.5 - type: Item sprite: Objects/Tools/flashlight.rsi storedRotation: -90 diff --git a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml index 8590a32a6a6..eb5e96e22d1 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml @@ -44,6 +44,10 @@ heavyStaminaCost: 10 maxTargets: 3 angle: 100 + soundHit: + path: /Audio/Weapons/smash.ogg + - type: DamageOtherOnHit + staminaCost: 8 - type: PhysicalComposition materialComposition: Steel: 185 @@ -111,6 +115,8 @@ damage: types: Blunt: 5 + - type: DamageOtherOnHit + staminaCost: 3.5 - type: PhysicalComposition materialComposition: Steel: 100 @@ -179,6 +185,8 @@ damage: types: Blunt: 7.5 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity parent: DoubleEmergencyOxygenTank diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 936e832224f..1ef7dfdc3fb 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -58,6 +58,10 @@ angle: 20 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 7 + - type: ThrowingAngle + angle: 90 - type: ReverseEngineering # Delta difficulty: 3 recipes: @@ -102,3 +106,4 @@ types: Blunt: 12 Slash: 2 + - type: DamageOtherOnHit diff --git a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml index 8a832c746e5..52b224a61ef 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml @@ -16,6 +16,17 @@ activatedDamage: types: Heat: 1 + activatedSoundOnHit: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + params: + variation: 0.250 + volume: -15 + activatedSoundOnHitNoDamage: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + params: + variation: 0.250 + volume: -17 + - type: ItemToggleDamageOtherOnHit - type: ItemToggleSize activatedSize: Small - type: ItemToggleHot @@ -78,6 +89,7 @@ damage: types: Blunt: 0 + - type: DamageOtherOnHit - type: Welder fuelConsumption: 0.01 fuelLitCost: 0.1 @@ -159,6 +171,17 @@ activatedDamage: types: Heat: 1 + activatedSoundOnHit: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + params: + variation: 0.250 + volume: -15 + activatedSoundOnHitNoDamage: + path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg + params: + variation: 0.250 + volume: -17 + - type: ItemToggleDamageOtherOnHit - type: ItemToggleSize activatedSize: Small - type: ItemToggleHot @@ -207,6 +230,7 @@ damage: types: Blunt: 1 # does a little bit of damage on hit when off + - type: DamageOtherOnHit - type: PointLight enabled: false netsync: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml index bfbb0573ca1..e5de7041a80 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml @@ -32,6 +32,9 @@ angle: 80.5 soundHit: path: "/Audio/Weapons/smash.ogg" + - type: DamageOtherOnHit + meleeDamageMultiplier: 1.33 + staminaCost: 12.5 - type: Tag tags: - Toolbox @@ -141,6 +144,10 @@ damage: types: Blunt: 11.5 + - type: DamageOtherOnHit + damage: + types: + Blunt: 15 - type: entity name: golden toolbox @@ -157,6 +164,10 @@ damage: types: Blunt: 12 + - type: DamageOtherOnHit + damage: + types: + Blunt: 16 - type: entity id: ToolboxThief diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index a58cf5fc660..17370ea04d8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -41,6 +41,12 @@ maxTargets: 4 soundHit: path: "/Audio/Items/wirecutter.ogg" + - type: DamageOtherOnHit + damage: + types: + Blunt: 4 + soundHit: + collection: MetalThud - type: Tool qualities: - Cutting @@ -118,6 +124,14 @@ angle: 20 soundHit: path: "/Audio/Weapons/bladeslice.ogg" + - type: DamageOtherOnHit + staminaCost: 5 + - type: ThrowingAngle + angle: 270 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + removalTime: 1 + - type: EmbedPassiveDamage - type: Tool qualities: - Screwing @@ -187,6 +201,7 @@ angle: 100 soundHit: collection: MetalThud + - type: DamageOtherOnHit - type: Tool qualities: - Anchoring @@ -241,6 +256,8 @@ heavyStaminaCost: 5 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 6 - type: Tool qualities: - Prying @@ -303,6 +320,7 @@ heavyDamageBaseModifier: 1.2 maxTargets: 1 angle: 20 + - type: DamageOtherOnHit - type: Item size: Small - type: Clothing @@ -449,6 +467,13 @@ angle: 20 soundHit: path: "/Audio/Items/drill_hit.ogg" + - type: DamageOtherOnHit + damage: + types: + Blunt: 8 + staminaCost: 7.5 + soundHit: + collection: MetalThud - type: ReverseEngineering # Nyano difficulty: 2 recipes: @@ -672,6 +697,10 @@ angle: 100 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 8.5 + - type: ThrowingAngle + angle: 45 - type: Item size: Normal sprite: Objects/Tools/shovel.rsi @@ -720,6 +749,7 @@ angle: 20 soundHit: collection: MetalThud + - type: DamageOtherOnHit - type: Tool qualities: - Rolling diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 69d6d80ab4e..eae5cdbf46f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -56,6 +56,11 @@ activatedDamage: types: Heat: 7 + - type: ItemToggleDamageOtherOnHit + activatedDamage: + types: + Heat: 4 + Blunt: 3 - type: ItemToggleSize activatedSize: Large - type: ItemToggleHot @@ -78,6 +83,7 @@ Blunt: 6 #i mean... i GUESS you could use it like that soundHit: collection: MetalThud + - type: DamageOtherOnHit - type: RefillableSolution solution: Welder - type: SolutionContainerManager diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml index 6f925139fb1..bc041062678 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml @@ -28,6 +28,7 @@ - type: EmbeddableProjectile sound: /Audio/Weapons/star_hit.ogg embedOnThrow: false + - type: EmbedPassiveDamage - type: ThrowingAngle angle: 0 - type: Ammo diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index 60f599af934..0c47eed9871 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -28,6 +28,8 @@ types: Blunt: 4 Structural: 10 + - type: DamageOtherOnHit + staminaCost: 10 - type: Item size: Normal - type: Tool diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml index 5c26020d72c..bc252fddbc6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml @@ -16,6 +16,7 @@ damage: types: Blunt: 5 + - type: DamageOtherOnHit - type: StaminaDamageOnHit damage: 5 - type: Wieldable diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index 3fee36a58af..045d5e3e6d3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -26,6 +26,11 @@ angle: 100 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 9 + - type: EmbeddableProjectile + - type: ThrowingAngle + angle: 225 - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index ec1d8a82be0..04562d171cd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -38,6 +38,14 @@ Slash: 8 Heat: 10 Structural: 20 + - type: ItemToggleDamageOtherOnHit + activatedStaminaCost: 6 + - type: ItemToggleEmbedPassiveDamage + - type: ItemToggleEmbeddableProjectile + activatedEmbedOnThrow: true + - type: ItemToggleThrowingAngle + activatedAngle: 225 + deleteOnDeactivate: true - type: Sprite sprite: Objects/Weapons/Melee/e_sword.rsi layers: @@ -53,6 +61,10 @@ damage: types: Blunt: 4.5 + - type: DamageOtherOnHit + - type: EmbeddableProjectile + embedOnThrow: false + - type: EmbedPassiveDamage - type: Item size: Small sprite: DeltaV/Objects/Weapons/Melee/e_sword.rsi # Delta-V @@ -145,6 +157,12 @@ volume: -6 - type: ItemToggleDisarmMalus activatedDisarmMalus: 0.4 + - type: ItemToggleEmbeddableProjectile + activatedOffset: 0.0,0.0 + activatedRemovalTime: 3 + - type: ItemToggleThrowingAngle + activatedAngle: 135 + deleteOnDeactivate: false - type: Sprite sprite: Objects/Weapons/Melee/e_dagger.rsi layers: @@ -161,6 +179,21 @@ damage: types: Blunt: 1 + - type: DamageOtherOnHit + damage: + types: + Piercing: 3 + staminaCost: 3.5 + - type: EmbeddableProjectile + offset: 0.3,0.0 + removalTime: 0.0 + embedOnThrow: true + - type: EmbedPassiveDamage + damage: + types: + Blunt: 0 + - type: ThrowingAngle + angle: 315 - type: Item size: Tiny sprite: Objects/Weapons/Melee/e_dagger.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index ffbb1c6d057..52a2c7a207a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -26,6 +26,11 @@ angle: 100 soundHit: collection: MetalThud + - type: DamageOtherOnHit + meleeDamageMultiplier: 1.5 + staminaCost: 18 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml index 43a4fb6c59b..75e0e0764c0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/home_run_bat.yml @@ -18,6 +18,9 @@ angle: 120 soundHit: collection: ExplosionSmall + - type: DamageOtherOnHit + soundHit: + collection: MetalThud # A throw won't knock them back so it's just a normal thud - type: MeleeRequiresWield # You can't hit a home run with one hand, jimbo. - type: MeleeThrowOnHit speed: 30 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 3705775dd68..51077687e07 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -23,6 +23,11 @@ angle: 40 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + sound: /Audio/Weapons/star_hit.ogg + - type: EmbedPassiveDamage - type: Sprite - type: Item size: Small @@ -52,6 +57,8 @@ - type: Sprite sprite: Objects/Weapons/Melee/kitchen_knife.rsi state: icon + - type: ThrowingAngle + angle: 225 - type: Item sprite: Objects/Weapons/Melee/kitchen_knife.rsi - type: GuideHelp @@ -78,6 +85,10 @@ types: Slash: 8 Blunt: 1 + - type: DamageOtherOnHit + staminaCost: 7.5 + - type: ThrowingAngle + angle: 245 - type: Item size: Normal sprite: Objects/Weapons/Melee/cleaver.rsi @@ -104,12 +115,8 @@ damage: types: Slash: 9 - - type: EmbeddableProjectile - sound: /Audio/Weapons/star_hit.ogg - - type: DamageOtherOnHit - damage: - types: - Slash: 9 + - type: ThrowingAngle + angle: 225 - type: Item sprite: Objects/Weapons/Melee/combat_knife.rsi - type: DisarmMalus @@ -130,6 +137,8 @@ damage: types: Slash: 8 + - type: ThrowingAngle + angle: 225 - type: Item sprite: Objects/Weapons/Melee/survival_knife.rsi @@ -148,6 +157,8 @@ damage: types: Slash: 10 + - type: ThrowingAngle + angle: 225 - type: Item sprite: Objects/Weapons/Melee/kukri_knife.rsi @@ -168,9 +179,9 @@ types: Slash: 5 - type: DamageOtherOnHit - damage: - types: - Slash: 10 + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage - type: Sprite sprite: Clothing/Head/Hats/greyflatcap.rsi - type: Clothing @@ -212,6 +223,8 @@ damage: types: Slash: 5.5 + - type: ThrowingAngle + angle: 200 - type: Item sprite: Objects/Weapons/Melee/shiv.rsi - type: DisarmMalus @@ -291,8 +304,6 @@ damage: types: Slash: 5 - - type: EmbeddableProjectile - sound: /Audio/Weapons/star_hit.ogg - type: DamageOtherOnHit ignoreResistances: true damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index 38a203ce908..900950cb9ec 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -57,6 +57,8 @@ angle: 120 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 8 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -94,6 +96,12 @@ heavyDamageBaseModifier: 1.2 maxTargets: 2 angle: 20 + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Tag tags: - Knife @@ -114,6 +122,10 @@ groups: Brute: -21 - type: MeleeWeapon + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Tag tags: - Pickaxe diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml index 11efeba5f8c..7ebbf3bf11a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml @@ -12,6 +12,11 @@ damage: types: Piercing: 1 + - type: DamageOtherOnHit + - type: EmbeddableProjectile + removalTime: 0 + - type: ThrowingAngle + angle: 225 - type: Item size: Tiny - type: BalloonPopper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 92bb33d1773..69b4c81a3e1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -26,6 +26,8 @@ heavyDamageBaseModifier: 1.75 maxTargets: 5 angle: 80 + - type: DamageOtherOnHit + staminaCost: 5 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -72,6 +74,10 @@ heavyRangeModifier: 2 heavyDamageBaseModifier: 1 angle: 20 + - type: DamageOtherOnHit + staminaCost: 8 + - type: ThrowingAngle + angle: 270 - type: ReverseEngineering # Nyano difficulty: 2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index ffe791ce0c4..09b0d0761e3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -23,6 +23,8 @@ angle: 120 soundHit: collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 10 - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 576d0b2a0ce..b650343f75c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -6,6 +6,7 @@ components: - type: EmbeddableProjectile offset: 0.15,0.15 + - type: EmbedPassiveDamage - type: ThrowingAngle angle: 225 - type: Tag diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index 5214358ff96..9fb2ef9e8c8 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -26,6 +26,7 @@ activatedDamage: types: Shock: 5 + - type: ItemToggleDamageOtherOnHit - type: Stunbaton energyPerUse: 120 - type: MeleeWeapon @@ -39,6 +40,7 @@ heavyRateModifier: 0.8 heavyDamageBaseModifier: 1.2 animation: WeaponArcThrust + - type: DamageOtherOnHit - type: StaminaDamageOnHit damage: 22 sound: /Audio/Weapons/egloves.ogg diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 046e9f76f7f..be0a4241270 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -23,6 +23,12 @@ heavyStaminaCost: 5 maxTargets: 7 angle: 80 + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Reflect enabled: true # Design intent: a robust captain or tot can sacrifice movement to make the most of this weapon, but they have to @@ -67,6 +73,12 @@ heavyStaminaCost: 15 maxTargets: 1 angle: 20 + - type: DamageOtherOnHit + staminaCost: 10 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Item size: Normal sprite: DeltaV/Objects/Weapons/Melee/katana.rsi #DeltaV @@ -86,6 +98,8 @@ damage: types: Slash: 25 + - type: ThrowingAngle + angle: 300 - type: Item size: Normal sprite: Objects/Weapons/Melee/energykatana.rsi @@ -132,6 +146,12 @@ angle: 80 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Item size: Normal sprite: Objects/Weapons/Melee/machete.rsi @@ -164,6 +184,12 @@ angle: 200 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 18 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Item size: Normal - type: Clothing @@ -199,6 +225,12 @@ angle: 40 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Item size: Normal sprite: Objects/Weapons/Melee/cutlass.rsi @@ -227,6 +259,7 @@ Radiation: 10 soundHit: path: /Audio/Effects/explosion_small1.ogg + - type: DamageOtherOnHit - type: Reflect enabled: true reflectProb: 0.5 # In robust hands, deflects as well as an e-sword diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml index 5e797c85361..a1006a589a2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: TelescopicBaton parent: BaseItem name: telescopic baton @@ -26,6 +26,7 @@ activatedDamage: types: Blunt: 12 + - type: ItemToggleDamageOtherOnHit - type: ItemToggleSize activatedSize: Normal - type: UseDelay @@ -44,6 +45,8 @@ damage: types: Blunt: 1 + - type: DamageOtherOnHit + staminaCost: 6 - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml index 123de813cbd..749be946a2c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml @@ -24,6 +24,7 @@ heavyStaminaCost: 0 maxTargets: 1 angle: 20 + - type: DamageOtherOnHit - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -31,4 +32,3 @@ Blunt: 2 - type: UseDelay delay: 1 - diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml index c68feff0b5c..293d284d526 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/throwing_stars.yml @@ -36,6 +36,7 @@ types: Slash: 8 Piercing: 10 + - type: EmbedPassiveDamage - type: StaminaDamageOnCollide damage: 45 - type: StaminaDamageOnEmbed diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 1b07eab9faf..561af78a56c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -29,6 +29,7 @@ activatedDamage: types: Blunt: 0 + - type: ItemToggleDamageOtherOnHit - type: MeleeWeapon wideAnimationRotation: -135 damage: @@ -39,6 +40,7 @@ heavyDamageBaseModifier: 1.75 heavyStaminaCost: 1 animation: WeaponArcSlash + - type: DamageOtherOnHit - type: StaminaDamageOnHit damage: 35 sound: /Audio/Weapons/egloves.ogg @@ -109,10 +111,12 @@ heavyRateModifier: 1 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 + - type: DamageOtherOnHit + staminaCost: 9 - type: Item size: Normal - type: Tag - tags: + tags: - Truncheon - type: Clothing sprite: Objects/Weapons/Melee/truncheon.rsi diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml index dbef5a7504a..7a926d66d37 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml @@ -40,7 +40,8 @@ footstepSoundCollection: collection: FootstepHull - type: RequireProjectileTarget - + - type: ThrownItemImmune + - type: entity id: CounterBase parent: TableBase diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml index 7d7bc94bb32..787421556db 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml @@ -49,6 +49,11 @@ node: done containers: - entity_storage + - type: DamageOtherOnHit + damage: + types: + Blunt: 10 + staminaCost: 35 - type: entity id: LockerBaseSecure diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index c1efc5a63f8..aa1d53a065d 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -43,6 +43,11 @@ stateBaseClosed: secure stateDoorOpen: secure_open stateDoorClosed: secure_door + - type: DamageOtherOnHit + damage: + types: + Blunt: 15 + staminaCost: 50 # Cargo - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml index e966a41780c..9d89f86a7a5 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml @@ -98,6 +98,11 @@ stateDoorClosed: generic_door - type: StaticPrice price: 50 + - type: DamageOtherOnHit + damage: + types: + Blunt: 10 + staminaCost: 35 # steel closet base (that can be constructed/deconstructed) - type: entity @@ -109,6 +114,11 @@ node: done containers: - entity_storage + - type: DamageOtherOnHit + damage: + types: + Blunt: 15 + staminaCost: 50 #Wall Closet - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index bd76a87f557..bd8281f1949 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -12,6 +12,11 @@ - Energy reflectProb: 0.2 spread: 90 + - type: DamageOtherOnHit + damage: + types: + Blunt: 16 + staminaCost: 45 - type: entity parent: CrateBaseWeldable @@ -29,6 +34,11 @@ - entity_storage - type: StaticPrice price: 80 + - type: DamageOtherOnHit + damage: + types: + Blunt: 10 + staminaCost: 30 - type: entity parent: CratePlastic @@ -140,7 +150,7 @@ map: ["enum.StorageVisualLayers.Door"] - state: paper sprite: Structures/Storage/Crates/labels.rsi - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Construction graph: WebStructures node: crate @@ -338,7 +348,7 @@ - state: paper sprite: Structures/Storage/Crates/labels.rsi offset: "-0.25,0.625" - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Icon sprite: Structures/Storage/Crates/livestock.rsi state: base @@ -393,7 +403,7 @@ - state: paper sprite: Structures/Storage/Crates/labels.rsi offset: "0.0,0.125" - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Icon sprite: Structures/Storage/Crates/cage.rsi - type: Destructible @@ -495,7 +505,7 @@ - state: closed map: ["enum.StorageVisualLayers.Door"] - state: paper - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Icon sprite: Structures/Storage/Crates/coffin.rsi state: base @@ -537,7 +547,7 @@ - state: paper sprite: Structures/Storage/Crates/labels.rsi offset: "-0.28125,0.625" - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Icon sprite: Structures/Storage/Crates/wooden_grave.rsi state: base @@ -585,7 +595,7 @@ - state: paper sprite: Structures/Storage/Crates/labels.rsi offset: "-0.3125,0.5625" - map: ["enum.PaperLabelVisuals.Layer"] + map: ["enum.PaperLabelVisuals.Layer"] - type: Icon sprite: Structures/Storage/Crates/stone_grave.rsi state: base diff --git a/Resources/Prototypes/Entities/Structures/base_structure.yml b/Resources/Prototypes/Entities/Structures/base_structure.yml index 71971a66243..207881894b8 100644 --- a/Resources/Prototypes/Entities/Structures/base_structure.yml +++ b/Resources/Prototypes/Entities/Structures/base_structure.yml @@ -25,6 +25,11 @@ - type: Tag tags: - Structure + - type: DamageOtherOnHit + damage: + types: + Blunt: 8 + staminaCost: 50 - type: entity # This means that it's not anchored on spawn. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml index 67978f89fe0..3964a9f0b04 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml @@ -48,6 +48,7 @@ damage: types: Blunt: 7 + - type: DamageOtherOnHit - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml index a9a5a829377..1b163fe1988 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml @@ -21,6 +21,8 @@ # - type: MeleeStaminaCost # swing: 10 # wieldCoefficient: 0.35 #if wielded you will only consume 3.5 stam its a weapon after all + - type: DamageOtherOnHit + staminaCost: 10 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -52,10 +54,10 @@ collection: WoodDestroy # - type: MeleeStaminaCost # swing: 5 + - type: DamageOtherOnHit - type: StaminaDamageOnHit damage: 10 - type: Item size: Normal sprite: Nyanotrasen/Objects/Weapons/Melee/shinai.rsi - type: DisarmMalus - diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml index d019cee1360..316b00d7fd3 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml @@ -23,6 +23,8 @@ # - type: MeleeStaminaCost # swing: 10 # wieldCoefficient: 0.5 #if wielded you will only consume 5 + - type: DamageOtherOnHit + staminaCost: 12 - type: Wieldable - type: IncreaseDamageOnWield damage: @@ -46,5 +48,3 @@ quickEquip: false slots: - back - - diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml index 9cab55f2a71..83e7a7dbd0e 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml @@ -16,6 +16,10 @@ types: Blunt: 5 Slash: 1 + - type: DamageOtherOnHit + staminaCost: 10 + - type: ThrowingAngle + angle: 225 - type: Item size: Normal sprite: Objects/Weapons/Melee/katana.rsi @@ -36,6 +40,10 @@ types: Blunt: 6 Slash: 1 + - type: DamageOtherOnHit + staminaCost: 18 + - type: ThrowingAngle + angle: 225 - type: Item size: Normal - type: Clothing diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml index f2604f044fd..c01b328bc79 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml @@ -21,6 +21,10 @@ Slash: 12 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage - type: Item size: Normal sprite: Nyanotrasen/Objects/Weapons/Melee/wakizashi.rsi diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml index c21c383e8e6..eb43cd2e7f4 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity name: ritual dagger parent: BaseKnife id: RitualDagger @@ -15,6 +15,12 @@ damage: types: Piercing: 15 + - type: DamageOtherOnHit + staminaCost: 5 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Clothing sprite: Objects/Weapons/Melee/cult_dagger.rsi slots: @@ -56,6 +62,12 @@ angle: 90 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: DamageOtherOnHit + staminaCost: 8 + - type: EmbeddableProjectile + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: Item size: Normal - type: Clothing @@ -79,6 +91,7 @@ state: icon - type: EmbeddableProjectile offset: 0.15,0.15 + - type: EmbedPassiveDamage - type: ThrowingAngle angle: 225 - type: Fixtures @@ -111,6 +124,7 @@ damage: types: Piercing: 40 + staminaCost: 18 - type: Item sprite: WhiteDream/BloodCult/Entities/Items/Weapons/cult_spear.rsi storedRotation: 44 From 33f80d679da22d870fb5e7d0beddfd67366b77a4 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 8 Dec 2024 03:30:38 +0000 Subject: [PATCH 120/182] Automatic Changelog Update (#1307) --- Resources/Changelog/Changelog.yml | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0a1b2996653..1efe44867a5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8490,3 +8490,42 @@ Entries: id: 6566 time: '2024-12-07T14:46:48.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1323 +- author: Skubman + changes: + - type: Add + message: >- + The Throwing Update is here. You can throw most melee weapons at the + cost of stamina to deal damage from afar. + - type: Add + message: >- + Dozens of throwable weapons, mainly sharp weapons will now embed on + throw and deal damage every second until they're manually removed or + naturally fall off after some time. + - type: Add + message: >- + Examining the damage values of an item now shows its throwing damage, + throwing stamina cost, whether or not it embeds on a throw, and if the + embed deals damage over time. + - type: Add + message: Examining an embedded item now shows what body part it's embedded in. + - type: Tweak + message: >- + The traits High Adrenaline, Adrenal Dysfunction, Masochism and Low Pain + Tolerance now affect throwing attacks just like melee attacks. + - type: Tweak + message: >- + The default time to remove embedded items has been increased from 3 to 5 + seconds, and both the remover and the target with the embedded item need + to stand still during the removal. + - type: Tweak + message: >- + The time to pry up a floor tile with a crowbar and other tools has been + decreased from 1 second to 0.5 seconds. The throwing damage of floor + tiles has been increased. Go figure. + - type: Fix + message: >- + Attempting to throw a Blood Cultist item without being a cultist will + stun you and drop the item you're holding properly. + id: 6567 + time: '2024-12-08T03:30:08.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1307 From 8216a6e60b114a65fb4662587e6e6f2e38dd242f Mon Sep 17 00:00:00 2001 From: Raphael Bertoche Date: Mon, 9 Dec 2024 14:14:02 -0300 Subject: [PATCH 121/182] Replace Direct Uses of GameTicker Dictionary with `TryGetValue` (#33222) (#1329) Cherry picks "Fix station events schedulers, antag selection and possibly other systems acting weird in a rare scenario." # Description This is being PRed mostly as a fix to an issue which caused the round to fail to start due to an error in antag selection, which did happen in Thief antags and may also happen with Bloodcult gamemode. Double posting from discord: > It fixed issues caused with antag selection at roundstart which affected roundstart Thief selection. > > Since cultists are also selected exactly at roundstart - unlike traitors for instance, I think this might help with cultists too. > > I tried to force start bloodcult gamemode in the past and it failed to start but I since I had tracebacks disabled trying to improve performance I'm not sure this was the cause. > Credits to April for pointing this out for me after I commented on the issue. ---- This cherry picks 79ff990ddf7c7af40f70bcc7ba2d3220730852ab removing changes which change methods which do not exist yet on our side. Co-authored-by: faint <46868845+ficcialfaint@users.noreply.github.com> --- Content.Server/Antag/AntagSelectionSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index f5e6de64e53..8efdc2738b9 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -174,7 +174,7 @@ protected override void Started(EntityUid uid, AntagSelectionComponent component return; var players = _playerManager.Sessions - .Where(x => GameTicker.PlayerGameStatuses[x.UserId] == PlayerGameStatus.JoinedGame) + .Where(x => GameTicker.PlayerGameStatuses.TryGetValue(x.UserId, out var status) && status == PlayerGameStatus.JoinedGame) .ToList(); ChooseAntags((uid, component), players); From ca7e5768be4350d13a0541005ad795b9fb17c2a7 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Mon, 9 Dec 2024 13:42:33 -0400 Subject: [PATCH 122/182] Fix Debug Assert. (#1325) nothin' crazy, just annoying. --- Content.Shared/Interaction/SharedInteractionSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 8d16a352f0d..cc548fd4b16 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -1314,7 +1314,8 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE if (uidB == null || args?.Handled == false) return; - DebugTools.AssertNotEqual(uidA, uidB.Value); + if (uidA == uidB.Value) + return; if (!TryComp(uidA, out MetaDataComponent? metaA) || metaA.EntityPaused) return; From f9133933e72bb9c3f7b5d130fc3c3ceb4358b9cd Mon Sep 17 00:00:00 2001 From: dge21 <129136517+dge21@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:43:13 -0500 Subject: [PATCH 123/182] Fix Melee Weapon Attack Speed (#1330) Description. Melee weapons got swapped from attacks/second to second/attack but the actual attack rate value didn't get changed so weapons got all jumbled. I'm pretty sure I got them all but I might've missed a few in weird folders :cl: - fix: Fixed melee weapons. --------- Signed-off-by: dge21 <129136517+dge21@users.noreply.github.com> Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: VMSolidus --- .../Fun/Instruments/instruments_string.yml | 4 ++-- .../Prototypes/Entities/Objects/Fun/toys.yml | 8 +++---- .../Objects/Materials/crystal_shard.yml | 2 +- .../Entities/Objects/Misc/broken_bottle.yml | 4 ++-- .../Objects/Misc/fire_extinguisher.yml | 4 ++-- .../Entities/Objects/Misc/utensils.yml | 8 +++---- .../Objects/Specific/Chapel/bibles.yml | 2 +- .../Objects/Specific/Hydroponics/tools.yml | 10 ++++----- .../Objects/Specific/Janitorial/janitor.yml | 4 ++-- .../Entities/Objects/Specific/Mech/mechs.yml | 6 ++--- .../Objects/Specific/Medical/surgery.yml | 22 +++++++++---------- .../Objects/Specific/Research/anomaly.yml | 2 +- .../Entities/Objects/Tools/cowtools.yml | 4 ++-- .../Entities/Objects/Tools/flashlights.yml | 4 ++-- .../Entities/Objects/Tools/gas_tanks.yml | 4 ++-- .../Entities/Objects/Tools/jaws_of_life.yml | 4 ++-- .../Entities/Objects/Tools/toolbox.yml | 2 +- .../Entities/Objects/Tools/tools.yml | 16 +++++++------- .../Objects/Weapons/Melee/armblade.yml | 2 +- .../Objects/Weapons/Melee/baseball_bat.yml | 2 +- .../Entities/Objects/Weapons/Melee/cane.yml | 2 +- .../Objects/Weapons/Melee/chainsaw.yml | 4 ++-- .../Entities/Objects/Weapons/Melee/cult.yml | 2 +- .../Objects/Weapons/Melee/e_sword.yml | 4 ++-- .../Objects/Weapons/Melee/fireaxe.yml | 2 +- .../Entities/Objects/Weapons/Melee/knife.yml | 14 ++++++------ .../Objects/Weapons/Melee/pickaxe.yml | 4 ++-- .../Objects/Weapons/Melee/sledgehammer.yml | 2 +- .../Entities/Objects/Weapons/Melee/spear.yml | 2 +- .../Objects/Weapons/Melee/stunprod.yml | 2 +- .../Entities/Objects/Weapons/Melee/sword.yml | 22 +++++++++---------- .../Weapons/Melee/telescopic_baton.yml | 4 ++-- .../Objects/Weapons/Melee/weapon_toolbox.yml | 2 +- .../Objects/Weapons/Melee/white_cane.yml | 4 ++-- .../Entities/Objects/Fun/instruments.yml | 2 +- .../Entities/Objects/Weapons/Melee/blunt.yml | 4 ++-- .../Weapons/Melee/breaching_hammer.yml | 2 +- .../Entities/Objects/Weapons/Melee/dulled.yml | 2 +- .../Entities/Objects/Weapons/Melee/knives.yml | 2 +- .../Entities/Objects/Weapons/Melee/sword.yml | 2 +- .../Entities/Objects/Weapons/Melee/cult.yml | 4 ++-- 41 files changed, 101 insertions(+), 101 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml index e8cf42f68d8..b069b7de721 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml @@ -67,7 +67,7 @@ Blunt: 6 Shock: 1 bluntStaminaDamageFactor: 1.5 - heavyRateModifier: 0.75 + heavyRateModifier: 1.3333 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 angle: 75 @@ -105,7 +105,7 @@ soundHit: path: /Audio/Nyanotrasen/Weapons/electricguitarhit.ogg range: 1.85 - attackRate: 1.25 + attackRate: .8 wideAnimationRotation: 45 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 987c56f0a11..a547f33b59a 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -630,7 +630,7 @@ sprite: Objects/Fun/ducky.rsi state: icon - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 range: 1.5 damage: types: @@ -1387,7 +1387,7 @@ sprite: Objects/Fun/toys.rsi state: foamblade - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 angle: 0 animation: WeaponArcThrust wideAnimationRotation: 90 @@ -1673,7 +1673,7 @@ sprite: Objects/Weapons/Melee/cutlass.rsi state: foam_icon - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 range: 2.0 angle: 0 animation: WeaponArcThrust @@ -1943,7 +1943,7 @@ damage: 0.8 - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 10 + attackRate: .1 damage: types: Blunt: 0 diff --git a/Resources/Prototypes/Entities/Objects/Materials/crystal_shard.yml b/Resources/Prototypes/Entities/Objects/Materials/crystal_shard.yml index 8f522abce42..2880bd00ec4 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/crystal_shard.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/crystal_shard.yml @@ -20,7 +20,7 @@ - type: SpaceGarbage - type: MeleeWeapon wideAnimationRotation: -22.5 - attackRate: 1.5 + attackRate: .6666 damage: types: Slash: 3.5 diff --git a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml index d926609d3ff..dc9ee0d09df 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/broken_bottle.yml @@ -6,12 +6,12 @@ components: - type: Sharp - type: MeleeWeapon - attackRate: 1.4 + attackRate: .71 range: 1.4 damage: types: Slash: 4 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 0.8 heavyDamageBaseModifier: 1.5 heavyStaminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index f3f86a3bd3c..c3b0eebe982 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -38,13 +38,13 @@ hasSafety: true - type: MeleeWeapon wideAnimationRotation: 180 - attackRate: 0.8 + attackRate: 1.25 bluntStaminaDamageFactor: 2.5 range: 1.75 damage: types: Blunt: 8 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 2 heavyStaminaCost: 7.5 maxTargets: 6 diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml index f4aa9ac9678..f15219e1377 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml @@ -31,7 +31,7 @@ - Trash - type: MeleeWeapon wideAnimationRotation: 180 - attackRate: 1.5 + attackRate: .6666 damage: types: Blunt: 0 @@ -53,7 +53,7 @@ - Fork - type: MeleeWeapon wideAnimationRotation: 180 - attackRate: 1.5 + attackRate: .6666 damage: types: Piercing: 5 @@ -100,7 +100,7 @@ - Spoon - type: MeleeWeapon wideAnimationRotation: 180 - attackRate: 1.5 + attackRate: .6666 damage: types: Blunt: 1 @@ -161,7 +161,7 @@ - Spoon - type: MeleeWeapon wideAnimationRotation: 180 - attackRate: 2 + attackRate: .5 damage: types: Blunt: 2 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 61866b149db..7dd0f0b71dd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -45,7 +45,7 @@ types: Blunt: 4 Holy: 20 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1 heavyStaminaCost: 5 maxTargets: 4 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index d281f7bdee9..cf347513fdb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -44,11 +44,11 @@ state: icon - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.8 + attackRate: 1.25 damage: types: Piercing: 7 - heavyRateModifier: 0.9 + heavyRateModifier: 1.1 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 maxTargets: 1 @@ -84,7 +84,7 @@ damage: types: Slash: 7 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.5 heavyStaminaCost: 5 @@ -122,7 +122,7 @@ - type: MeleeWeapon wideAnimationRotation: 135 swingLeft: true - attackRate: 1.25 + attackRate: .8 range: 1.4 damage: types: @@ -161,7 +161,7 @@ types: Blunt: 6 Slash: 2 # I guess you can stab it into them? - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index d39ae845385..2aee628394f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -13,7 +13,7 @@ types: Blunt: 2 bluntStaminaDamageFactor: 3 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.25 heavyStaminaCost: 7.5 @@ -69,7 +69,7 @@ types: Blunt: 2 bluntStaminaDamageFactor: 3 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.25 heavyStaminaCost: 7.5 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 6b5c634e938..9da1e9753fc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -43,7 +43,7 @@ type: MechBoundUserInterface - type: MeleeWeapon hidden: true - attackRate: 0.75 + attackRate: 1.3333 damage: types: Blunt: 25 #thwack @@ -204,7 +204,7 @@ - Hamster - type: MeleeWeapon hidden: true - attackRate: 0.8 + attackRate: 1.25 damage: types: Blunt: 10 #thwack @@ -267,7 +267,7 @@ - VimPilot - type: MeleeWeapon hidden: true - attackRate: 0.8 + attackRate: 1.25 damage: types: Blunt: 10 #thwack diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 79831cab648..f990736d700 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -93,7 +93,7 @@ - 0,0,1,0 - 1,1,1,1 - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 range: 1.4 damage: types: @@ -142,12 +142,12 @@ - type: MeleeWeapon wideAnimationRotation: 90 swingLeft: true - attackRate: 1.25 + attackRate: .8 range: 1.4 damage: types: Slash: 7.5 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.25 heavyStaminaCost: 5 maxTargets: 1 @@ -423,13 +423,13 @@ - Sawing speed: 1.0 - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 range: 1.35 damage: types: Blunt: 2.5 Slash: 6.5 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.0 heavyStaminaCost: 20 maxTargets: 8 @@ -457,13 +457,13 @@ - type: Item heldPrefix: improv - type: MeleeWeapon - attackRate: 0.85 + attackRate: 1.17 damage: types: Blunt: 3 Slash: 7 bluntStaminaDamageFactor: 3 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.0 heavyStaminaCost: 20 maxTargets: 8 @@ -492,14 +492,14 @@ sprite: Objects/Specific/Medical/Surgery/circular-saw.rsi storedRotation: 90 - type: MeleeWeapon - attackRate: 1.15 + attackRate: .86 range: 1.5 bluntStaminaDamageFactor: 3.0 damage: types: Blunt: 4.5 Slash: 5.5 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyDamageBaseModifier: 1 heavyStaminaCost: 10 maxTargets: 8 @@ -535,14 +535,14 @@ heldPrefix: advanced storedRotation: 90 - type: MeleeWeapon - attackRate: 1.15 + attackRate: .86 range: 1.5 bluntStaminaDamageFactor: 5.0 damage: types: Blunt: 4.5 Slash: 7.5 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyDamageBaseModifier: 1 heavyStaminaCost: 10 maxTargets: 8 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 113017cc84a..3c3b2154226 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -129,7 +129,7 @@ - type: Item size: Large - type: MeleeWeapon - attackRate: 0.5 + attackRate: 2 angle: 0 animation: WeaponArcFist wideAnimationRotation: -135 diff --git a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml index 87959ebef3d..399e14cc975 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml @@ -37,7 +37,7 @@ - type: Item sprite: Objects/Tools/Cowtools/moodriver.rsi - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 damage: types: Blunt: 0.1 #poke poke poke @@ -60,7 +60,7 @@ - type: Item sprite: Objects/Tools/Cowtools/wronch.rsi - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 damage: types: Blunt: 0.1 diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index 56d4bba1def..1e10cc7ba06 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -55,7 +55,7 @@ visible: false map: [ "light" ] - type: MeleeWeapon - attackRate: 0.8 + attackRate: 1.25 bluntStaminaDamageFactor: 1.5 damage: types: @@ -119,7 +119,7 @@ map: [ "light" ] - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.8 + attackRate: 1.25 damage: types: Blunt: 6.5 diff --git a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml index eb5e96e22d1..c8e47b6fdae 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml @@ -33,13 +33,13 @@ maxIntensity: 20 - type: MeleeWeapon wideAnimationRotation: 45 - attackRate: 0.8 + attackRate: 1.25 range: 1.75 damage: types: Blunt: 8 bluntStaminaDamageFactor: 2.5 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.5 heavyStaminaCost: 10 maxTargets: 3 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 1ef7dfdc3fb..3beb11f4238 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -44,14 +44,14 @@ changeSound: /Audio/Items/change_jaws.ogg - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.85 + attackRate: 1.17 range: 1.65 damage: types: Blunt: 10 Slash: 2 bluntStaminaDamageFactor: 2.0 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.5 heavyStaminaCost: 5 maxTargets: 1 diff --git a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml index e5de7041a80..fcb41ceef39 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml @@ -21,7 +21,7 @@ - type: Item size: Ginormous - type: MeleeWeapon - attackRate: 0.9 + attackRate: 1.1 range: 1.75 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 17370ea04d8..69af8e4741c 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -31,7 +31,7 @@ - state: cutters-cutty-thingy - type: MeleeWeapon wideAnimationRotation: -90 - attackRate: 0.9 + attackRate: 1.1 range: 1.6 damage: types: @@ -114,7 +114,7 @@ storedRotation: -90 - type: MeleeWeapon wideAnimationRotation: -90 - attackRate: 1.35 + attackRate: .74 damage: types: Piercing: 6 @@ -190,7 +190,7 @@ state: storage - type: MeleeWeapon wideAnimationRotation: 135 - attackRate: 0.9 + attackRate: 1.1 range: 1.6 damage: types: @@ -248,7 +248,7 @@ state: storage - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 damage: types: Blunt: 6 @@ -312,7 +312,7 @@ - state: green-unlit shader: unshaded - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 damage: types: Shock: 2 @@ -456,7 +456,7 @@ price: 100 - type: MeleeWeapon wideAnimationRotation: -90 - attackRate: 0.9 + attackRate: 1.1 range: 1.4 damage: types: @@ -685,7 +685,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: 45 - attackRate: 0.8 + attackRate: 1.25 range: 1.75 damage: types: @@ -738,7 +738,7 @@ - Belt - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.9 + attackRate: 1.1 damage: types: Blunt: 7 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml index 2d31e4372a0..de22ef22c74 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml @@ -10,7 +10,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 0.75 + attackRate: 1.3333 damage: types: Slash: 25 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index 0c47eed9871..60ba7aa2c30 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -15,7 +15,7 @@ Blunt: 7.5 Structural: 5 bluntStaminaDamageFactor: 2.0 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyDamageBaseModifier: 1.75 heavyStaminaCost: 10 maxTargets: 2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml index bc252fddbc6..c2b9ac7a76c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml @@ -39,7 +39,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: 65 - attackRate: 1.5 + attackRate: .6666 damage: types: Slash: 14 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml index d69173ff462..9fb4af58fec 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml @@ -16,13 +16,13 @@ - type: MeleeWeapon autoAttack: true wideAnimationRotation: -135 - attackRate: 4 + attackRate: .25 damage: types: Slash: 2 Blunt: 2 Structural: 4 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyDamageBaseModifier: 1.0 heavyStaminaCost: 15 maxTargets: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index 045d5e3e6d3..c32563623a7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -13,7 +13,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.85 + attackRate: 1.17 range: 1.75 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 04562d171cd..59c6d63c6e1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -57,7 +57,7 @@ map: [ "blade" ] - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 damage: types: Blunt: 4.5 @@ -321,7 +321,7 @@ - type: Wieldable - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.5 + attackRate: .6666 angle: 100 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index 52a2c7a207a..df060c2503e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -14,7 +14,7 @@ - type: MeleeWeapon wideAnimationRotation: 135 swingLeft: true - attackRate: 0.75 + attackRate: 1.3333 damage: types: # axes are kinda like sharp hammers, you know? diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 51077687e07..8d6496e013f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -12,12 +12,12 @@ - Knife - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 range: 1.5 damage: types: Slash: 8 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.2 maxTargets: 3 angle: 40 @@ -111,7 +111,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.5 + attackRate: .6666 damage: types: Slash: 9 @@ -133,7 +133,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 damage: types: Slash: 8 @@ -174,7 +174,7 @@ node: icon - type: MeleeWeapon wideAnimationRotation: 90 - attackRate: 1.2 + attackRate: .83 damage: types: Slash: 5 @@ -218,7 +218,7 @@ sprite: Objects/Weapons/Melee/shiv.rsi state: icon - type: MeleeWeapon - attackRate: 1.75 + attackRate: .57 range: 1.4 damage: types: @@ -300,7 +300,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 2 + attackRate: .5 damage: types: Slash: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 69b4c81a3e1..ff01e5692eb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -11,7 +11,7 @@ sprite: Objects/Weapons/Melee/pickaxe.rsi state: pickaxe - type: MeleeWeapon - attackRate: 0.85 + attackRate: 1.17 range: 1.5 wideAnimationRotation: -135 soundHit: @@ -62,7 +62,7 @@ wideAnimationRotation: -90 soundHit: path: "/Audio/Items/drill_hit.ogg" - attackRate: 1.2 + attackRate: .83 range: 1.5 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index 09b0d0761e3..99592e6a0fc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -9,7 +9,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.75 + attackRate: 1.3333 range: 1.75 damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index b650343f75c..ca5efc2daf4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -41,7 +41,7 @@ types: Piercing: 7 Slash: 1 - heavyRateModifier: 0.75 + heavyRateModifier: 1.3 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.0 heavyStaminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index 9fb2ef9e8c8..6680c2a2c00 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -37,7 +37,7 @@ types: Blunt: 7.5 bluntStaminaDamageFactor: 2.0 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyDamageBaseModifier: 1.2 animation: WeaponArcThrust - type: DamageOtherOnHit diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index be0a4241270..2da3d3bb92e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -10,14 +10,14 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 range: 1.75 soundHit: path: /Audio/SimpleStation14/Weapons/Melee/rapierhit.ogg damage: types: Slash: 15 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1 heavyDamageBaseModifier: 1 heavyStaminaCost: 5 @@ -61,13 +61,13 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.5 + attackRate: .6666 soundHit: path: /Audio/SimpleStation14/Weapons/Melee/rapierhit.ogg damage: types: Slash: 12 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyRangeModifier: 2.75 #Superior Japanese folded steel heavyDamageBaseModifier: 1.25 heavyStaminaCost: 15 @@ -135,11 +135,11 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.8 + attackRate: 1.25 damage: types: Slash: 15 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.25 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 @@ -169,14 +169,14 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.65 + attackRate: 1.53 range: 1.85 damage: types: Slash: 19 Blunt: 1 bluntStaminaDamageFactor: 25.0 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyRangeModifier: 1 heavyDamageBaseModifier: 1 heavyStaminaCost: 15 @@ -213,11 +213,11 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.25 + attackRate: .8 damage: types: Slash: 12 - heavyRateModifier: 0.8 + heavyRateModifier: 1.25 heavyRangeModifier: 1.2 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 7.5 @@ -248,7 +248,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 10 + attackRate: .1 damage: types: Structural: 150 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml index a1006a589a2..7851a9403b4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/telescopic_baton.yml @@ -36,7 +36,7 @@ duration: 1.5 dropHeldItemsBehavior: NoDrop - type: MeleeWeapon - attackRate: 0.8 + attackRate: 1.25 bluntStaminaDamageFactor: 1.5 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 5 @@ -67,7 +67,7 @@ - type: KnockdownOnHit duration: 60 # - type: MeleeWeapon - attackRate: 1.2 + attackRate: .83 - type: ItemToggleMeleeWeapon activatedDamage: types: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml index 240a17a0a44..408e3c65628 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml @@ -13,7 +13,7 @@ sprite: Objects/Tools/Toolboxes/toolbox_red.rsi - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.5 + attackRate: .6 damage: types: Blunt: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml index 749be946a2c..ec744764bec 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml @@ -12,13 +12,13 @@ sprite: Objects/Weapons/Melee/white_cane.rsi - type: MeleeWeapon wideAnimationRotation: 45 - attackRate: 0.9 + attackRate: 1.1 range: 1.6 damage: types: Blunt: 6 bluntStaminaDamageFactor: 2.5 - heavyRateModifier: 0.5 + heavyRateModifier: 2 heavyRangeModifier: 1.75 heavyDamageBaseModifier: 1.2 heavyStaminaCost: 0 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml index 3964a9f0b04..764ff9ed667 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml @@ -43,7 +43,7 @@ soundHit: path: /Audio/Nyanotrasen/Weapons/electricguitarhit.ogg bluntStaminaDamageFactor: 4.5 - attackRate: 1.25 + attackRate: .8 range: 1.85 damage: types: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml index 1b163fe1988..f7b3dacb773 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml @@ -10,7 +10,7 @@ - type: Item size: Normal - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 range: 1.75 damage: types: @@ -44,7 +44,7 @@ sprite: Nyanotrasen/Objects/Weapons/Melee/shinai.rsi state: icon - type: MeleeWeapon - attackRate: 1.25 + attackRate: .8 range: 1.75 bluntStaminaDamageFactor: 2.0 damage: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml index 316b00d7fd3..2c6bba1cbef 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml @@ -10,7 +10,7 @@ - type: Item size: Huge - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 range: 1.70 damage: types: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml index 83e7a7dbd0e..4fd986190fe 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml @@ -35,7 +35,7 @@ sprite: Objects/Weapons/Melee/claymore.rsi state: icon - type: MeleeWeapon - attackRate: 0.75 + attackRate: 1.3333 damage: types: Blunt: 6 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml index 4ac4dacdc5c..b2ee1bcfdce 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml @@ -5,7 +5,7 @@ description: A special knife designed for killing psychics. components: - type: MeleeWeapon - attackRate: 1.5 + attackRate: .6666 damage: types: Slash: 10 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml index c01b328bc79..8335bf53f51 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml @@ -15,7 +15,7 @@ sprite: Nyanotrasen/Objects/Weapons/Melee/wakizashi.rsi state: icon - type: MeleeWeapon - attackRate: 2 + attackRate: .5 damage: types: Slash: 12 diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml index eb43cd2e7f4..23ff76bbc58 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -51,7 +51,7 @@ state: icon - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 0.75 + attackRate: 1.3333 range: 1.65 damage: types: @@ -119,7 +119,7 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg range: 2 - attackRate: 0.7 + attackRate: 1.42 - type: DamageOtherOnHit damage: types: From 1592c0e225593707d03626f24e009ad089631e49 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Tue, 10 Dec 2024 00:43:42 +0000 Subject: [PATCH 124/182] Automatic Changelog Update (#1330) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1efe44867a5..b23ce5adc69 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8529,3 +8529,10 @@ Entries: id: 6567 time: '2024-12-08T03:30:08.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1307 +- author: dge21 + changes: + - type: Fix + message: 'Fixed melee weapons. ' + id: 6568 + time: '2024-12-10T00:43:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1330 From 34209e69c0251e279a7090bbd097825ffae70fde Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Mon, 9 Dec 2024 20:45:42 -0400 Subject: [PATCH 125/182] CVar CharacterRequirement (#1322) # Description This takes in one CVar and one required value and simply checks if the CVar's value as a string is equal to the required value. I could make it use a list of them, but I really didn't think it was needed considering CharacterAndLogic. I also cleaned up CharacterRequirements.Profile.cs a bit. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: VMSolidus Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- .../Systems/CharacterRequirements.Misc.cs | 55 +++++++ .../Systems/CharacterRequirements.Profile.cs | 154 +++++++++++------- .../customization/character-requirements.ftl | 8 + 3 files changed, 156 insertions(+), 61 deletions(-) create mode 100644 Content.Shared/Customization/Systems/CharacterRequirements.Misc.cs diff --git a/Content.Shared/Customization/Systems/CharacterRequirements.Misc.cs b/Content.Shared/Customization/Systems/CharacterRequirements.Misc.cs new file mode 100644 index 00000000000..f13cb94f397 --- /dev/null +++ b/Content.Shared/Customization/Systems/CharacterRequirements.Misc.cs @@ -0,0 +1,55 @@ +using Content.Shared.Customization.Systems; +using Content.Shared.Preferences; +using Content.Shared.Roles; +using JetBrains.Annotations; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Customization.Systems; + +/// +/// Requires the server to have a specific CVar value. +/// +[UsedImplicitly, Serializable, NetSerializable,] +public sealed partial class CVarRequirement : CharacterRequirement +{ + [DataField("cvar", required: true)] + public string CVar; + + [DataField(required: true)] + public string RequiredValue; + + public override bool IsValid( + JobPrototype job, + HumanoidCharacterProfile profile, + Dictionary playTimes, + bool whitelisted, + IPrototype prototype, + IEntityManager entityManager, + IPrototypeManager prototypeManager, + IConfigurationManager configManager, + out string? reason, + int depth = 0 + ) + { + if (!configManager.IsCVarRegistered(CVar)) + { + reason = null; + return true; + } + + const string color = "lightblue"; + var cvar = configManager.GetCVar(CVar); + var isValid = cvar.ToString()! == RequiredValue; + + reason = Loc.GetString( + "character-cvar-requirement", + ("inverted", Inverted), + ("color", color), + ("cvar", CVar), + ("value", RequiredValue)); + + return isValid; + } +} diff --git a/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs b/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs index 5e10c504932..d250b46b1a8 100644 --- a/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs +++ b/Content.Shared/Customization/Systems/CharacterRequirements.Profile.cs @@ -12,7 +12,6 @@ using Robust.Shared.Physics; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; namespace Content.Shared.Customization.Systems; @@ -20,8 +19,7 @@ namespace Content.Shared.Customization.Systems; /// /// Requires the profile to be within an age range /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterAgeRequirement : CharacterRequirement { [DataField(required: true)] @@ -30,7 +28,8 @@ public sealed partial class CharacterAgeRequirement : CharacterRequirement [DataField(required: true)] public int Max; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -39,10 +38,14 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { - reason = Loc.GetString("character-age-requirement", - ("inverted", Inverted), ("min", Min), ("max", Max)); + reason = Loc.GetString( + "character-age-requirement", + ("inverted", Inverted), + ("min", Min), + ("max", Max)); return profile.Age >= Min && profile.Age <= Max; } } @@ -50,14 +53,14 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to be a certain gender /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterGenderRequirement : CharacterRequirement { [DataField(required: true)] public Gender Gender; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -66,9 +69,11 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { - reason = Loc.GetString("character-gender-requirement", + reason = Loc.GetString( + "character-gender-requirement", ("inverted", Inverted), ("gender", Loc.GetString($"humanoid-profile-editor-pronouns-{Gender.ToString().ToLower()}-text"))); return profile.Gender == Gender; @@ -78,14 +83,14 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to be a certain sex /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterSexRequirement : CharacterRequirement { [DataField(required: true)] public Sex Sex; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -94,9 +99,11 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { - reason = Loc.GetString("character-sex-requirement", + reason = Loc.GetString( + "character-sex-requirement", ("inverted", Inverted), ("sex", Loc.GetString($"humanoid-profile-editor-sex-{Sex.ToString().ToLower()}-text"))); return profile.Sex == Sex; @@ -106,14 +113,14 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to be a certain species /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterSpeciesRequirement : CharacterRequirement { [DataField(required: true)] public List> Species; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -122,10 +129,12 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "green"; - reason = Loc.GetString("character-species-requirement", + reason = Loc.GetString( + "character-species-requirement", ("inverted", Inverted), ("species", $"[color={color}]{string.Join($"[/color], [color={color}]", Species.Select(s => Loc.GetString(prototypeManager.Index(s).Name)))}[/color]")); @@ -135,10 +144,9 @@ public override bool IsValid(JobPrototype job, } /// -/// Requires the profile to be within a certain height range +/// Requires the profile to be within a certain height range /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterHeightRequirement : CharacterRequirement { /// @@ -153,7 +161,8 @@ public sealed partial class CharacterHeightRequirement : CharacterRequirement [DataField] public float Max = int.MaxValue; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -162,13 +171,18 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "yellow"; var species = prototypeManager.Index(profile.Species); - reason = Loc.GetString("character-height-requirement", - ("inverted", Inverted), ("color", color), ("min", Min), ("max", Max)); + reason = Loc.GetString( + "character-height-requirement", + ("inverted", Inverted), + ("color", color), + ("min", Min), + ("max", Max)); var height = profile.Height * species.AverageHeight; return height >= Min && height <= Max; @@ -178,8 +192,7 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to be within a certain width range /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterWidthRequirement : CharacterRequirement { /// @@ -194,7 +207,8 @@ public sealed partial class CharacterWidthRequirement : CharacterRequirement [DataField] public float Max = int.MaxValue; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -203,13 +217,18 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "yellow"; var species = prototypeManager.Index(profile.Species); - reason = Loc.GetString("character-width-requirement", - ("inverted", Inverted), ("color", color), ("min", Min), ("max", Max)); + reason = Loc.GetString( + "character-width-requirement", + ("inverted", Inverted), + ("color", color), + ("min", Min), + ("max", Max)); var width = profile.Width * species.AverageWidth; return width >= Min && width <= Max; @@ -219,8 +238,7 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to be within a certain weight range /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterWeightRequirement : CharacterRequirement { /// @@ -235,7 +253,8 @@ public sealed partial class CharacterWeightRequirement : CharacterRequirement [DataField] public float Max = int.MaxValue; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -244,7 +263,8 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "green"; var species = prototypeManager.Index(profile.Species); @@ -259,28 +279,32 @@ public override bool IsValid(JobPrototype job, var weight = MathF.Round( MathF.PI * MathF.Pow( fixture.Fixtures["fix1"].Shape.Radius - * ((profile.Width + profile.Height) / 2), 2) - * fixture.Fixtures["fix1"].Density); + * ((profile.Width + profile.Height) / 2), + 2) + * fixture.Fixtures["fix1"].Density); - reason = Loc.GetString("character-weight-requirement", - ("inverted", Inverted), ("color", color), ("min", Min), ("max", Max)); + reason = Loc.GetString( + "character-weight-requirement", + ("inverted", Inverted), + ("color", color), + ("min", Min), + ("max", Max)); return weight >= Min && weight <= Max; } } - /// /// Requires the profile to have one of the specified traits /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterTraitRequirement : CharacterRequirement { [DataField(required: true)] public List> Traits; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -289,10 +313,12 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "lightblue"; - reason = Loc.GetString("character-trait-requirement", + reason = Loc.GetString( + "character-trait-requirement", ("inverted", Inverted), ("traits", $"[color={color}]{string.Join($"[/color], [color={color}]", Traits.Select(t => Loc.GetString($"trait-name-{t}")))}[/color]")); @@ -304,14 +330,14 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to have one of the specified loadouts /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterLoadoutRequirement : CharacterRequirement { [DataField(required: true)] public List> Loadouts; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -320,10 +346,12 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { const string color = "lightblue"; - reason = Loc.GetString("character-loadout-requirement", + reason = Loc.GetString( + "character-loadout-requirement", ("inverted", Inverted), ("loadouts", $"[color={color}]{string.Join($"[/color], [color={color}]", Loadouts.Select(l => Loc.GetString($"loadout-name-{l}")))}[/color]")); @@ -335,14 +363,14 @@ public override bool IsValid(JobPrototype job, /// /// Requires the profile to not have any more than X of the specified traits, loadouts, etc, in a group /// -[UsedImplicitly] -[Serializable, NetSerializable] +[UsedImplicitly, Serializable, NetSerializable] public sealed partial class CharacterItemGroupRequirement : CharacterRequirement { [DataField(required: true)] public ProtoId Group; - public override bool IsValid(JobPrototype job, + public override bool IsValid( + JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, @@ -351,23 +379,27 @@ public override bool IsValid(JobPrototype job, IPrototypeManager prototypeManager, IConfigurationManager configManager, out string? reason, - int depth = 0) + int depth = 0 + ) { var group = prototypeManager.Index(Group); // Get the count of items in the group that are in the profile - var items = group.Items.Select(item => item.TryGetValue(profile, prototypeManager, out _) ? item.ID : null).Where(id => id != null).ToList(); + var items = group.Items.Select(item => item.TryGetValue(profile, prototypeManager, out _) ? item.ID : null) + .Where(id => id != null) + .ToList(); var count = items.Count; // If prototype is selected, remove one from the count if (items.ToList().Contains(prototype.ID)) count--; - reason = Loc.GetString("character-item-group-requirement", + reason = Loc.GetString( + "character-item-group-requirement", ("inverted", Inverted), ("group", Loc.GetString($"character-item-group-{Group}")), ("max", group.MaxItems)); return count < group.MaxItems; } -} +} \ No newline at end of file diff --git a/Resources/Locale/en-US/customization/character-requirements.ftl b/Resources/Locale/en-US/customization/character-requirements.ftl index d50c2b39669..900e15ea66e 100644 --- a/Resources/Locale/en-US/customization/character-requirements.ftl +++ b/Resources/Locale/en-US/customization/character-requirements.ftl @@ -140,3 +140,11 @@ character-whitelist-requirement = You must{$inverted -> [true]{" "}not *[other]{""} } be whitelisted + +## CVar + +character-cvar-requirement = + The server must{$inverted -> + [true]{" "}not + *[other]{""} +} have [color={$color}]{$cvar}[/color] set to [color={$color}]{$value}[/color]. From 49b9c34f66528c92303fb3bf6dd8f8db55c435b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:55:10 -0800 Subject: [PATCH 126/182] Update Credits (#1326) This is an automated Pull Request. This PR updates the GitHub contributors in the credits section. Co-authored-by: SimpleStation Changelogs Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- 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 7438cefecad..0ec128c6fd8 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Aerocrux, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, Aidenkrz, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, armoks, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedPugilist, BasedUser, beck-thompson, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, bloodrizer, Bloody2372, blueDev2, BlueHNT, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, BYONDFuckery, c0rigin, c4llv07e, CaasGit, CakeQ, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, CilliePaint, civilCornball, clorl, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DeltaV-Bot, DerbyX, derek, dersheppard, dexlerxd, dffdff2423, dge21, digitalic, DinoWattz, DJB1gYAPPA, DjfjdfofdjfjD, DocNITE, DoctorBeard, DogZeroX, dolgovmi, dontbetank, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, drakewill-CRL, Drayff, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, Dutch-VanDerLinde, dvir001, dylanstrategie, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Emisse, emmafornash, EmoGarbage404, Endecc, enumerate0, eoineoineoin, eris, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, Evgencheg, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, Fansana, Feluk6174, fenndragon, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, FluffiestFloof, FluffMe, FluidRock, flybik, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, FoxxoTrystan, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, GalacticChimp, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, ghost581x, Git-Nivrak, gituhabu, GlassEclipse, gluesniffler, GNF54, Golinth, GoodWheatley, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, h3half, Haltell, Hanzdegloker, Hardly3D, harikattar, Hebi, Henry, HerCoyote23, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, icekot8, icesickleone, Ichaie, iczero, iglov, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jjtParadox, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justin, justintether, JustinTrotter, justtne, k3yw, Kadeo64, KaiShibaa, kalane15, kalanosh, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, komunre, koteq, Krunklehorn, Kukutis96513, Kupie, kxvvv, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, Leander-0, leonardo-dabepis, leonsfriedrich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, Lomcastar, LordCarve, LordEclipse, LovelyLophi, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, michaelcu, micheel665, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, MLGTASTICa, Mnemotechnician, moderatelyaware, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, namespace-Memory, Nannek, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, not-gavnaed, notafet, notquitehadouken, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OCOtheOmega, OctoRocket, OldDanceJacket, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixelTheKermit, PJB3005, Plasmaguy, PlasmaRaptor, plinyvic, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, Rinkashikachi, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, router, RumiTiger, S1ss3l, Saakra, Salex08, sam, Samsterious, SaphireLattice, SapphicOverload, SaveliyM360, sBasalto, ScalyChimp, scrato, Scribbles0, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, ShadowCommander, shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, siyengar04, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, sleepyyapril, Slyfox333, snebl, sniperchance, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, Spatison, SpeltIncorrectyl, sphirai, SplinterGP, spoogemonster, sporekto, Squishy77, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, suraru, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, takemysoult, TaralGit, Taran, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, theOperand, TherapyGoth, TheShuEd, thevinter, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, tin-man-tim, Tirochora, Titian3, tk-a369, tkdrg, Tmanzxd, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, Tornado-Technology, tosatur, TotallyLemon, truepaintgit, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, unusualcrow, Uriende, UristMcDorf, user424242420, v0idRift, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, volotomite, volundr-, Voomra, Vordenburg, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, yunii, yuriykiss, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, zelezniciar1, ZelteHonor, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zymem, zzylex +0x6273, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Aerocrux, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, Aidenkrz, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, AlmondFlour, ALMv1, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, armoks, Arteben, ArthurMousatov, AruMoon, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, avghdev, AzzyIsNotHere, BananaFlambe, BasedPugilist, BasedUser, beck-thompson, benev0, BGare, bhespiritu, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, bloodrizer, Bloody2372, blueDev2, BlueHNT, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, BYONDFuckery, c0rigin, c4llv07e, CaasGit, CakeQ, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, CilliePaint, civilCornball, clorl, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, coolmankid12345, corentt, CormosLemming, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, d4kii, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, Deeeeja, deepdarkdepths, degradka, Delete69, deltanedas, DeltaV-Bot, DerbyX, derek, dersheppard, dexlerxd, dffdff2423, dge21, digitalic, DinoWattz, DJB1gYAPPA, DjfjdfofdjfjD, DocNITE, DoctorBeard, DogZeroX, dolgovmi, dontbetank, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, drakewill-CRL, Drayff, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, Dutch-VanDerLinde, dvir001, dylanstrategie, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Emisse, emmafornash, EmoGarbage404, Endecc, enumerate0, eoineoineoin, eris, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, Evgencheg, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, Fansana, Feluk6174, fenndragon, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, FluffiestFloof, FluffMe, FluidRock, flybik, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, FoxxoTrystan, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, GalacticChimp, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, ghost581x, Git-Nivrak, gituhabu, GlassEclipse, gluesniffler, GNF54, Golinth, GoodWheatley, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, h3half, Haltell, Hanzdegloker, Hardly3D, harikattar, Hebi, Henry, HerCoyote23, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, icekot8, icesickleone, Ichaie, iczero, iglov, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, Itzbenz, Jackal298, Jackrost, jacksonzck, Jackw2As, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jjtParadox, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justin, justintether, JustinTrotter, justtne, k3yw, Kadeo64, KaiShibaa, kalane15, kalanosh, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, komunre, koteq, Krunklehorn, Kukutis96513, Kupie, kxvvv, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, Leander-0, leonardo-dabepis, leonsfriedrich, lettern, LetterN, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, Lomcastar, LordCarve, LordEclipse, LovelyLophi, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, MehimoNemo, MeltedPixel, MemeProof, MendaxxDev, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, michaelcu, micheel665, MilenVolf, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, MLGTASTICa, Mnemotechnician, moderatelyaware, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, namespace-Memory, Nannek, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, not-gavnaed, notafet, notquitehadouken, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, och-och, OCOtheOmega, OctoRocket, OldDanceJacket, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixelTheKermit, PJB3005, Plasmaguy, PlasmaRaptor, plinyvic, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QuietlyWhisper, qwerltaz, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, Rinkashikachi, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, router, RumiTiger, S1ss3l, Saakra, Salex08, sam, Samsterious, SaphireLattice, SapphicOverload, SaveliyM360, sBasalto, ScalyChimp, scrato, Scribbles0, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, ShadowCommander, shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, siyengar04, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, SleepyScarecrow, sleepyyapril, Slyfox333, snebl, sniperchance, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceRox1244, SpaceyLady, spartak, SpartanKadence, Spatison, SpeltIncorrectyl, sphirai, SplinterGP, spoogemonster, sporekto, Squishy77, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, suraru, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, takemysoult, TaralGit, Taran, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TherapyGoth, TheShuEd, thevinter, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, tin-man-tim, Tirochora, Titian3, tk-a369, tkdrg, Tmanzxd, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, Tornado-Technology, tosatur, TotallyLemon, truepaintgit, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, unusualcrow, Uriende, UristMcDorf, user424242420, v0idRift, Vaaankas, valentfingerov, Varen, VasilisThePikachu, veliebm, VelonacepsCalyxEggs, veprolet, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, VMSolidus, volotomite, volundr-, Voomra, Vordenburg, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, waylon531, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, WTCWR68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, zelezniciar1, ZelteHonor, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, Zymem, zzylex From 6b1feac3b12fecb33cfb7e30354347e8443b9c41 Mon Sep 17 00:00:00 2001 From: stellar-novas Date: Tue, 10 Dec 2024 14:13:47 -0500 Subject: [PATCH 127/182] Back Out "Flash Now Flashes Black Instead of White. (#14642)" (#1331) Original commit changeset: c3dcc7a12464 # Description Dark flash is cowardly. Billions must be flashbanged irl # Changelog :cl: - tweak: Flashes are bright again! --- Resources/Textures/Shaders/flashed_effect.swsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Shaders/flashed_effect.swsl b/Resources/Textures/Shaders/flashed_effect.swsl index ec486ab5313..67dc67b185e 100644 --- a/Resources/Textures/Shaders/flashed_effect.swsl +++ b/Resources/Textures/Shaders/flashed_effect.swsl @@ -12,7 +12,7 @@ void fragment() { highp vec4 textureMix = mix(tex1, tex2, 0.5); // Gradually mixes between the texture mix and a full-white texture, causing the "blinding" effect - highp vec4 mixed = mix(vec4(0.0, 0.0, 0.0, 1.0), textureMix, percentComplete); + highp vec4 mixed = mix(vec4(1.0, 1.0, 1.0, 1.0), textureMix, percentComplete); COLOR = vec4(mixed.rgb, remaining); } From 48951ffc83393b6d0d007283206efc8af678c92a Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Tue, 10 Dec 2024 19:14:18 +0000 Subject: [PATCH 128/182] Automatic Changelog Update (#1331) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b23ce5adc69..25ed44abaf0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8536,3 +8536,10 @@ Entries: id: 6568 time: '2024-12-10T00:43:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1330 +- author: stellar-novas + changes: + - type: Tweak + message: Flashes are bright again! + id: 6569 + time: '2024-12-10T19:13:47.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1331 From 142ff101a3e7794250bd91422db7c3dbabcf1161 Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 10 Dec 2024 14:09:02 -0500 Subject: [PATCH 129/182] Nix housekeeping --- .envrc | 6 +++--- flake.lock | 14 +++++++------- flake.nix | 23 ++++++++++++++++------- shell.nix | 21 +++++++++++++-------- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/.envrc b/.envrc index 7fd05db3e5e..d2ab6182d8b 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,4 @@ -if ! has nix_direnv_version || ! nix_direnv_version 3.0.4; then - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.4/direnvrc" "sha256-DzlYZ33mWF/Gs8DDeyjr8mnVmQGx7ASYqA5WlxwvBG4=" +if ! has nix_direnv_version || ! nix_direnv_version 3.0.6; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.6/direnvrc" "sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM=" fi -use flake +use nix diff --git a/flake.lock b/flake.lock index 40a98aa9f96..c4c230f008d 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,16 +20,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1723382296, - "narHash": "sha256-55jPcSyBPG77QysozW12H0VA0E56PJYS+duYndDUNLg=", + "lastModified": 1733808091, + "narHash": "sha256-KWwINTQelKOoQgrXftxoqxmKFZb9pLVfnRvK270nkVk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a5d81094146e6b042c4e5f4c5e179c5c35c3ae28", + "rev": "a0f3e10d94359665dba45b71b4227b0aeb851f8e", "type": "github" }, "original": { "owner": "NixOS", - "ref": "release-24.05", + "ref": "release-24.11", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 095e6b017c7..9f481746ca8 100644 --- a/flake.nix +++ b/flake.nix @@ -1,13 +1,22 @@ { description = "Development environment for Space Station 14"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-24.05"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-24.11"; inputs.flake-utils.url = "github:numtide/flake-utils"; - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem (system: let - pkgs = nixpkgs.legacyPackages.${system}; - in { - devShells.default = import ./shell.nix { inherit pkgs; }; - }); + outputs = + { + self, + nixpkgs, + flake-utils, + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + devShells.default = import ./shell.nix { inherit pkgs; }; + } + ); } diff --git a/shell.nix b/shell.nix index ce17c6acea9..40f08e784df 100644 --- a/shell.nix +++ b/shell.nix @@ -1,9 +1,14 @@ -{ pkgs ? (let lock = builtins.fromJSON (builtins.readFile ./flake.lock); -in import (builtins.fetchTarball { - url = - "https://github.com/NixOS/nixpkgs/archive/${lock.nodes.nixpkgs.locked.rev}.tar.gz"; - sha256 = lock.nodes.nixpkgs.locked.narHash; -}) { }) }: +{ + pkgs ? ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + in + import (builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/${lock.nodes.nixpkgs.locked.rev}.tar.gz"; + sha256 = lock.nodes.nixpkgs.locked.narHash; + }) { } + ), +}: let dependencies = with pkgs; [ @@ -40,9 +45,9 @@ let alsa-lib dbus at-spi2-core - cups ]; -in pkgs.mkShell { +in +pkgs.mkShell { name = "space-station-14-devshell"; buildInputs = [ pkgs.gtk3 ]; packages = dependencies; From 3e9387686105cc7a0928e65682b8075f7e7737f4 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 11 Dec 2024 17:45:57 -0500 Subject: [PATCH 130/182] Port N14 Mapper Assets (#1315) # Description By request from Old Dance Jacket, who wanted to be able to use N14 Mapping Assets in SS14. We should probably trim this list down for what assets aren't actually needed (Any asset that is 100% unique to Fallout for instance) # Changelog :cl: - add: Added a large number of mapping assets from Nuclear14 --- .../Structures/Decoration/floordecor.yml | 720 ++++++++++++++++++ .../Entities/Structures/Decoration/rails.yml | 95 +++ .../Structures/Decoration/torches.yml | 73 ++ .../Entities/Structures/Storage/barrels.yml | 287 +++++++ .../Entities/Structures/Storage/closets.yml | 228 ++++++ .../Entities/Structures/Storage/crates.yml | 227 ++++++ .../Entities/Structures/Storage/furniture.yml | 49 ++ .../Entities/Structures/Storage/tanks.yml | 182 +++++ .../Entities/Structures/Wallmount/adverts.yml | 19 + .../Structures/Wallmount/base_lighting.yml | 43 ++ .../Wallmount/monitors_televisions.yml | 54 ++ .../Structures/Wallmount/noticeboard.yml | 63 ++ .../Entities/Structures/Wallmount/signs.yml | 154 ++++ .../Structures/Wallmount/wallmounts.yml | 45 ++ .../Structures/Decoration/barrels.rsi/.png | Bin 0 -> 392 bytes .../Decoration/barrels.rsi/double_grey_1.png | Bin 0 -> 589 bytes .../Decoration/barrels.rsi/double_grey_2.png | Bin 0 -> 585 bytes .../Decoration/barrels.rsi/double_red_1.png | Bin 0 -> 596 bytes .../Decoration/barrels.rsi/double_red_2.png | Bin 0 -> 611 bytes .../Decoration/barrels.rsi/double_toxic_1.png | Bin 0 -> 756 bytes .../Decoration/barrels.rsi/double_waste_1.png | Bin 0 -> 867 bytes .../Decoration/barrels.rsi/double_waste_2.png | Bin 0 -> 778 bytes .../barrels.rsi/double_yellow_1.png | Bin 0 -> 604 bytes .../barrels.rsi/double_yellow_2.png | Bin 0 -> 586 bytes .../Decoration/barrels.rsi/flammable_1.png | Bin 0 -> 606 bytes .../Decoration/barrels.rsi/flammable_2.png | Bin 0 -> 676 bytes .../Decoration/barrels.rsi/flammable_3.png | Bin 0 -> 629 bytes .../Decoration/barrels.rsi/grey_1.png | Bin 0 -> 458 bytes .../Decoration/barrels.rsi/grey_2.png | Bin 0 -> 511 bytes .../Decoration/barrels.rsi/grey_3.png | Bin 0 -> 443 bytes .../Decoration/barrels.rsi/hazard_1.png | Bin 0 -> 565 bytes .../Decoration/barrels.rsi/hazard_2.png | Bin 0 -> 615 bytes .../Decoration/barrels.rsi/hazard_3.png | Bin 0 -> 540 bytes .../Decoration/barrels.rsi/label_1.png | Bin 0 -> 528 bytes .../Decoration/barrels.rsi/label_2.png | Bin 0 -> 589 bytes .../Decoration/barrels.rsi/label_3.png | Bin 0 -> 550 bytes .../Decoration/barrels.rsi/meta.json | 191 +++++ .../Decoration/barrels.rsi/quad_grey_1.png | Bin 0 -> 608 bytes .../Decoration/barrels.rsi/quad_red_1.png | Bin 0 -> 694 bytes .../Decoration/barrels.rsi/quad_red_2.png | Bin 0 -> 615 bytes .../Decoration/barrels.rsi/quad_toxic_1.png | Bin 0 -> 803 bytes .../Decoration/barrels.rsi/quad_waste_1.png | Bin 0 -> 796 bytes .../Decoration/barrels.rsi/quad_yellow_1.png | Bin 0 -> 566 bytes .../Decoration/barrels.rsi/red_1.png | Bin 0 -> 482 bytes .../Decoration/barrels.rsi/red_2.png | Bin 0 -> 534 bytes .../Decoration/barrels.rsi/red_3.png | Bin 0 -> 452 bytes .../Decoration/barrels.rsi/red_alt_1.png | Bin 0 -> 591 bytes .../Decoration/barrels.rsi/red_alt_2.png | Bin 0 -> 660 bytes .../Decoration/barrels.rsi/red_alt_3.png | Bin 0 -> 586 bytes .../Decoration/barrels.rsi/toxic_1.png | Bin 0 -> 593 bytes .../Decoration/barrels.rsi/toxic_2.png | Bin 0 -> 731 bytes .../Decoration/barrels.rsi/toxic_3.png | Bin 0 -> 701 bytes .../Decoration/barrels.rsi/toxic_4.png | Bin 0 -> 907 bytes .../Decoration/barrels.rsi/triple_grey_1.png | Bin 0 -> 649 bytes .../Decoration/barrels.rsi/triple_grey_2.png | Bin 0 -> 662 bytes .../Decoration/barrels.rsi/triple_grey_3.png | Bin 0 -> 694 bytes .../Decoration/barrels.rsi/triple_red_1.png | Bin 0 -> 655 bytes .../Decoration/barrels.rsi/triple_red_2.png | Bin 0 -> 665 bytes .../Decoration/barrels.rsi/triple_toxic_1.png | Bin 0 -> 860 bytes .../Decoration/barrels.rsi/triple_toxic_2.png | Bin 0 -> 923 bytes .../Decoration/barrels.rsi/triple_waste_1.png | Bin 0 -> 851 bytes .../Decoration/barrels.rsi/triple_waste_2.png | Bin 0 -> 850 bytes .../Decoration/barrels.rsi/triple_waste_3.png | Bin 0 -> 822 bytes .../barrels.rsi/triple_yellow_1.png | Bin 0 -> 666 bytes .../barrels.rsi/triple_yellow_2.png | Bin 0 -> 680 bytes .../barrels.rsi/triple_yellow_3.png | Bin 0 -> 700 bytes .../Decoration/barrels.rsi/warning_1.png | Bin 0 -> 624 bytes .../Decoration/barrels.rsi/warning_2.png | Bin 0 -> 689 bytes .../Decoration/barrels.rsi/warning_3.png | Bin 0 -> 635 bytes .../Decoration/barrels.rsi/waste_1.png | Bin 0 -> 636 bytes .../Decoration/barrels.rsi/waste_2.png | Bin 0 -> 770 bytes .../Decoration/barrels.rsi/waste_3.png | Bin 0 -> 750 bytes .../Decoration/barrels.rsi/yellow_1.png | Bin 0 -> 469 bytes .../Decoration/barrels.rsi/yellow_2.png | Bin 0 -> 521 bytes .../Decoration/barrels.rsi/yellow_3.png | Bin 0 -> 461 bytes .../cave_decor.rsi/boards_drought_ns-1.png | Bin 0 -> 478 bytes .../cave_decor.rsi/boards_drought_ns-2.png | Bin 0 -> 393 bytes .../cave_decor.rsi/boards_drought_ns-3.png | Bin 0 -> 584 bytes .../cave_decor.rsi/boards_drought_ns-4.png | Bin 0 -> 653 bytes .../cave_decor.rsi/boards_drought_ns-5.png | Bin 0 -> 552 bytes .../cave_decor.rsi/boards_drought_ns-6.png | Bin 0 -> 531 bytes .../cave_decor.rsi/boards_drought_we-1.png | Bin 0 -> 677 bytes .../cave_decor.rsi/boards_drought_we-2.png | Bin 0 -> 632 bytes .../cave_decor.rsi/boards_drought_we-3.png | Bin 0 -> 433 bytes .../cave_decor.rsi/boards_drought_we-4.png | Bin 0 -> 335 bytes .../cave_decor.rsi/boards_drought_we-5.png | Bin 0 -> 588 bytes .../cave_decor.rsi/boards_drought_we-6.png | Bin 0 -> 561 bytes .../cave_decor.rsi/boards_mammoth_ns-1.png | Bin 0 -> 508 bytes .../cave_decor.rsi/boards_mammoth_ns-2.png | Bin 0 -> 439 bytes .../cave_decor.rsi/boards_mammoth_ns-3.png | Bin 0 -> 649 bytes .../cave_decor.rsi/boards_mammoth_ns-4.png | Bin 0 -> 593 bytes .../cave_decor.rsi/boards_mammoth_ns-5.png | Bin 0 -> 650 bytes .../cave_decor.rsi/boards_mammoth_ns-6.png | Bin 0 -> 714 bytes .../cave_decor.rsi/boards_mammoth_we-1.png | Bin 0 -> 645 bytes .../cave_decor.rsi/boards_mammoth_we-2.png | Bin 0 -> 674 bytes .../cave_decor.rsi/boards_mammoth_we-3.png | Bin 0 -> 522 bytes .../cave_decor.rsi/boards_mammoth_we-4.png | Bin 0 -> 431 bytes .../cave_decor.rsi/boards_mammoth_we-5.png | Bin 0 -> 695 bytes .../cave_decor.rsi/boards_mammoth_we-6.png | Bin 0 -> 652 bytes .../Decoration/cave_decor.rsi/meta.json | 122 +++ .../cave_decor.rsi/minecart_fallen.png | Bin 0 -> 968 bytes .../Decoration/cave_decor.rsi/sign_left.png | Bin 0 -> 442 bytes .../Decoration/cave_decor.rsi/sign_right.png | Bin 0 -> 427 bytes .../Decoration/cave_decor.rsi/stalagmite.png | Bin 0 -> 708 bytes .../Decoration/cave_decor.rsi/stalagmite1.png | Bin 0 -> 546 bytes .../Decoration/cave_decor.rsi/stalagmite2.png | Bin 0 -> 721 bytes .../Decoration/cave_decor.rsi/stalagmite3.png | Bin 0 -> 694 bytes .../Decoration/cave_decor.rsi/stalagmite4.png | Bin 0 -> 595 bytes .../Decoration/cave_decor.rsi/stalagmite5.png | Bin 0 -> 564 bytes .../Decoration/cave_decor.rsi/support.png | Bin 0 -> 411 bytes .../cave_decor.rsi/support_beams.png | Bin 0 -> 358 bytes .../cave_decor.rsi/support_wall.png | Bin 0 -> 558 bytes .../cave_decor.rsi/support_wall_broken.png | Bin 0 -> 851 bytes .../rails64.rsi/junction-left-bottom.png | Bin 0 -> 2002 bytes .../rails64.rsi/junction-left-top.png | Bin 0 -> 1771 bytes .../rails64.rsi/junction-right-bottom.png | Bin 0 -> 1879 bytes .../rails64.rsi/junction-right-top.png | Bin 0 -> 1701 bytes .../Decoration/rails64.rsi/meta.json | 39 + .../Decoration/rails64.rsi/rails.png | Bin 0 -> 2057 bytes .../Decoration/rails64.rsi/turn-NE.png | Bin 0 -> 1912 bytes .../Decoration/rails64.rsi/turn-NW.png | Bin 0 -> 1902 bytes .../Decoration/rails64.rsi/turn-SE.png | Bin 0 -> 1844 bytes .../Decoration/rails64.rsi/turn-WS.png | Bin 0 -> 1891 bytes .../Decoration/signs_64x64.rsi/bazaar.png | Bin 0 -> 1641 bytes .../Decoration/signs_64x64.rsi/meta.json | 17 + .../Decoration/signs_64x64.rsi/we_open.png | Bin 0 -> 969 bytes .../Decoration/tires.rsi/junktire1.png | Bin 0 -> 895 bytes .../Decoration/tires.rsi/junktire2.png | Bin 0 -> 972 bytes .../Decoration/tires.rsi/junktire3.png | Bin 0 -> 834 bytes .../Decoration/tires.rsi/junktire4.png | Bin 0 -> 653 bytes .../Decoration/tires.rsi/junktire5.png | Bin 0 -> 1119 bytes .../Structures/Decoration/tires.rsi/meta.json | 31 + .../Decoration/torches.rsi/meta.json | 59 ++ .../Decoration/torches.rsi/torch_lit.png | Bin 0 -> 350 bytes .../Decoration/torches.rsi/torch_unlit.png | Bin 0 -> 541 bytes .../Decoration/torches.rsi/wall_torch_lit.png | Bin 0 -> 764 bytes .../torches.rsi/wall_torch_unlit.png | Bin 0 -> 664 bytes .../Decoration/world.rsi/barrels1.png | Bin 0 -> 948 bytes .../Decoration/world.rsi/barrels2.png | Bin 0 -> 1032 bytes .../Decoration/world.rsi/barrels3.png | Bin 0 -> 1060 bytes .../Decoration/world.rsi/barrels4.png | Bin 0 -> 1054 bytes .../Decoration/world.rsi/barrels5.png | Bin 0 -> 908 bytes .../Decoration/world.rsi/barrels6.png | Bin 0 -> 985 bytes .../Decoration/world.rsi/bookpile_1.png | Bin 0 -> 798 bytes .../Decoration/world.rsi/bookpile_2.png | Bin 0 -> 647 bytes .../Decoration/world.rsi/bookpile_3.png | Bin 0 -> 764 bytes .../Decoration/world.rsi/bookpile_4.png | Bin 0 -> 747 bytes .../Decoration/world.rsi/bookpile_5.png | Bin 0 -> 724 bytes .../Decoration/world.rsi/bookpile_6.png | Bin 0 -> 722 bytes .../Decoration/world.rsi/bookstack_1.png | Bin 0 -> 506 bytes .../Decoration/world.rsi/bookstack_2.png | Bin 0 -> 447 bytes .../Decoration/world.rsi/bookstack_3.png | Bin 0 -> 491 bytes .../Decoration/world.rsi/brickpile.png | Bin 0 -> 586 bytes .../Decoration/world.rsi/brickrubble.png | Bin 0 -> 2503 bytes .../Decoration/world.rsi/cardboard.png | Bin 0 -> 2683 bytes .../Decoration/world.rsi/concrete_barrier.png | Bin 0 -> 1070 bytes .../world.rsi/concrete_barrier_1.png | Bin 0 -> 1112 bytes .../world.rsi/concrete_barrier_2.png | Bin 0 -> 1298 bytes .../world.rsi/concrete_barrier_3.png | Bin 0 -> 1237 bytes .../world.rsi/concrete_barrier_4.png | Bin 0 -> 1196 bytes .../world.rsi/concrete_barrier_5.png | Bin 0 -> 1205 bytes .../world.rsi/concrete_barrier_alt.png | Bin 0 -> 1342 bytes .../world.rsi/concrete_barrier_alt_2.png | Bin 0 -> 1382 bytes .../Decoration/world.rsi/foodstuff_1.png | Bin 0 -> 783 bytes .../Decoration/world.rsi/foodstuff_2.png | Bin 0 -> 548 bytes .../Decoration/world.rsi/foodstuff_3.png | Bin 0 -> 564 bytes .../Decoration/world.rsi/foodstuff_4.png | Bin 0 -> 668 bytes .../Decoration/world.rsi/foodstuff_5.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/foodstuff_6.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/glass_1.png | Bin 0 -> 696 bytes .../Decoration/world.rsi/glass_2.png | Bin 0 -> 621 bytes .../Decoration/world.rsi/glass_3.png | Bin 0 -> 616 bytes .../Decoration/world.rsi/glass_4.png | Bin 0 -> 722 bytes .../Decoration/world.rsi/glass_5.png | Bin 0 -> 550 bytes .../Decoration/world.rsi/glass_6.png | Bin 0 -> 785 bytes .../Decoration/world.rsi/mailbox-open.png | Bin 0 -> 501 bytes .../Decoration/world.rsi/mailbox.png | Bin 0 -> 542 bytes .../Decoration/world.rsi/mailbox_old-open.png | Bin 0 -> 729 bytes .../Decoration/world.rsi/mailbox_old.png | Bin 0 -> 707 bytes .../Structures/Decoration/world.rsi/meta.json | 249 ++++++ .../Decoration/world.rsi/mine_sign.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/pallet.png | Bin 0 -> 735 bytes .../Decoration/world.rsi/pallet_stack.png | Bin 0 -> 1036 bytes .../Decoration/world.rsi/papers_1.png | Bin 0 -> 1425 bytes .../Decoration/world.rsi/papers_2.png | Bin 0 -> 1788 bytes .../Decoration/world.rsi/papers_3.png | Bin 0 -> 2119 bytes .../Decoration/world.rsi/payphone.png | Bin 0 -> 1239 bytes .../Decoration/world.rsi/payphone_alt.png | Bin 0 -> 1327 bytes .../Decoration/world.rsi/phone_black.png | Bin 0 -> 339 bytes .../Decoration/world.rsi/phone_red.png | Bin 0 -> 367 bytes .../Structures/Decoration/world.rsi/pot_1.png | Bin 0 -> 321 bytes .../Structures/Decoration/world.rsi/pot_2.png | Bin 0 -> 494 bytes .../Structures/Decoration/world.rsi/pot_3.png | Bin 0 -> 449 bytes .../Structures/Decoration/world.rsi/pot_4.png | Bin 0 -> 475 bytes .../Decoration/world.rsi/scattered_papers.png | Bin 0 -> 2280 bytes .../Decoration/world.rsi/shower.png | Bin 0 -> 794 bytes .../Structures/Decoration/world.rsi/sink.png | Bin 0 -> 1241 bytes .../Decoration/world.rsi/skeleton.png | Bin 0 -> 677 bytes .../Decoration/world.rsi/toilet.png | Bin 0 -> 1267 bytes .../Decoration/world.rsi/trashbags_1.png | Bin 0 -> 623 bytes .../Decoration/world.rsi/trashbags_2.png | Bin 0 -> 771 bytes .../Decoration/world.rsi/trashbags_3.png | Bin 0 -> 685 bytes .../Decoration/world.rsi/trashbags_4.png | Bin 0 -> 617 bytes .../Decoration/world.rsi/trashbags_5.png | Bin 0 -> 569 bytes .../Decoration/world.rsi/trashbags_6.png | Bin 0 -> 546 bytes .../Decoration/world.rsi/trashbin-1.png | Bin 0 -> 524 bytes .../Decoration/world.rsi/trashbin-2.png | Bin 0 -> 496 bytes .../Decoration/world.rsi/trashbin-3.png | Bin 0 -> 435 bytes .../Decoration/world.rsi/trashbin.png | Bin 0 -> 465 bytes .../Decoration/world.rsi/woodscrap.png | Bin 0 -> 2323 bytes .../Storage/Closets/cabinet.rsi/closet.png | Bin 0 -> 540 bytes .../Closets/cabinet.rsi/closet_door.png | Bin 0 -> 483 bytes .../Closets/cabinet.rsi/closet_open.png | Bin 0 -> 254 bytes .../Storage/Closets/cabinet.rsi/meta.json | 20 + .../Storage/Closets/closet.rsi/closet.png | Bin 0 -> 5617 bytes .../Closets/closet.rsi/closet_door.png | Bin 0 -> 5682 bytes .../Closets/closet.rsi/closet_open.png | Bin 0 -> 5588 bytes .../Storage/Closets/closet.rsi/meta.json | 23 + .../Storage/Closets/closet.rsi/welded.png | Bin 0 -> 206 bytes .../Closets/closetgeneric.rsi/closet.png | Bin 0 -> 394 bytes .../Closets/closetgeneric.rsi/closet_door.png | Bin 0 -> 259 bytes .../Closets/closetgeneric.rsi/closet_open.png | Bin 0 -> 225 bytes .../Closets/closetgeneric.rsi/meta.json | 23 + .../Closets/closetgeneric.rsi/welded.png | Bin 0 -> 206 bytes .../Storage/Closets/closetgrey.rsi/closet.png | Bin 0 -> 1009 bytes .../Closets/closetgrey.rsi/closet_door.png | Bin 0 -> 793 bytes .../Closets/closetgrey.rsi/closet_open.png | Bin 0 -> 654 bytes .../Storage/Closets/closetgrey.rsi/meta.json | 23 + .../Storage/Closets/closetgrey.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/closetgrey2.rsi/closet.png | Bin 0 -> 498 bytes .../Closets/closetgrey2.rsi/closet_door.png | Bin 0 -> 548 bytes .../Closets/closetgrey2.rsi/closet_open.png | Bin 0 -> 343 bytes .../Storage/Closets/closetgrey2.rsi/meta.json | 23 + .../Closets/closetgrey2.rsi/welded.png | Bin 0 -> 386 bytes .../Storage/Closets/closetold.rsi/closet.png | Bin 0 -> 454 bytes .../Closets/closetold.rsi/closet_door.png | Bin 0 -> 516 bytes .../Closets/closetold.rsi/closet_open.png | Bin 0 -> 303 bytes .../Storage/Closets/closetold.rsi/meta.json | 23 + .../Storage/Closets/closetold.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/doublecloset.rsi/closet.png | Bin 0 -> 526 bytes .../Closets/doublecloset.rsi/closet_door.png | Bin 0 -> 583 bytes .../Closets/doublecloset.rsi/closet_open.png | Bin 0 -> 414 bytes .../Closets/doublecloset.rsi/meta.json | 23 + .../Closets/doublecloset.rsi/welded.png | Bin 0 -> 538 bytes .../Closets/fridgedirty.rsi/closet.png | Bin 0 -> 630 bytes .../Closets/fridgedirty.rsi/closet_door.png | Bin 0 -> 647 bytes .../Closets/fridgedirty.rsi/closet_open.png | Bin 0 -> 459 bytes .../Storage/Closets/fridgedirty.rsi/meta.json | 23 + .../Closets/fridgedirty.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/fridgewidedirty.rsi/closet.png | Bin 0 -> 709 bytes .../fridgewidedirty.rsi/closet_door.png | Bin 0 -> 801 bytes .../fridgewidedirty.rsi/closet_open.png | Bin 0 -> 628 bytes .../Closets/fridgewidedirty.rsi/meta.json | 23 + .../Closets/fridgewidedirty.rsi/welded.png | Bin 0 -> 349 bytes .../Storage/Closets/guncabinet.rsi/closet.png | Bin 0 -> 572 bytes .../Closets/guncabinet.rsi/closet_door.png | Bin 0 -> 239 bytes .../Closets/guncabinet.rsi/closet_open.png | Bin 0 -> 332 bytes .../Storage/Closets/guncabinet.rsi/meta.json | 26 + .../Closets/guncabinet.rsi/shotgun.png | Bin 0 -> 329 bytes .../Storage/Closets/guncabinet.rsi/welded.png | Bin 0 -> 380 bytes .../Closets/medicabinet.rsi/closet.png | Bin 0 -> 306 bytes .../Closets/medicabinet.rsi/closet_door.png | Bin 0 -> 368 bytes .../Closets/medicabinet.rsi/closet_open.png | Bin 0 -> 284 bytes .../Storage/Closets/medicabinet.rsi/meta.json | 23 + .../Closets/medicabinet.rsi/welded.png | Bin 0 -> 322 bytes .../Crates/aluminiumcrate.rsi/base.png | Bin 0 -> 348 bytes .../Crates/aluminiumcrate.rsi/closed.png | Bin 0 -> 347 bytes .../Crates/aluminiumcrate.rsi/icon.png | Bin 0 -> 557 bytes .../Crates/aluminiumcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Crates/aluminiumcrate.rsi/meta.json | 29 + .../Crates/aluminiumcrate.rsi/open.png | Bin 0 -> 339 bytes .../Crates/aluminiumcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/armycrate.rsi/base.png | Bin 0 -> 415 bytes .../Storage/Crates/armycrate.rsi/closed.png | Bin 0 -> 610 bytes .../Storage/Crates/armycrate.rsi/icon.png | Bin 0 -> 710 bytes .../Storage/Crates/armycrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/armycrate.rsi/meta.json | 29 + .../Storage/Crates/armycrate.rsi/open.png | Bin 0 -> 364 bytes .../Storage/Crates/armycrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/cashregister.rsi/meta.json | 19 + .../cashregister.rsi/register_clean.png | Bin 0 -> 1320 bytes .../cashregister.rsi/register_cleanopen.png | Bin 0 -> 1187 bytes .../Crates/cashregisterbloody.rsi/meta.json | 19 + .../cashregisterbloody.rsi/register.png | Bin 0 -> 3520 bytes .../cashregisterbloody.rsi/registeropen.png | Bin 0 -> 3545 bytes .../Storage/Crates/cratemilitary.rsi/base.png | Bin 0 -> 445 bytes .../Crates/cratemilitary.rsi/closed.png | Bin 0 -> 394 bytes .../Storage/Crates/cratemilitary.rsi/icon.png | Bin 0 -> 478 bytes .../Crates/cratemilitary.rsi/meta.json | 23 + .../Storage/Crates/cratemilitary.rsi/open.png | Bin 0 -> 329 bytes .../Storage/Crates/cratewooden.rsi/base.png | Bin 0 -> 311 bytes .../Storage/Crates/cratewooden.rsi/closed.png | Bin 0 -> 312 bytes .../Storage/Crates/cratewooden.rsi/icon.png | Bin 0 -> 329 bytes .../Storage/Crates/cratewooden.rsi/meta.json | 23 + .../Storage/Crates/cratewooden.rsi/open.png | Bin 0 -> 329 bytes .../Storage/Crates/footlocker.rsi/base.png | Bin 0 -> 328 bytes .../Storage/Crates/footlocker.rsi/closed.png | Bin 0 -> 207 bytes .../Storage/Crates/footlocker.rsi/icon.png | Bin 0 -> 315 bytes .../Storage/Crates/footlocker.rsi/meta.json | 26 + .../Storage/Crates/footlocker.rsi/open.png | Bin 0 -> 227 bytes .../Storage/Crates/footlocker.rsi/welded.png | Bin 0 -> 285 bytes .../Storage/Crates/freezer.rsi/base.png | Bin 720 -> 419 bytes .../Storage/Crates/freezer.rsi/closed.png | Bin 186 -> 273 bytes .../Storage/Crates/freezer.rsi/icon.png | Bin 275 -> 455 bytes .../Storage/Crates/freezer.rsi/open.png | Bin 251 -> 279 bytes .../Storage/Crates/medicalcrate.rsi/base.png | Bin 0 -> 488 bytes .../Crates/medicalcrate.rsi/closed.png | Bin 0 -> 406 bytes .../Storage/Crates/medicalcrate.rsi/icon.png | Bin 0 -> 513 bytes .../Storage/Crates/medicalcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/medicalcrate.rsi/meta.json | 29 + .../Storage/Crates/medicalcrate.rsi/open.png | Bin 0 -> 224 bytes .../Crates/medicalcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/redcrate.rsi/base.png | Bin 0 -> 398 bytes .../Storage/Crates/redcrate.rsi/closed.png | Bin 0 -> 549 bytes .../Storage/Crates/redcrate.rsi/icon.png | Bin 0 -> 644 bytes .../Storage/Crates/redcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/redcrate.rsi/meta.json | 29 + .../Storage/Crates/redcrate.rsi/open.png | Bin 0 -> 347 bytes .../Storage/Crates/redcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/trashbin.rsi/base.png | Bin 0 -> 700 bytes .../Storage/Crates/trashbin.rsi/closed.png | Bin 0 -> 433 bytes .../Storage/Crates/trashbin.rsi/icon.png | Bin 0 -> 736 bytes .../Storage/Crates/trashbin.rsi/meta.json | 23 + .../Storage/Crates/trashbin.rsi/open.png | Bin 0 -> 491 bytes .../Storage/Crates/trashcart.rsi/base.png | Bin 378 -> 585 bytes .../Storage/Crates/trashcart.rsi/closed.png | Bin 262 -> 273 bytes .../Storage/Crates/trashcart.rsi/icon.png | Bin 380 -> 584 bytes .../Storage/Crates/trashcart.rsi/open.png | Bin 233 -> 215 bytes .../Storage/Crates/trashcart.rsi/welded.png | Bin 270 -> 690 bytes .../Crates/woodencrates.rsi/army_crate-1.png | Bin 0 -> 617 bytes .../Crates/woodencrates.rsi/army_crate-2.png | Bin 0 -> 632 bytes .../Crates/woodencrates.rsi/army_crate.png | Bin 0 -> 597 bytes .../Storage/Crates/woodencrates.rsi/meta.json | 35 + .../Crates/woodencrates.rsi/plain_crate-1.png | Bin 0 -> 533 bytes .../Crates/woodencrates.rsi/plain_crate-2.png | Bin 0 -> 530 bytes .../Crates/woodencrates.rsi/plain_crate-3.png | Bin 0 -> 559 bytes .../Crates/woodencrates.rsi/plain_crate.png | Bin 0 -> 473 bytes .../Crates/woodencrates.rsi/wood_crate.png | Bin 0 -> 872 bytes .../woodenfootlocker.rsi/footlocker_wood.png | Bin 0 -> 1772 bytes .../footlocker_woodopen.png | Bin 0 -> 1850 bytes .../Crates/woodenfootlocker.rsi/meta.json | 19 + .../Storage/Furniture/safe.rsi/closet.png | Bin 0 -> 449 bytes .../Furniture/safe.rsi/closet_door.png | Bin 0 -> 315 bytes .../Furniture/safe.rsi/closet_open.png | Bin 0 -> 349 bytes .../Storage/Furniture/safe.rsi/meta.json | 23 + .../Storage/Furniture/safe.rsi/welded.png | Bin 0 -> 289 bytes .../Furniture/safespinner.rsi/closet.png | Bin 0 -> 431 bytes .../Furniture/safespinner.rsi/closet_door.png | Bin 0 -> 485 bytes .../Furniture/safespinner.rsi/closet_open.png | Bin 0 -> 387 bytes .../Furniture/safespinner.rsi/meta.json | 23 + .../Furniture/safespinner.rsi/welded.png | Bin 0 -> 289 bytes .../Furniture/washingmachine.rsi/generic.png | Bin 0 -> 1090 bytes .../washingmachine.rsi/generic_door.png | Bin 0 -> 1082 bytes .../washingmachine.rsi/generic_on.png | Bin 0 -> 1489 bytes .../washingmachine.rsi/generic_open.png | Bin 0 -> 626 bytes .../Furniture/washingmachine.rsi/meta.json | 43 ++ .../washingmachine_industrial.rsi/generic.png | Bin 0 -> 1015 bytes .../generic_door.png | Bin 0 -> 993 bytes .../generic_on.png | Bin 0 -> 1183 bytes .../generic_open.png | Bin 0 -> 702 bytes .../washingmachine_industrial.rsi/meta.json | 43 ++ .../Storage/barrels.rsi/black-closed.png | Bin 0 -> 359 bytes .../Storage/barrels.rsi/black-full.png | Bin 0 -> 365 bytes .../Storage/barrels.rsi/black-open.png | Bin 0 -> 357 bytes .../Storage/barrels.rsi/blue-closed.png | Bin 0 -> 327 bytes .../Storage/barrels.rsi/blue-open.png | Bin 0 -> 325 bytes .../Structures/Storage/barrels.rsi/meta.json | 44 ++ .../Storage/barrels.rsi/red-closed.png | Bin 0 -> 330 bytes .../Storage/barrels.rsi/red-full.png | Bin 0 -> 351 bytes .../Storage/barrels.rsi/red-open.png | Bin 0 -> 328 bytes .../Storage/barrels.rsi/yellow-closed.png | Bin 0 -> 327 bytes .../Storage/barrels.rsi/yellow-full.png | Bin 0 -> 347 bytes .../Storage/barrels.rsi/yellow-open.png | Bin 0 -> 326 bytes .../Storage/burningbarrel.rsi/burnbarrel.png | Bin 0 -> 737 bytes .../burningbarrel.rsi/burnbarrel_lit.png | Bin 0 -> 2189 bytes .../Storage/burningbarrel.rsi/meta.json | 51 ++ .../Storage/storage.rsi/firstaid.png | Bin 0 -> 305 bytes .../Storage/storage.rsi/firstaid_door.png | Bin 0 -> 326 bytes .../Storage/storage.rsi/firstaid_open.png | Bin 0 -> 312 bytes .../Structures/Storage/storage.rsi/fridge.png | Bin 0 -> 445 bytes .../Storage/storage.rsi/fridge_door.png | Bin 0 -> 356 bytes .../Storage/storage.rsi/fridge_open.png | Bin 0 -> 358 bytes .../Structures/Storage/storage.rsi/locker.png | Bin 0 -> 376 bytes .../Storage/storage.rsi/locker_door.png | Bin 0 -> 356 bytes .../Storage/storage.rsi/locker_loot.png | Bin 0 -> 337 bytes .../Storage/storage.rsi/locker_open.png | Bin 0 -> 349 bytes .../Structures/Storage/storage.rsi/meta.json | 65 ++ .../Storage/storage.rsi/safe_wall-open.png | Bin 0 -> 463 bytes .../Storage/storage.rsi/safe_wall.png | Bin 0 -> 378 bytes .../Storage/storage.rsi/toolbox.png | Bin 0 -> 415 bytes .../Storage/storage.rsi/toolbox_loot.png | Bin 0 -> 306 bytes .../Storage/storage.rsi/toolbox_open.png | Bin 0 -> 432 bytes .../Storage/storage.rsi/vent-damaged.png | Bin 0 -> 261 bytes .../Storage/storage.rsi/vent-open.png | Bin 0 -> 225 bytes .../Structures/Storage/storage.rsi/vent.png | Bin 0 -> 221 bytes .../tanksx64.rsi/chemical_container.png | Bin 0 -> 1389 bytes .../chemical_container_broken.png | Bin 0 -> 1670 bytes .../Storage/tanksx64.rsi/largetank.png | Bin 0 -> 1272 bytes .../tanksx64.rsi/largetank_chemical.png | Bin 0 -> 1390 bytes .../tanksx64.rsi/largetank_chemical_huge.png | Bin 0 -> 1476 bytes .../Storage/tanksx64.rsi/largetank_pipe.png | Bin 0 -> 1453 bytes .../Structures/Storage/tanksx64.rsi/meta.json | 29 + .../Wallmounts/hydrant.rsi/closed.png | Bin 0 -> 534 bytes .../Wallmounts/hydrant.rsi/frame.png | Bin 0 -> 419 bytes .../Wallmounts/hydrant.rsi/meta.json | 20 + .../Wallmounts/hydrant.rsi/open.png | Bin 0 -> 257 bytes .../Wallmounts/hydrantold.rsi/closed.png | Bin 0 -> 521 bytes .../Wallmounts/hydrantold.rsi/frame.png | Bin 0 -> 408 bytes .../Wallmounts/hydrantold.rsi/meta.json | 20 + .../Wallmounts/hydrantold.rsi/open.png | Bin 0 -> 253 bytes .../Wallmounts/lightbulbcaged.rsi/base.png | Bin 0 -> 713 bytes .../Wallmounts/lightbulbcaged.rsi/broken.png | Bin 0 -> 745 bytes .../Wallmounts/lightbulbcaged.rsi/burned.png | Bin 0 -> 775 bytes .../Wallmounts/lightbulbcaged.rsi/empty.png | Bin 0 -> 411 bytes .../Wallmounts/lightbulbcaged.rsi/glow.png | Bin 0 -> 504 bytes .../Wallmounts/lightbulbcaged.rsi/meta.json | 31 + .../Wallmounts/noticeboard.rsi/meta.json | 60 +- .../noticeboard.rsi/noticeboard.png | Bin 353 -> 188 bytes .../Wallmounts/signs_32x32.rsi/bar.png | Bin 0 -> 341 bytes .../Wallmounts/signs_32x32.rsi/clinic.png | Bin 0 -> 605 bytes .../Wallmounts/signs_32x32.rsi/meta.json | 48 ++ .../Wallmounts/signs_32x32.rsi/open.png | Bin 0 -> 334 bytes .../Wallmounts/signs_32x32.rsi/open_bar.png | Bin 0 -> 308 bytes .../signs_32x32.rsi/open_bar_on.png | Bin 0 -> 562 bytes .../Wallmounts/signs_32x32.rsi/open_on.png | Bin 0 -> 634 bytes .../Wallmounts/signs_32x32.rsi/rent.png | Bin 0 -> 340 bytes .../Wallmounts/signs_64x32.rsi/bazaar_on.png | Bin 0 -> 366 bytes .../Wallmounts/signs_64x32.rsi/hotel.png | Bin 0 -> 388 bytes .../Wallmounts/signs_64x32.rsi/meta.json | 26 + .../Wallmounts/signs_64x32.rsi/private.png | Bin 0 -> 493 bytes .../signs_64x32.rsi/we_open_open.png | Bin 0 -> 741 bytes .../Wallmounts/signs_64x32.rsi/workers.png | Bin 0 -> 612 bytes .../Structures/Wallmounts/vdu.rsi/VDU.png | Bin 0 -> 1205 bytes .../Wallmounts/vdu.rsi/keyboard.png | Bin 0 -> 278 bytes .../Structures/Wallmounts/vdu.rsi/meta.json | 57 ++ .../Structures/Wallmounts/vdu.rsi/screen.png | Bin 0 -> 1305 bytes .../Wallmounts/walldecor.rsi/calendar.png | Bin 0 -> 358 bytes .../walldecor.rsi/calendar_blank.png | Bin 0 -> 284 bytes .../Wallmounts/walldecor.rsi/clock.png | Bin 0 -> 470 bytes .../Wallmounts/walldecor.rsi/cross.png | Bin 0 -> 274 bytes .../Wallmounts/walldecor.rsi/danger_sign.png | Bin 0 -> 370 bytes .../Wallmounts/walldecor.rsi/exit.png | Bin 0 -> 546 bytes .../Wallmounts/walldecor.rsi/meta.json | 44 ++ .../Wallmounts/walldecor.rsi/notice_sign.png | Bin 0 -> 305 bytes .../Wallmounts/walldecor.rsi/wallscreen.png | Bin 0 -> 1312 bytes .../walldecor.rsi/wanted_poster.png | Bin 0 -> 500 bytes .../walldecor.rsi/wanted_poster_goose.png | Bin 0 -> 506 bytes Resources/keybinds.yml | 3 - 448 files changed, 4100 insertions(+), 33 deletions(-) create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/rails.yml create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/torches.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/barrels.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/closets.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/crates.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/furniture.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/tanks.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/signs.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/minecart_fallen.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_left.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_right.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-bottom.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-top.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/rails.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-NE.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-NW.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-WS.png create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/bazaar.png create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire5.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/torch_unlit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_unlit.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/brickpile.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/cardboard.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox_old-open.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pallet.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/payphone.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/phone_black.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/phone_red.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/shower.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/sink.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/skeleton.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/toilet.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/woodscrap.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/shotgun.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_cleanopen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/register.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/registeropen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-1.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-2.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/wood_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_wood.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_woodopen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_on.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel_lit.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_loot.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/safe_wall-open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox_loot.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent-damaged.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent-open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container_broken.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/closed.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/closed.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/broken.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/empty.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/bar.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/rent.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/we_open_open.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/workers.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/VDU.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/keyboard.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/clock.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/cross.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/danger_sign.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/exit.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster_goose.png diff --git a/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml new file mode 100644 index 00000000000..2ed9c186eeb --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml @@ -0,0 +1,720 @@ +- type: entity + id: DecorFloorBase + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/cave_decor.rsi + netsync: false + noRot: true + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + - type: InteractionOutline +# No fixture on this base, inherit from further down for fixture + +# Cave Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard1 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard2 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard3 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard4 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard5 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard6 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard7 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard8 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard9 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard10 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard11 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard12 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard13 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard14 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard15 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard16 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard17 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard18 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard19 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard20 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard21 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard22 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard23 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard24 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorStalagmite1 + name: stalagmite + description: Pointy rocks! Mites go up, tites come... + components: + - type: Sprite + state: stalagmite + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite2 + components: + - type: Sprite + state: stalagmite1 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite3 + components: + - type: Sprite + state: stalagmite2 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite4 + components: + - type: Sprite + state: stalagmite3 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite5 + components: + - type: Sprite + state: stalagmite4 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite6 + components: + - type: Sprite + state: stalagmite5 + +- type: entity + parent: DecorStalagmite1 + id: DecorMinecart + name: minecrart + description: It seems to have fallen over... + components: + - type: Sprite + state: minecart_fallen + +- type: entity + parent: DecorFloorBase + id: DecorSignLeftMine + name: sign + description: A sign, for a mine, pointing li...left + components: + - type: Sprite + state: sign_left + +- type: entity + parent: DecorFloorBase + id: DecorSignRightMine + name: sign + description: A sign, pointing right. + components: + - type: Sprite + state: sign_right + +# World Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorWorldBase + abstract: true + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper + name: scattered paper + description: A mess of papers + suffix: 8 states + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + state: scattered_papers + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper1 + suffix: 4 states + name: scattered paper + description: A mess of papers + components: + - type: Sprite + state: papers_1 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper2 + components: + - type: Sprite + state: papers_2 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper3 + components: + - type: Sprite + state: papers_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorScrapwood + name: wood scraps + description: wood scraps + suffix: 6 states + components: + - type: Sprite + state: woodscrap + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBrickrubble + name: brick rubble + description: brick rubble + suffix: "6 states" + components: + - type: Sprite + state: brickrubble + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorCardboard + name: cardboard boxes + description: cardboard scrap boxes + suffix: "6 states" + components: + - type: Sprite + state: cardboard + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPallet + name: pallet + description: a wooden pallet. + suffix: "2 states" + components: + - type: Sprite + state: pallet + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPalletStack + name: pallet stack + description: a stack of wooden pallets + suffix: "2 states" + components: + - type: Sprite + state: pallet_stack + # add destruction drop for materials + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorPalletStack + id: DecorFloorBrickStack + name: brick stack + description: a neat stack of bricks + components: + - type: Sprite + state: brickpile + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookstack1 + name: book stack + description: a stack of books + components: + - type: Sprite + state: bookstack_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack2 + components: + - type: Sprite + state: bookstack_2 + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack3 + components: + - type: Sprite + state: bookstack_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookPile1 + name: book pile + description: a pile of books + components: + - type: Sprite + state: bookpile_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile2 + components: + - type: Sprite + state: bookpile_2 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile3 + components: + - type: Sprite + state: bookpile_3 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile4 + components: + - type: Sprite + state: bookpile_4 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile5 + components: + - type: Sprite + state: bookpile_5 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile6 + components: + - type: Sprite + state: bookpile_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorFood1 + name: food stuff + description: some old food stuff + components: + - type: Sprite + state: foodstuff_1 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood2 + components: + - type: Sprite + state: foodstuff_2 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood3 + components: + - type: Sprite + state: foodstuff_3 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood4 + components: + - type: Sprite + state: foodstuff_4 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood5 + components: + - type: Sprite + state: foodstuff_5 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood6 + components: + - type: Sprite + state: foodstuff_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorTrashbags1 + name: trash bags + description: some old trash bags + components: + - type: Sprite + state: trashbags_1 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags2 + components: + - type: Sprite + state: trashbags_2 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags3 + components: + - type: Sprite + state: trashbags_3 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags4 + components: + - type: Sprite + state: trashbags_4 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags5 + components: + - type: Sprite + state: trashbags_5 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags6 + components: + - type: Sprite + state: trashbags_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorGlass1 + name: glass bottles + description: some old glass scraps + components: + - type: Sprite + state: glass_1 + # add glass shard destruction + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass2 + components: + - type: Sprite + state: glass_2 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass3 + components: + - type: Sprite + state: glass_3 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass4 + components: + - type: Sprite + state: glass_4 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass5 + components: + - type: Sprite + state: glass_5 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass6 + components: + - type: Sprite + state: glass_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorSignMines + name: mines + description: danger of mines and death... + components: + - type: Sprite + state: mine_sign + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorSkeleton + name: skeleton + description: looks a little worse for wear + components: + - type: Sprite + state: skeleton + +- type: entity + parent: DecorFloorWorldBase + id: DecorBarrels + name: barrels + description: a bunch of old rusty barrels. + components: + - type: Sprite + layers: + - state: barrels1 + map: [ "body" ] + - type: RandomSprite + available: + - body: + barrels1: "" + barrels2: "" + barrels3: "" + barrels4: "" + barrels5: "" + barrels6: "" + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.3 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorSkeleton + id: DecorFloorSkeletonOver + suffix: draws over objects + components: + - type: Sprite + drawdepth: Mobs diff --git a/Resources/Prototypes/Entities/Structures/Decoration/rails.yml b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml new file mode 100644 index 00000000000..a41b474622a --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml @@ -0,0 +1,95 @@ +- type: entity + id: Rails + name: railway + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/rails64.rsi + state: rails + netsync: false + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + +- type: entity + parent: Rails + id: RailsJunctionRightTop + suffix: junction right top + components: + - type: Sprite + state: junction-right-top + +- type: entity + parent: Rails + id: RailsJunctionLeftTop + suffix: junction left top + components: + - type: Sprite + state: junction-left-top + +- type: entity + parent: Rails + id: RailsJunctionRightBottom + suffix: junction right bottom + components: + - type: Sprite + state: junction-right-bottom + +- type: entity + parent: Rails + id: RailsJunctionLeftBottom + suffix: junction left bottom + components: + - type: Sprite + state: junction-left-bottom + +- type: entity + parent: Rails + id: RailsTurnWS + suffix: turn west-south + components: + - type: Sprite + state: turn-WS + +- type: entity + parent: Rails + id: RailsTurnNW + suffix: turn north-west + components: + - type: Sprite + state: turn-NW + +- type: entity + parent: Rails + id: RailsTurnNE + suffix: turn north-east + components: + - type: Sprite + state: turn-NE + +- type: entity + parent: Rails + id: RailsTurnSE + suffix: turn south-east + components: + - type: Sprite + state: turn-SE diff --git a/Resources/Prototypes/Entities/Structures/Decoration/torches.yml b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml new file mode 100644 index 00000000000..1646ec9f707 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml @@ -0,0 +1,73 @@ +- type: entity + id: Torch2 + name: torch + suffix: floor + description: A flaming torch for lighting an area. + placement: + mode: SnapgridCenter + components: + - type: Transform + anchored: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: Static + canCollide: false + - type: Sprite + netsync: false + noRot: true + sprite: Structures/Decoration/torches.rsi + state: torch_unlit + - type: Appearance + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + - type: ExtinguishOnInteract + extinguishAttemptSound: + path: /Audio/Items/candle_blowing.ogg + params: + variation: 0.05 + volume: 10 + - type: UseDelay + - type: Flammable + fireSpread: false + canResistFire: false + alwaysCombustible: true + canExtinguish: true + firestacksOnIgnite: 3.0 + firestackFade: -0.01 + damage: + types: + Heat: 0.1 + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: torch_lit + - type: Damageable + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: ToggleableLightVisuals + spriteLayer: null + - type: PointLight + color: "#e39c40" + radius: 5 + power: 16 + +- type: entity + parent: Torch2 + id: TorchWall + suffix: wall + components: + - type: Sprite + noRot: false + state: wall_torch_unlit + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: wall_torch_lit diff --git a/Resources/Prototypes/Entities/Structures/Storage/barrels.yml b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml new file mode 100644 index 00000000000..0cbbb2ede8b --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml @@ -0,0 +1,287 @@ +# Barrels +# Base +- type: entity + parent: BaseStructureDynamic + id: BaseBarrel + name: barrel + description: This barrel looks like it could contain something. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.45" + density: 50 + mask: + - MachineMask + layer: + - WallLayer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + +# Base Open +- type: entity + parent: BaseBarrel + id: BaseBarrelOpen + suffix: open + categories: [ HideSpawnMenu ] + components: + - type: SolutionContainerManager + solutions: + barrel: + maxVol: 500 + - type: DrainableSolution + solution: barrel + - type: ReagentTank + +# Closed +- type: entity + parent: BaseBarrel + id: BlackBarrel + name: black barrel + description: A worn out black barrel. The label is torn off. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-closed + +- type: entity + parent: BaseBarrel + id: BlueBarrel + name: blue barrel + description: A blue barrel with a warning sign of. Maybe it contains water? + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + +- type: entity + parent: BaseBarrel + id: RedBarrel + name: red barrel + description: A red barrel with an explosive warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-closed + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: BaseBarrel + id: YellowBarrel + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-closed + - type: RadiationSource + intensity: 2 + slope: 1 + +# Open +- type: entity + parent: BaseBarrelOpen + id: BlackBarrelOpen + suffix: open + name: black barrel + description: A worn out black barrel. The label is torn off. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-open + +- type: entity + parent: BaseBarrelOpen + id: BlueBarrelOpen + suffix: open + name: blue barrel + description: A blue barrel with a warning sign of. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-open + +- type: entity + parent: BaseBarrelOpen + id: RedBarrelOpen + suffix: open + name: red barrel + description: A red barrel with an explosive warning sign on. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-open + +- type: entity + parent: BaseBarrelOpen + id: YellowBarrelOpen + suffix: open + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. The lid is off and you can see inside but it still makes you twitch. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-open + - type: RadiationSource + intensity: 1 + slope: 1 + +# Full barrels +- type: entity + parent: BlackBarrelOpen + id: BlackBarrelFull + suffix: full + description: A worn out black barrel. This one looks full of some dark liquid. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-full + # TODO - fill with some sort of waste product? Maybe just dirty water. + +- type: entity + parent: RedBarrelOpen + id: RedBarrelFull + suffix: full + description: A red barrel with an explosive warning sign on. It has a golden liquid inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-full + - type: SolutionContainerManager + solutions: + barrel: + reagents: + - ReagentId: WeldingFuel + Quantity: 500 + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: YellowBarrelOpen + id: YellowBarrelFull + suffix: full + description: A yellow barrel with a radiation warning sign on. You can see the glowing goo bubble. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-full + - type: RadiationSource + intensity: 3 + slope: 1 + - type: PointLight + netsync: false + radius: 1.5 + energy: 1.6 + color: "#3db83b" + castShadows: false + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1000 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + # TODO - fill with some sort of radioactive waste reagent. + +# Burning Barrels +- type: entity + parent: BaseStructureDynamic + id: BurningBarrel + name: burnt barrel + description: This barrel looks like it once contained a fire. + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 50 + mask: + - MachineMask + layer: + - MidImpassable + - LowImpassable + +- type: entity + parent: BurningBarrel + id: BurningBarrelLit + name: burning barrel + description: This barrel is smoldering. Toasty + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel_lit + netsync: false + - type: PointLight + color: "#E25822" + radius: 1.0 + energy: 5.0 + netsync: false + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour # immediately make it bright and flickery + id: burnbarrel_lit + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 6.0 + endValue: 9.0 + property: Energy + isLooped: true diff --git a/Resources/Prototypes/Entities/Structures/Storage/closets.yml b/Resources/Prototypes/Entities/Structures/Storage/closets.yml new file mode 100644 index 00000000000..394840caf48 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/closets.yml @@ -0,0 +1,228 @@ +# TODO:RESET:TIMEDSTORAGEFILL + +# Metal Closets +- type: entity + parent: ClosetBase + id: ClosetBase2 + abstract: true + components: + - type: Sprite + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + - type: Transform + anchored: true + noRot: true + - type: Physics + bodyType: Static + - type: Anchorable # Makes the anchoring near impossible due to high time requirement + delay: 3600 + +- type: entity + parent: ClosetBase2 + id: ClosetBaseW + name: closet + description: A basic closet for storing things. + components: + - type: Weldable + - type: Sprite + noRot: true + netsync: false + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + + +- type: entity + parent: ClosetBaseW + id: ClosetGrey1 + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey.rsi + - type: Weldable + +- type: entity + id: ClosetGrey2 + parent: ClosetBaseW + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey2.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetRusty + name: rusty closet + description: A rusty old closet for storing things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetold.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetGunCabinet + name: gun cabinet + description: A secure cabinet for storing guns. + components: + - type: Sprite + sprite: Structures/Storage/Closets/guncabinet.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeWideDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgewidedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetDouble + name: double closet + description: A double closet for holding twice the things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/doublecloset.rsi + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.15,-0.45,0.45,0.45" + density: 145 + mask: + - MachineMask + layer: + - MachineLayer + +# Wooden Closets + +- type: entity + parent: ClosetBase2 + id: ClosetCabinetWood + name: cabinet + description: An old pre-war wooden cabinet. + components: + - type: Sprite + sprite: Structures/Storage/Closets/cabinet.rsi + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Tag + tags: + - Wooden + +- type: entity + parent: ClosetBaseW + id: ClosetGeneric + suffix: generic roller + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgeneric.rsi + +# Wallmounted Closets +- type: entity + id: ClosetWallMedicabinet + placement: + mode: SnapgridCenter + name: medicabinet + description: A medicabinet mounted on the wall. + components: + - type: InteractionOutline + - type: Clickable + - type: ResistLocker + - type: Weldable + - type: WallMount + arc: 180 + - type: Transform + noRot: false + - type: Sprite + drawdepth: WallMountedItems + netsync: false + noRot: false + sprite: Structures/Storage/Closets/medicabinet.rsi + layers: + - state: closet + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorage + isCollidableWhenOpen: true + enteringOffset: 0, -0.75 + closeSound: + path: /Audio/Items/deconstruct.ogg + openSound: + path: /Audio/Items/deconstruct.ogg + - type: ContainerContainer + containers: + entity_storage: !type:Container + ents: [] + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 150 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 diff --git a/Resources/Prototypes/Entities/Structures/Storage/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/crates.yml new file mode 100644 index 00000000000..e6292912b09 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/crates.yml @@ -0,0 +1,227 @@ +- type: entity + parent: CrateGenericSteel + id: CrateFootlocker + name: footlocker + description: A footlocker for someones equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Sprite + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Reflect + reflects: + - Energy + reflectProb: 0.2 + spread: 90 + +- type: entity + parent: CrateGenericSteel + id: CrateAluminium + name: aluminium crate + description: An aluminium crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateArmy + name: army crate + description: A crate with a US Army star on. + components: + - type: Icon + sprite: Structures/Storage/Crates/armycrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/armycrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateMedical2 + name: medical crate + description: A metal crate for storing medical equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/medicalcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/medicalcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateRed + name: red crate + description: A faded red crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/redcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/redcrate.rsi + +- type: entity + parent: CrateGeneric + id: Trashbin + name: trash bin + description: A trash bin for putting rubbish in. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashbin.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashbin.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + +- type: entity + parent: CrateFootlocker + id: CrateTrashcart + name: trash cart + description: A trash cart for transporting waste. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashcart.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashcart.rsi + - type: TileFrictionModifier + modifier: 0.4 + +- type: entity + parent: CrateGeneric + id: CrateFreezer2 + name: freezer + description: A freezer for keeping things cool. + components: + - type: Icon + sprite: Structures/Storage/Crates/freezer.rsi + - type: Sprite + sprite: Structures/Storage/Crates/freezer.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: AntiRottingContainer + +# Wooden +- type: entity + parent: CrateGeneric + id: CrateWooden + name: wooden crate + components: + - type: Icon + sprite: Structures/Storage/Crates/cratewooden.rsi + state: icon + - type: Sprite + sprite: Structures/Storage/Crates/cratewooden.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.29" + density: 50 + mask: + - SmallMobMask #this is so they can go under plastic flaps + layer: + - MachineLayer + +- type: entity + parent: CrateWooden + id: CrateMilitary + name: military crate + description: An old wooden crate. Looks like it might have some supplies in. + components: + - type: Icon + sprite: Structures/Storage/Crates/cratemilitary.rsi + - type: Sprite + sprite: Structures/Storage/Crates/cratemilitary.rsi + +# Breakable Crates (deconstruct or destroy) +- type: entity + parent: BaseStructureDynamic + id: CrateBreakBase + name: wooden crate + description: A wooden crate for storage. + abstract: true + components: + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 75 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:EmptyAllContainersBehaviour + - type: Sprite + sprite: Structures/Storage/Crates/woodencrates.rsi + - type: Storage + grid: + - 0,0,6,3 + maxItemSize: Huge + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + +- type: entity + parent: CrateBreakBase + id: CrateBreakWood + suffix: wood + components: + - type: Sprite + state: wood_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlain + suffix: plain + components: + - type: Sprite + state: plain_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlainDamaged + suffix: plain damaged + components: + - type: Sprite + state: plain_crate-1 # TODO: Make this random between states -1, -2 and -3 + +- type: entity + parent: CrateBreakBase + id: CrateBreakArmy + name: army crate + components: + - type: Sprite + state: army_crate + +- type: entity + parent: CrateBreakArmy + id: CrateBreakArmyDamaged + suffix: damaged + components: + - type: Sprite + state: army_crate-1 # TODO: Make this random between states -1 and -2 diff --git a/Resources/Prototypes/Entities/Structures/Storage/furniture.yml b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml new file mode 100644 index 00000000000..6ea2a5e5649 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml @@ -0,0 +1,49 @@ +# Washing Machines +- type: entity + parent: ClosetBase + id: FurnitureWashingmachine + name: washing machine + description: wishy washy. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine.rsi + layers: + - state: generic + map: ["enum.StorageVisualLayers.Base"] + - state: generic_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: generic + stateDoorOpen: generic_open + stateDoorClosed: generic_door + - type: Transform + anchored: true + noRot: false + - type: Physics + bodyType: Static + +- type: entity + parent: FurnitureWashingmachine + id: FurnitureWashingmachineIndustrial + suffix: Industrial + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine_industrial.rsi + +# Safes +- type: entity + parent: ClosetBaseW + id: ClosetSafe + name: safe + description: Might be filled with valuables. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safe.rsi + +- type: entity + parent: ClosetSafe + id: ClosetSafeSpinner + suffix: spinner + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safespinner.rsi diff --git a/Resources/Prototypes/Entities/Structures/Storage/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml new file mode 100644 index 00000000000..41038fb74d1 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml @@ -0,0 +1,182 @@ +# :TODO: Add the destroyed versions of these as a destruction spawn. + +- type: entity + parent: BaseStructure + id: StorageTankBase + name: storage tank + description: A liquids storage tank. + abstract: true + components: + - type: Sprite + noRot: true + - type: InteractionOutline + - type: Physics + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:SpillBehavior + solution: tank + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + - type: SolutionContainerManager + solutions: + tank: + maxVol: 1500 + - type: DrainableSolution + solution: tank + - type: ReagentTank + - type: Transform + noRot: true + +# In use +- type: entity + id: StorageTankWide + parent: StorageTankBase + name: fuel tank + description: A fuel tank. It's used to store high amounts of fuel. + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: chemical_container + # - state: chemical_container + # map: ["enum.SolutionContainerLayers.Fill"] + # visible: false + - type: Appearance + # - type: SolutionContainerVisuals + # maxFillLevels: 3 + # fillBaseName: fueltank-2- + - type: ExaminableSolution + solution: tank + - type: ReagentTank + tankType: Fuel + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: PacifismDangerousAttack + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.5,0.9,0.2" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + parent: StorageTankWide + id: StorageTankWideFullFuel + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 + + +- type: entity + parent: StorageTankWide + id: StorageTank2 + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.7,-0.1,0.4" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankFullFuel + parent: StorageTank2 + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 1500 + +- type: entity + id: StorageTankHuge + parent: StorageTankWide + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical_huge + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.7,-0.7,0.2,0.6" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankHugeFullFuel + parent: StorageTankHuge + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml new file mode 100644 index 00000000000..53c2cb05f3c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml @@ -0,0 +1,19 @@ +- type: entity + parent: BaseSign + id: SignBase # for non directional signs otherwise remove snapCardinals: true + abstract: true + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml new file mode 100644 index 00000000000..bdbce362f42 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml @@ -0,0 +1,43 @@ +#Small lights +- type: entity + parent: SmallLight + id: LightSmallAlwayson + name: small light + suffix: Always on + description: "An always powered light." + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + drawdepth: Overdoors + offset: 0, 1 # 0.75 is better but breaks for east west placement + - type: PointLight + energy: 1.0 + radius: 6 + softness: 1.1 + enabled: true + - type: WallMount + +- type: entity + parent: PoweredSmallLightEmpty + id: LightSmallEmpty + name: small light + description: "A light fixture. Draws power and produces light when equipped with a light bulb." + suffix: Empty + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: empty + offset: 0, 1 + - type: WallMount + +- type: entity + parent: PoweredSmallLight + id: LightSmall + suffix: "" + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + offset: 0, 1 + - type: WallMount diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml new file mode 100644 index 00000000000..6cda440adae --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml @@ -0,0 +1,54 @@ +- type: entity + parent: BaseComputer + id: ComputerVDU + name: VDU + description: A wall mounted video display unit. + components: + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/vdu.rsi + layers: + - map: ["computerLayerBody"] + state: VDU + - map: ["computerLayerKeyboard"] + state: keyboard + - map: ["computerLayerScreen"] + state: screen + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.20,-0.10,0.25,0.35" + density: 250 + mask: + - FullTileMask + layer: + - WallLayer + - type: WallMount + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: #excess damage, don't spawn entities. + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + +# See terminals for more wall mounted versions diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml new file mode 100644 index 00000000000..c02f56e249c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml @@ -0,0 +1,63 @@ +- type: entity + id: NoticeBoard2 + name: notice board + description: Something important to post? + placement: + mode: SnapgridCenter + components: + - type: WallMount + - type: Sprite + sprite: Structures/Wallmounts/noticeboard.rsi + layers: + - state: noticeboard + - state: notice-0 + - map: ["enum.StorageFillLayers.Fill"] + - type: StorageFillVisualizer + maxFillLevels: 6 + fillBaseName: notice + - type: Appearance + - type: InteractionOutline + - type: Clickable + - type: Transform + anchored: true + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 1 + max: 2 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Storage + grid: + - 0,0,4,3 + maxItemSize: Small + whitelist: + tags: + - Folder + - Document + - Write + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + - type: Tag + tags: + - Wooden + - type: Construction + graph: NoticeBoard + node: noticeBoard diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml new file mode 100644 index 00000000000..b7ea2004a67 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml @@ -0,0 +1,154 @@ +# see adverts for sign base +# see street_furniture for floor signs + +# 32x32 +- type: entity + parent: SignBase + id: SignBar2 + name: bar sign + description: Bar! Get drunk here. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + +- type: entity + parent: SignBar2 + id: SignClinic + name: clinic sign + description: A clinic sign. Hopefully they have meds. + components: + - type: Sprite + state: clinic + - type: PointLight + radius: 3 + energy: 1 + color: '#00ff00' + +- type: entity + parent: SignBar2 + id: SignOpen1 + name: open sign + description: Open for business. Maybe. + components: + - type: Sprite + state: open + - type: PointLight + radius: 3 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignOpen1 + id: SignOpen2 + components: + - type: Sprite + state: open_bar + +- type: entity + parent: SignOpen1 + id: SignOpenOn1 + components: + - type: Sprite + state: open_on + +- type: entity + parent: SignOpen1 + id: SignOpenOn2 + components: + - type: Sprite + state: open_bar_on + +- type: entity + parent: SignBase + id: SignForRent + name: for rent sign + description: A sign advertising a place for rent. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: rent + +- type: entity + parent: SignBase + id: SignNotice + name: notice sign + description: NOTICE! + components: + - type: Sprite + sprite: Structures/Wallmounts/walldecor.rsi + state: notice_sign + +- type: entity + parent: SignNotice + id: SignDanger2 + name: danger sign + description: Danger. + components: + - type: Sprite + state: danger_sign + +- type: entity + parent: SignNotice + id: WallDecorExitsign + name: exit sign + description: A sign that says EXIT. I wonder what it means. + components: + - type: Sprite + state: exit + noRot: true + +# 64x32 +- type: entity + parent: SignBar2 + id: SignBazaarOn + name: bazaar sign + description: A sign for a bazaar. How bizarre. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_64x32.rsi + state: bazaar_on + - type: PointLight + radius: 2 + energy: 1 + color: '#ff8000' + +- type: entity + parent: SignBazaarOn + id: SignHotel + name: hotel sign + description: A sign for a hotel. Get a room! + components: + - type: Sprite + state: hotel + +- type: entity + parent: SignBazaarOn + id: SignPrivateProperty + name: private property sign + description: A private property sign. + components: + - type: Sprite + state: private + +- type: entity + parent: SignBazaarOn + id: SignOpenBig + name: open sign + description: We are open sign. I hope so. + components: + - type: Sprite + state: we_open_open + - type: PointLight + radius: 2 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignBazaarOn + id: SignWorkersOnly + name: workers only sign + description: No tresspassing! + components: + - type: Sprite + state: workers diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml new file mode 100644 index 00000000000..9946e6b2db5 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml @@ -0,0 +1,45 @@ +# For wallmount things that don't fit in any other file. + +# Safes + +# Vents +- type: entity + parent: BaseSign + id: WallmountVent + name: vent + description: An airvent. Could be a good stash. + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Storage/storage.rsi + state: vent + - type: SecretStash + secretPartName: secret-stash-part-vent + maxItemSize: Normal + - type: ContainerContainer + containers: + stash: !type:ContainerSlot {} + - type: PottedPlantHide # TODO: This needs changed to be generic stash hide? + +- type: entity + parent: WallmountVent + id: WallmountVentDamaged + suffix: damaged + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-damaged + +- type: entity + parent: WallmountVent + id: WallmountVentOpen + suffix: open + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-open + + +# First Aid diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/.png b/Resources/Textures/Structures/Decoration/barrels.rsi/.png new file mode 100644 index 0000000000000000000000000000000000000000..d035f7113480cb57ba60ce5d1b8853d18f9761cd GIT binary patch literal 392 zcmV;30eAk1P)DA!RvH%vKdH{47Q@QRO2FiYRLLh6G z6b2v<_U@C{q0_xud%+0Wt)}p~Bv&*D3P2n_Zag1??|$80_X*~N6dR390P$7waIBa= zg%|~q3BYs9!z;D%S8APRKOIjf*6MWuR;&=s0Pt4hX^?e*N=JPT5p1Ck{_g-vi(96P z%DaQ!HGc};ic5pS7F}+DWio>fyx(|IpEsdyzks0{C|czQ;FV0BSUsnOUAISx=`JWp z2IpJ zsSs>*sUgKkXb&z$!H}l*i|6z?Uf&QZx=~t>-digaGr(uu^*nFU0#I{IuIj(&1w`lsn?9%!HrILdgMLt z{SWV{*;ova#Ok}ogB5~7asTaAxn~YQv>F}q++_7*`#FRF@JuizxJOr50T8X`{8~*v znx7n64S>n`D=dWIT+VX79Qj}b5Hsz(Vl^1yxUj{#;$jBPTG;~v2Bau0J~w~I96x! z9FQGA;#!TZM>2Q77A{8U|K~v5jsS+@CI_$vL5H6c{cl2@193aTcg3C2MJ}uWa3PoH zK>MYa^BkjffZOb1wKD+Y;y@+Dp4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbeaea2709e5ed76a4976565695781a50a88b464 GIT binary patch literal 585 zcmV-P0=E5$P)jR-;pm|a(BsHaz!7MB)ufx@B8vzNSXbyv;c>lV~*`= zwW6%u-dvZK27tmSx=~+`{#&cnlGkvbAQ1qH@3yv-6Q;9S>=(w;Ia2Co-0A53B^ZmudLZ>vv#$@i=-yz0YE^Z!4zQ~g`t&dgZW5}0H9}1 zBP5W;{7Vbc*xY8mQWH%85Y!PyY$`q(PXvICY?34ZFiv#;(7j`HEWjV!pLok=rn3T%{ zE~&x2=zJppN%nwjB>84RxNn;p5+-K^(0M@jT9rXuCWhicJ~)F_CW7tSlZiR92d~dbsoUF$pfZ|L75&P2y6+2$aQj^Sele? zLIO$C?>M>F_kgQhQ)BfW$Rn>FaM4mdU?bbqK$IM4`nk}56Xu1$)+RN&!i52nAbIrz Xj-I^Nzx~}?00000NkvXXu0mjfAZGzS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a9973b956eb781bc38762263f6fcb8e3b87dd7 GIT binary patch literal 596 zcmV-a0;~OrP)9d2AdHMikD|3`5S_Q)m2aBenc110-8%Gw?5=M6J>Pr}lPz>x+&=XE;9fMqv%Sx#NS&kRU-Gank>+PWCB2OueK?@|2dmRt^o%qfW#r30b0$| zK@5K2jUJOwpL^5k=z|Hg&s!G|IY#2jsS+@ItTC!0)6m(^>;#*1GXJ4{&W7Uj4JWM z5&%8OWgobGdMPl+C>@|>cCp$Sfa2mnE&y2^$OQm%JYib_KxiB;RyzX_1darPq_sK| iKpf;R^6Nj%O!)$rOu$(d5Glq00000hEAI~S%P=~C|=uM5B=bKJn~%w4p0Ee0)hi{ z+DDGqb({cI-Q3CqLTN&D8SH)@;s9dzgU3F58%_9m>!hWG$O7+@G&jWyf03s9CQ5agS6j&Ci z;Q+(wp3?{k#MG!EX3g}3W6{i12>9WqMI6$?M_Y!AoGCiwJL(>PV8q| zyi{6}LL_<*&?IzI6Qz&`=q3{n(7H}RDF7*r2jcW^9-!h?*8`Ty16R+lxkI+$;0AiQ z%mY|gc_40LDtTJ~2pkCnvJ_)8otPFt5F|?OI33gXfEDEdQ<sgV^<4G;uLs$Yi8!qtpa7ymLry z0A#B-tMrJM)j3)b5CDc?rsURFjDp*MQ<2oVHPy;Td%!fH0VA5D3-kSJ@xp*xsIW3ReKo zy)BvpfIz}njq!DM9MIpR6Swf48!h4w=ToC8A)&7WY$*Ej-amlt_~(Y-`}m90(d;2Wnp`YB6;LFckOtuaWnFt-XTzJE6&epdD4_Tw57a z)WRA7KPbvR@OEvdi6X}6055Y`2VwzmqBzhHfH)2`1ORiqJ3deb2#+I*)sX=h0!Icx m!de{*Km|FEocT{PTmA!vLFDlU=Jq}S0000rMn_2NW_J@FbgY2toT87(b(A1+HnL6B^n{#_fF1q=FYvDOp^M- zaPNHOJm;Ku?o2wVO}ce$q>8a;FdaH~cm7$2>Asc$5EwywkMwxQ`cIw;Tr)RIRTD@{ z00=%hHXJ&>@%2k!A8>#Ihzij(z})QRsz2)}0c!00#Slc>JYW(sS1aOI(*RM~uM|E| z@%yfry`($0Z%POqh!G&l)d(ChsPK7slZQu}q-__i|;^Y1PsbW{>idot&+7brBT-D&w zRLu`{0Q^GcqZI96h}(q{>w-fsK2~UNuR>j&Wix=z)ltFu{F0~?vgDQl=4sxcpTB<7 zK)Nh8qSbYx@}X|B{_N-hqFk*LyZY+%h_{b^muyR9yh~Rubcv%0d9Gwv-n8sLf}cK-5dE(N=Ee$u`0zJ}W~R>6bv0{e(}l>456KZe+SqbrwlE)z2R{&1 zWN-*i!ln)Y8Dz%Obbs+P-FxtsCe9`TuI6fR<_O+>EagFP^^zh9+za!qt~*{k#4{ja zEDEj%#&-dJOf?!Hv8nQ}18#6v2n+yhs75krh3@qLp1gJ>J>Nvs=eascC_Tg#Lj@u3 zJ0vTXPKeO};2Oj&7fghOwh3Y?pp!YC@iiVdWZsP6)Geo*oN(8o)ep(;R-WwWks t8h{}%G6)pc)hz+2Apb)L{?{x@{{Z9@2z^UrFKqw-002ovPDHLkV1nzgiWUF> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5feb377a9bec767ef6f3d611222fe42a9356c04f GIT binary patch literal 778 zcmV+l1NHogP)0bV6Wr@xpxZ7KL~)~wxM+$MEp0$uv|6oJqacBxM3~Nb@lNOCzRApFiU%f> zH(&Sn?mK6a1pQ};05`7=8QACYSKF8vqKUXvdM9b*#JRq~nH#c{1Vzu>er~ z%*deUg3lk`JH~(m6hPvDPyh?_<~Cv!k&!Jg-MN0kvtG4HFy?ZuLWS)J+Nma=fhY}U;d<2 zxlVJ_!@j9u>C&V1fb?2rZB-7MpLIHx{jIu&@!>-U=*G3vV#iRty(=w3M0yX@{?;j# zN}C<)RL2VDc5m?=-M#->K|%J^_{rk|zRAx6ti{J)XlkOx`7R2qKsH5Ru5c0mr*8!P90C0Pz{Lgjx4QxBDyr13Fm?5rH!_WgJ%cd0q@o$WF{;?w-sl*P70WPR zl7h8$EtWYGE?^mx`v>7m%ImD?5{T_%SPR-0e&!C|D z7qpoo0fbFW>;OSi1K}EO{n}PV{!bVc0{bATkqWmA;0B4RT`C;o)|DQpbpQYW07*qo IM6N<$g1wPriU0rr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..541ea0fe2fa90258674d7dfc6ab8e23c2fae5391 GIT binary patch literal 604 zcmV-i0;BzjP)UQZ5D~%| zpxM~=`L0a?RCRq*g2>DPUC_C>BYd0zOx^c;kIeh{9>2O_$43VNgbG9pV6qwocJ}Mq z?gBT)YjCAC?_Wc9(YlWZNMd#StYwCn1jW0z18GeJfVa9op+|I9_gE)@05AkorFYj+ z7M1{bt7(4T<#c{x$m+J&Vnc5fz#w=nrnr!w_z(lY2c1`#*;Mm%QvB(*vffC%yz`Sq`6ru+cc#=-Jqdk#(j0000?K@^22kajD7BC#+jtb`~AO=A;FQ3&=Hb|R$D zBiQ>Q3WA+B7Kso+(aItbQH;ha53uHp+|B;n*`3*)pa;Tcv%7P@d*_@bdGW_$0S@;n zE{=uLY~=~ZrO04R*23o`}px5cI9zyqzOaBYHk04Tm%U5VWA_VOG!2OOXPVgo_~ zw3^$lzw0Ccs=B^q1wv^;bQ$h`8j=A1?(e%#qW?J>e`|~5qXQ*`Ex0@t-Pv!*MWqkM z=Qzd{`S>1)i?av$Jxgl5E$H6e$bI!7Vua$I+n(51D~jDl#m$nMfCm5p0fZB-qcBvO zcZ7}9NPyoxpNx<|2K^xmQrj#GTdDCT00`;`BUTmvdLL;Q)=82Cz&O$U`DI(sxgQ1s z5KStndoD>Tkbnm;S`rzJ1Sou{0HuZ#mn45`A^>3zP{&k|lRq^|2t_jy0D=gQofAAj zU?!l9=GNLf6Pr2p-K>rO9Mua#XqK#Ox8z;%@ek|w5-w*`Q}kwA!?lj+2? z0Ky<~suvyC>U+Rcrm4|-52TS*5144G9?+3)Y9LAu^!PgD{}ZN#z)>ePT;a?BVUV=? Y0f|t>I;@KeBme*a07*qoM6N<$f@1;pc>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png new file mode 100644 index 0000000000000000000000000000000000000000..611825a8ea859a2d6287e58131520e60b0046687 GIT binary patch literal 606 zcmV-k0-^nhP)Aw%?ImRz-K#Rx0QV%Z$5^`F>{Jn{m47hxHHe z5AgQ@g5zUSvu~N>6HCVcU~G3d$mJVS-w7U1O^p0qDiw={K)3*4K0Fa@crV`F)%*rr zDC}V%v3P_t z0nr7(;H^|m&oyhc#y2;4a{!>d?JYtPHd~4M8o_GtiVFbS4};=SK4un4>6L_qSq5T6 zZJmSwQsg>6rOiT#qUAT5v{Z;}eVqr;nk%weZLIBmd!`oy5Zp&`EAthnoucABojnn` z{f)8T0zfgL>Q~ol3-4iMltI84vyTXFx|CCpm*We?ck=)gB~u5iRkkCOyfTs99oCJ1 zeyGMyM-MlI;TqUjkE*Ag*2M20=-f$IFBoat@96j6igCg8c>@yu->2n+rj@j*$>y%i sxf4R_U@?+(Lb;6%0kk`~=>VP37tTEF$`=t`ZvX%Q07*qoM6N<$f?ll;SO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png new file mode 100644 index 0000000000000000000000000000000000000000..91a37aa9e32c55531ab00255df53a5c3bc6e442c GIT binary patch literal 676 zcmV;V0$crwP)dv8_BWi1eG zfLg{vJLazKH)0aW0S>aVy51>j^}Eo1{gxDv@xJaU9^1sES2wYIjhSdE;#mJSO! zLfUsWztD@9uOx(Qp#k?$(H|0GK2>IYF7F zWeI|7a4;@vY!k8s<#I*J7qb5B0<31{?Hhjoe)gRWL=`}J30NQKO1lI|IY3}iz3`TYjSq&qiOPBZ0AQYc_JrRT`uk<0sRA5y z(Yi}!R?l1u0IM-seKYGs1~ZRD`q-7af+-XwAYz2E5s%VY=@;7tJ^=6uS<}H>m~MR7 zxE7PBoRBg8oP&5#Lx0DHvI}~Ce4~X@h0b=Uf_xL+#oSo_k<^E-k-ys!1%?$IlE+`4UzOM(TJI{r|^u z94MlZxP|}sr|d)HB(*d;X8|n$NKUpwmP@F%u_u5=C-)to8M*|*<Kd`3z$K0000< KMNUMnLSTZcZ!JLp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6c2378a45453d83c10c20e4b578747ff3e17b9 GIT binary patch literal 629 zcmV-*0*d{KP)RCt{2md#5WK^VrLsJ)~pqzxYYSd&<9B1$PLXz=48p1pWU zp*`r|WG{lbc=0IW!3e9OBBH1#KazEgA~khsL?vQb=N;X3lW2BUH&ww0!c3TV=lSit z?+$MnURdt{?*MNL;9EWn+FM(NsDx9nr|#oa+2tnnQr&~= z1nN}603SRh_=gg1Qpku><~l%IxEt!h0jh#uaFp1!jraO10WIMk0GWq7+xc9nt;Lc& zn-@cHr0ddss5@fjLICtOD$B1t2T0635U63l$SsVLGyy5bFqRsExJdm*LU93rZ^(*{ z%nj4|h55Xgw)9^}yG z?c6;8L-O1rAC1qEi=9klYLZW5R~gfoniNq8$2BlM7Bz1>t4SzS!+VFK+=RIzBkTAa zz5afH`nq7CL666i=wKI3Az4$CPRCt{2m%nSmKorMM=-5dLf+bdP7g{XUrBgSDqLWjH7P|Cr zs3(8d4|_$U$HJ=STmcqr{hm85EcM}U!0#V-5-ud3)g_VOlKUB zQt^=mp#&)0-q~{2Dgg=*GqE6ynGo&pR)ixZfGYb&vn9U9U1xlA|KLFAfG7bFAb*|p zeJH%qX#SjOO{d=zwaSwj0H|7jbNc!l1PQ^r?GM2f+XH}r<_23iuM?OJK>fuYAcNq2 z_v$bbch?&OAP6cmO1vt#tU-TZ4ggsp``1d@y_R7h08!=$ZpAD%1lt4guSID0V;FgfvtL={@x0uQ^E!awZqQ? zSVN^BPNrtQ2?+vc0)hN`%nhss-~}(3Hf;Qp%Lu^C6~+fp5MLq-sLi_a@GW3 z0+1M>Rw-LS&sq-@l2tl<_fb;-9mBR)y95qeGa=K5HWzCG4;}Wb={-QO0}#( zuCE%Q5F&upwM{)DKXb1T4FKT>2>X9lSR^6=wsv+cvw5kEqTzJzr|#3E>i7D}w9DIj z`wm2u#8ZII@7tZgD3q3#5prFo@o4yw9RT#)Hq~Oau0!iLx^Xy|qkU=sbcB#zoS!)m z>=^Z4Axdlqy}ggpCm}|AczmkMCr1ZPJ)x-j`i71I@+PASH92 z2ml>(ehCs}hUJ<$06InDL6VVT#bgSAC3e$n=rWetI1B_JjvVILGo%pW8~_9bVATbZ-qYTaf{!>PPVShyD`Ae$a--%yplP_8UENAhi ztm4~JA=DV+W^@Jsz0_aT$RI&=dp&x4Z;-8w06+bv8u=Vx5R@h?-x&bE^yo09Vw7W= zIm>3(7y&lpNi}<}EADj|2tYh@n0pCN3?c4;cGuHgjrl_WQzGdTdzb>xoj>t7H|NS=6pB%%`b03e`m zgVh{2l2{mk?Jv#%H3**fYIR#2e7-aQ2EmpYOI$0tTIp0;9ssIB^_QU_?=zUs^DvDM zW-G58$!&I0Z4bg_%Z+ddbEaBr61 z3G0i5?CnbiU=Tl#T9QL}0|6R8-VSNR3Q)*;dtj;rGco4mb2@ug$?ncJPhNKq;B*Ag z^sJxu(FPb)cMquB0D)NY|ERUj0amFR1_Dq+&jIx-SPcp_)B`f43lO=Fn>H*AP^Y{q_xMQi46f%gUD3V|BSu>O;Y(qvEL1E00000NkvXXu0mjf DpN8jj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png new file mode 100644 index 0000000000000000000000000000000000000000..292232c6ee643a91b94e75c68aa49532e9a3e967 GIT binary patch literal 615 zcmV-t0+{`YP)*d# zW6?wODdQS_+^$XrISd8zLTCXD4Uh7SjLfrzYyb#^Gl77(hTjKXch}kZ#ZE$;iX+hl=D3RAU!dXB)=$LB* zKqu#C90i08;_(bfoi#5B00YbV3P>(9Y**6(FenNS(wQlCjHv+FVn@LMx3Sd(=KCPT z@v70LW)5?l8M+YKH2?_F@$DP+y+qV?cOp*ic?bFTi0o9Himrj!do9P)W|x9+&)GQ6 zj1z5cSpbk;14K^>qJL$Dl~1oro%u0`qOg&sn0%gEvo@BGO7VHR1g5)a~>!0H=%r# z=6exI>UCblS^xrpC?HU-HP$sQ3LqQAOqKno*$+DKCXq#~n`Qt2002ovPDHLkV1kgc B56%Dp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b93a353892a4580684f4635c21e0b65e3465f184 GIT binary patch literal 540 zcmV+%0^|LOP)LgL}kCllSDsQs{rV3psMX zcXzp@1?sFOKog*`0463Qy4%yq{2qVzulp~#ESw|`UCIHBi8IfSKde#XQxVYCH*^^g zTL4Oq3G=zUW$fkIDF>OJo7Y7kYym`*qbLSJ5JE&kEf7g=j>k4A18`Ed0F_b|W}}O6 z6yFzqs7$<21+bjj)(-QxS63_(qi7hF0idpvx6BfVS%qQ|?ow%xl`X(~DZ?!70Rq9+ zSj8&?pofM-eay#p)Jjg0d24I|+C2ewdg?1)6U^tuIkOLLFF!dZ_xXLo5W+JM=osf&O(5VCl^(w=OfFLbd?O`?PB)2s(mLJFGrLRQf`>qUNWRAkY#Bs#cFh6H5V@ eK~$>l|Ab!;J^4wsCd-xp0000nH)LpcV1R1tF~nkq-Zg@Q4c_Z17jTMUeNG#|Ak(I(FkkKq3J! zc$fz1X}LXX+-~>e06;g_R|G{Ev=aUr!D{e|3jo^>gQ8IozW^p;ECc|-82P3x2sA2X z69HgbVTM@hAahoWi4{UDT^<0;wY?qp*>INsp;{S

^;z-yvp`&zuVYvoXyMsn!PD zF_TF;?Q{TR^gKYsP~&t?C7=B_q8kzb+yT>TUg5#CepeqK<1~PXXrhx4MzS;=_knTy z{?`CdOsM*kv*E%Ei|<<>@&Kr+wR^Xx+mRJL1*vgDS>lEeu7S(*3-7dJO|sc!d?%q_ zFk<_k=>P8mTrky4&c^@yZfQR>mQ9UrH09h0A#boUu_HpcjfDUv9b7s<9Qp<&WY2(K SmEWQO0000(BzDi7Z35E#^w2}P%%QXN(M3 zLx3Sb&j8Cyi)y#AeBsH{HvkwTew7o?#SJxZ_Ef$NiJvIngf-03J zsn$yFoC2)o@c4*6pPifu^17ONz?`Y4Cqh2@#&yRU-?DI|vLpZL1%kvBVwbPqK zB7S;j=*yR|Q!vu^ztP`61-MXzLs1p~@2kmm%UJ!^h};E)03beDil{cB!p4pOdY#;L bfPUx)8Tb2PHos4M00000NkvXXu0mjfFuVXk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png new file mode 100644 index 0000000000000000000000000000000000000000..23559f192891094743f01588496fcf187e5d7f4e GIT binary patch literal 550 zcmV+>0@?kEP)~OEB)D3AshPjN z{rX+`^h_@B+H;C}mbtWrumu?OctAKf1R4=IghdDq!1kGzG-3T$`f~s$vITfl6yTSa zsLOyte|@ty4S>R~UfbNz$2(iwmcgie<{W56U4pz^ga;|7hlIJ2hVuyORMY@{E;qb^ zTMw}c!jdrunBwO_E|p+7I0`pn&eq@W9Rg59b^sX8&ra)O$?t~~A^FXNaH!XwBFI^~ za4G=&H?me=AqBu`;emipyH-A6q_P2s9umw&g793q15siCpubRSIt(YF>7#UGk9Hx5 z6E(FFaSc{Mv+Dev5Jf(JTL7?`u{_dW!+nGZ`A)kJBXvt1kFAOr@f1}P{1$eFt1|n*qP==YsIZLm(G@_Jcb0|d_ oFN=dp?WL5X5;%Q1bAVRp9Upzo9O3#c@&Et;07*qoM6N<$g1*z}>;M1& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json new file mode 100644 index 00000000000..91a7049c538 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json @@ -0,0 +1,191 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by INFRARED_BARON for MS13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "" + }, + { + "name": "grey_1" + }, + { + "name": "grey_2" + }, + { + "name": "grey_3" + }, + { + "name": "red_1" + }, + { + "name": "red_2" + }, + { + "name": "red_3" + }, + { + "name": "yellow_1" + }, + { + "name": "yellow_2" + }, + { + "name": "yellow_3" + }, + { + "name": "label_1" + }, + { + "name": "label_2" + }, + { + "name": "label_3" + }, + { + "name": "hazard_1" + }, + { + "name": "hazard_2" + }, + { + "name": "hazard_3" + }, + { + "name": "red_alt_1" + }, + { + "name": "red_alt_2" + }, + { + "name": "red_alt_3" + }, + { + "name": "toxic_1" + }, + { + "name": "toxic_2" + }, + { + "name": "toxic_3" + }, + { + "name": "toxic_4" + }, + { + "name": "waste_1" + }, + { + "name": "waste_2" + }, + { + "name": "waste_3" + }, + { + "name": "flammable_1" + }, + { + "name": "flammable_2" + }, + { + "name": "flammable_3" + }, + { + "name": "warning_1" + }, + { + "name": "warning_2" + }, + { + "name": "warning_3" + }, + { + "name": "double_grey_1" + }, + { + "name": "double_grey_2" + }, + { + "name": "triple_grey_1" + }, + { + "name": "triple_grey_2" + }, + { + "name": "triple_grey_3" + }, + { + "name": "quad_grey_1" + }, + { + "name": "double_red_1" + }, + { + "name": "double_red_2" + }, + { + "name": "triple_red_1" + }, + { + "name": "triple_red_2" + }, + { + "name": "quad_red_1" + }, + { + "name": "quad_red_2" + }, + { + "name": "double_yellow_1" + }, + { + "name": "double_yellow_2" + }, + { + "name": "triple_yellow_1" + }, + { + "name": "triple_yellow_2" + }, + { + "name": "triple_yellow_3" + }, + { + "name": "quad_yellow_1" + }, + { + "name": "double_toxic_1" + }, + { + "name": "triple_toxic_1" + }, + { + "name": "triple_toxic_2" + }, + { + "name": "quad_toxic_1" + }, + { + "name": "double_waste_1" + }, + { + "name": "double_waste_2" + }, + { + "name": "triple_waste_1" + }, + { + "name": "triple_waste_2" + }, + { + "name": "triple_waste_3" + }, + { + "name": "quad_waste_1" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c2a390421e408472c68b94a5a8913e2ffd04b6 GIT binary patch literal 608 zcmV-m0-ybfP)7N)XGAzE2kDA@Qn zEc^pDf)-YGBBZs^!i0zcdm$zy5D8ZHr|)o%w_kU+t3?V27lps#X$DAu$cyEL<3jCLWr%qJDB}U1!n)PclHbZ#~B60~2W=k>1O5{QBzrEVWWx zi}NG{R3`eHj6Wo@X`ZjN$9Wcm{vdw1 z4^J{sSzZ;M^X$$0&H)h!NBCxgQx2GrHP600V-A>Ln`i29jIIkWGY4#907RCmo6fw{ zDZr?pQB3zuIpE8af{1_sfuI^p1R6W6_vL8@Ack_`e6v9F917vYLk36&kYsnwo8&zg z#jdaeh)@r>^1^bc2N6Jl1gH%|;)v@|*@+8}!`cII&i}!f;LFntKuj%P7EC>mhoc#o z${ye`%8e4zdLWC(k=g^MFC!{^d71%;O+^l%T&_Kkm-pWTMgy&CLXg1A%mIPl@CaXR-AF#Yq5@I?0000>?#WkrO44M78$NBmh*eE))xelW3};61gX8M3Trr z!E+NNd>H@<7Igv7Z3|`d&5bR6U;Z$tT;C|Z2RG5Y*xTh1;Cy-TkjTHk^+17vLbrJz zfE!Q+BJ(q4qcRMrjs1U~pHxwa5nz$5QPkDkSLk(y$N?2cHHLCJ__JCy>v^hz`h)#L zqf(LqK#0m|A4wdY{W1kn#~$JC&Uby4jaO$UgXh3RX~^8mppg`QY@F6=Ir|9zy8bQH z2{Z5Q8E994839P(N+N(AG(t9(#8RIFl1N-I193x~>Az-)GmsW(LYxVKG$GDx c1W7~u0<+XR!12kBLjV8(07*qoM6N<$g59J!kN^Mx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7af6fdd68e4256fa1fbb1eed2a2ec22b23da37d GIT binary patch literal 615 zcmV-t0+{`YP)|{g61%`1wh9DQz;o3cu;odE2%rH%g3-YQpzUbCEiYz(#3)>p-!!=1XRw;^h$9)G zNp{n`4ez-qor+FCBB%jVUOqb)@?$lCfkcQF48-}o=O;1YacFCRoa=~_@?r)^EE>Kv zsA^zbj$~jeYk-eYZd7#=6COum4XA#ML}AN|86dH#m;)3p(;66;_g@1_1J}>5nFF!r zLy*#;%O&>E>1}x}&y)Wfk{DJJ1bCP^NMI5k@B?AfO4{0o0iyr_002ovPDHLkV1ktE B4|V_m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9efa16cfcbe0c4385501f8088ebceee1c57ac96 GIT binary patch literal 803 zcmV+;1Kj+HP)A{UjGB}=D~s}9;}D<&=e~wu|+(zn);)|Q)I!7OULWD_7w8kyE~K99qr<21|R_P{=Gf&w*!X`2Wlq9sU8+|2qPul_21c1%})Ay_jw91nP{Bt5nR$Yg`XI0RZrx{=*`JPp=q&zJH z!)N-*<$Gpf7hY*{nzm&QB$*X$odc#C6Si#*m}*RD+Z=$%>A~Ir&lJY+;<4rc2gUTh z*&Im9)8+sVknmtpf$7Kft~|{Ei}4on`Nly~-uKV{O-KW9hc2d`%*kg}l)K^%SR@Ir z?Cqp#wMIt{W+h+C00t89;PDqKtu9ffb6vh;feWW{S|`log~6{@HyVqjg(>`%y_$Ic z?qiK|sn8CnXZdWlLVI@Ypr60~(6NE6VxUG{U0Ir0tWjTH=P|H2fZ9TLTHJ$Uf+YhL z`5TC%18J*3kmq;L=2bpxU`HY|km>ZFXBLTWj|~dZYX!fvzWk=BZep=hwxV1DqWd);YlUPha3TJgb0> zr-H+$W=Au?V(M99%Mm07pQp)$Z4Q{S6PW?tW}N@sd#_|M7H>8Om=_4-YDEN6%}(qL z;4GQwce3Hpkmc-bfFtT5X8L; zcOrD(pWwd!199iVf>^St3thC5ib_U7 zb3fiCaVQ42ub=ARI$kas@9r%u4-JZE7=QrC6Nkp5@1~9(Q`XGSQAZcd%To+MYZ{qQ0Ky`p%t_Kr4x zw1T@8x_jrA5KCjE7tfIwUb}fCR#enDSc5CC`Tld8wl{r|(yY8EkKd{WfVEdIdW-!B zL{?vJP+|y32TQ@HuVw%*IfYzb9natI(#}qcjvpyx;sLcU2k6&tm)yS| zxztiK0C$LDacL!bX3>X>9|GbZx^$vIhl_1m-y*8}t`JG$!3<}EjgLBQDou`%*U$_w zFpwA!c=Ys}6mdapQ1?SI*NNxJ^#+H5%>knXdM(+xE`ms8#PQ@!0T>=0hWYTGXxGeu zUQ3zCDFpBgH1}L8#qeaH_EQr@QAREUxQYQ=Ep_76bE8zLHWiUHJy5BB6sEayPD#zsp)5PJ(d5z^-; z*yoQZ2zIftNQ4MVtSk}{#b~Vj0cYm)?d{j)Zuc&r;6S(}_hxS1?%N^pSOgAtmwj9d zrD^TnNu!y|il-TX0LXJw1^(Uq!lG1DuQ6X0bmd6~AhJ?f(wsj(K1iSO5Qsw%Vy-;N zK)tr@i|*q9@ygm}Am+-036EI<9jKk9;c)|TUEFr=S^w>G^sdE@j}8K{Bu3(Ro>;iE zzZWSQ?D41uSE_ma7_dQq7%ZtR@BH*mHUM;PuHwah0Fm}}kCkTgPCRV|L=yly15D>x z6iCbC2EO-+akA)IJaqf64L%A zfi3U-B{abez#Y0cyJ+#xq9}Dm9gv6%Z>E^%d~F60NCb6YAdZ)*6C0k0$QdB#QN*-7 z%>aq1%a;VUyuUL8VYG%wG6Qiu5o2e-^rJ$BD^D{(V!t8>Xt``>ASv&E28;$S+r8XY zwd_NXmNjZGQA6Fk^14q$`M)8F;YxylxXdC*APo=r0wrco?nCE%vH$=807*qoM6N<$ Ef>Rs$_5c6? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a04fa07857b06f8a56bfc0c29448e47b582591be GIT binary patch literal 482 zcmV<80UiE{P)Fc`)&@Fs#CbsHW$Oc^K)PhLduB3^csUHuaK z9DWI}eu9ZG1aJNUQB=h3;9+zwY=U?b>YliStePg7sYU1mqiGxV{PMm}LpwuKRtAs( z{6B#G?Tt`%@9^|Imlyzy7YZJk^Yh}`Y`!=#r%~|2{>#t`#0UW9<+bH+*WU-diF3e} zDyt0S;ON*0LJQES?}qZKbpjNFs1qXyXCXv8q7^Zb7C^W9&Rv^4_l9g-+p94M8xSo3 z460k3%0KU08!nyF*XM1j{A!} zKnB6{9@SFO6M1k3z#({Wl{R-4q$P#Dy;sjbs^4W7zjXs{1}`2{=6}SaR%0_ zWif{FwbXAw;Wv$}GXP=5(;8X>aENHx+j7hIr z!%;_@{OGU***!iDgkS+IO;5@Zd6~O~XaEQgAQV+Mf+7(LuwI-q4ohV*knOfQ_fqA& zChFRYEH4xl3nEOc2t0ng3t@I%ySnp@!uVKT{_0k zl2JfDaLm~NQ2nMV-vk1^HB<*AXU-!5pkta}0`W7$a!ninog(od&PZuFCI)~dc2YW% zWo*NC7zjW#a+qV!;6ku-01zY?Q=$b%7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png new file mode 100644 index 0000000000000000000000000000000000000000..dd414145a0bc7a849a50c9f532d5298a73f26bc5 GIT binary patch literal 452 zcmV;#0XzPQP)VQ!P3@r!5*_-|s6%z!rc}0X!#ICe~t-9Dwc+YJvf869NG5;_xn(lm12k0000{ zM_-~%i&iZQK>}%0xhX6pB`R#JK?_R+7dGdOcNj-)-o!HrJe#?1-o^WS_Z}ZQ$EK_q zzzpF30qkwA_r~oVoL#sk27toBkdJu-e&gMOKRl3=4f%R+uT4iFLI5ZpODqq)|7z3+ z)_{w|S2@W3(WwxGEkHK2-7}xsPJrSN872fF&4d_-wId?31+Y7PwNzn`^(K$gJ82H# z1jH5q1(F-7u^*~?qr#t*(^4DkBwv&R04e2LKG&Zim{I)dy2?Z)>;XVP02#OMq_8kR ztv_Gf0cH?<-=Xv8Pa`)K^%;JU20#$hX0+H^JQei}X``&`4_TE_>*@wMY`cC=Vb` z^<(k?q(iy65z&d73;=={bq|nq=X-b;kgIgXPA>#t_5fnY470240f;)KXaHG~jB(Be{qH8tkY5b*z_tY~Nzaaje_jte0`@Qe| z?rdcZRuiBJP&Ghga6q-Xws(2mQa1o34s?52m(Oeb=IQJxnWJ4-Q<%$|Vq$=?Em1j&_Jejz$tite6kOiKyJf_6Y`nYBQf{35rvJovt zY0K@-42R^HUo!v}TAZ0;tDD;#V&~+7_2>(u)S^%&h?1WvO6?}ZZkHG4dAzc=UOW;_ zfHG@tBFw7*KgcAP27uC67yO$*pwE{~38c)KR|SBD>3j)Uj8+W*Q3r$p{q^nx@POEI39eGv0#G8+15U{n0Pk}VHo)Hr>228RsmIS>FTKp8 uSPFn3@J%3))fvkst_VN`aZ(NcYxWK62u^*}r!vO?0000p5-Nd6aw~{b zfMLoO0M6b_uCd+piSVCd|IuMa4giEJwzaX&UielNNko;eUk?;J>}<5Pj$td zU_#*<9{~iIX0yTPalJ!|LI``ne6Mi|$N8rpdpsVW0U;{K9)R$~bnKa8nJ32F><4K8 z1Y!07M9Glcsz32SG~R|u=L#HxfC6fZza5Na;xl7b?cENfLpF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..05f1f433c8004bb1a2d86c74bec81482b7ea4b2b GIT binary patch literal 593 zcmV-X0eeAC>Q;w3Xkd`^LUhowH_M6=r0`(-jLouZZaZtcN#Fy^&h8BR{AT{o ztZogdu&Mx6fd2RZ`}nG6GfvD57!txZnxUVCSkY>d#KPbJctK)3*4-tX=G zcK_z`LUs)}?|`3zEG_SFL8t-*1EYEAtknc4Km-GX3qrRLq8!C5!Xs4xwb>sG9`4h+{s{3Um`4ucgjd`d z00aaOrG72O+yI68(mgH%!G156yTvAs*A0L{uw}*)mok^?@s=M#6#%os>_gjO@mdN4 z0SJ)EbUn#tbELb&#tp%p0pE~EY{PhM>rODs2xevqg(I2H(f;$R9IHxW`Nnw6P+FXJB@!0J9o8BV&HMm;slg5Wwa(gEPQh zzt&nJ?EP0-b7*|fPPD453`pA$3m;10l6Umi{=I*5^MVgTR@AKuR^{HP!@B f45Fth{$=zD@j4eZf;U9u00000NkvXXu0mjf;syUp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fb0c25f68d2f93713404b55df8044a26b08888 GIT binary patch literal 731 zcmV<10wn#3P)S=EX}gX&TbNW z=>wacnH}Eux9>c=v)O@7))v4PfMtE|`|_nzCWMoeDp1f@fjlt#?qky`j2;_CaiJ{QGO_Hp z4Im-jzR%;R(PnAw?rtL-lXHIC01UL897HtUgUqcc3J;!}fmv#+SS3o%`H(BOZ^Goa z2>P|xz{EVpkwC^6TN}yXX1aoa0Yt5w9mDlN-Kg|~N^)fYsx)z2oFi8jaZQ^S?Hjj^ z{}S)(cuF~$lJGFSGaQmJBOFsKZn>;XbZu?n%7zqqsX z#YpB8P&{(ws<@tBsv@Kq*|i6#`%enSuOEGVej~9@jJ^C+g%^49z^` zPaJHsB3<{ug)?=SdsCk=b|PeYKnvFm$bF-$9^l)K2?IUcgno-PrxHg(a4Sz9ux?1w zd|U#}dB=7SVD-SpH=dpOy5<3{Kh@0Z0g*B?#4Qja3u70>o;sRve>2Md1Jd N002ovPDHLkV1lO>?`sGYtbJKs!qR*SH}A%(TnDfk z-@6l2pYJ{3E!a2E*Nv+k?fIGMS#1zo0BJ6blbNhqOUAPsc26phK_IUKVGAJ5t;WR^ zi?1kRts~^k+D|MmJ6Z%#sJ1ACZQ|s7EHf-E@lBj z%^D-{XZ{p=2R?pIWeYIBoDs8p4@eNUrqq7d0OU!-9qpo)Z@f}k`K%9N3((x?6<06& z%3~`GMIb^ZQoFIfohFQii^9U%8L@FoNgy1YesA4_V jHFgBB5yVYx`9GuIZ3{ydi?>R;00000NkvXXu0mjfM?*vq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a915a817fccc51744c0b4b088726f9a15775d3 GIT binary patch literal 907 zcmV;619bd}P)Xs#qq8V0X@nw!TG+G*gmB{~ zqNH_!=&DVtHm;Icw2s=iaT7t&A{BCx{Q)N?$q03vw6w`5<05JTyWhF*+*bat4T&DkXY`l z7<23FZ=MGu738A|N)POzAMF8#0SNNU7l3d%5Wf-NvE`nw!fPGG@;L%w1cccE^${3~ z)Y8cCFY?Elbbc!N(RVtTkj0bb`AiyLtP!e@E(lR8uD5=CI_dk|8>S(gx8++ZFDKn1#l zvJ3|}Q8$w6!>hdqc}%dS0q$$-bb^i?+DTKLDO%|9@i`|1_DS`eR~2UsXEk$LzBI9NE{)_)b- hLWxZt-}ay7e*h7O*>b`QmPr5r002ovPDHLkV1h>ol*Rx6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b562466a7d12b8c1fc462f10cd377a9c84695df GIT binary patch literal 649 zcmV;40(Sk0P)~1eo00*-kti^4jZ9 zMy`2&dlk2x_EZ304w-_R?w!m@8UcZgFHaA#HNG6m10Vn*bHs4bzEaP%NcS!dAyg;2b$zuzG-CeK#8-R>w(Teb*Zssp~R%00LOw5aEJ;?dE}Ud4N~WD|Gb; zTYc+kBQkq{&slo}$@PG?mk}GBeZbWtOfa`u*G+kVSM=ink=i2|$d=neJz(n*L{feK zi3fO+EcKn)1Ks<_Qfp0wJTW$=dB6pi2f)WQ!}pJpOaVk-q!1FJnfQ7@4`c#?)eYzq z6hhRa|Mxb3=&lL*(1;yS-2 z?rv`iB4U_N|*6Kln4s&QK9GysBt7H!gm`>2{WB^X;5 zY@K`Vw37g|A^m&^1ZHZwapiFL?MHdf2BE^Db6jx;06~lCeCHK}iOqQnu?A-h5Q61D zK@?;%mH;?QJlyR(#9vf*cBMJMx}BjsLzD15LJT83BSfgJfrol@S_jCOS0_Zxnc`(M z9*uPXo&kQIKIVKb;20q_v@kDM${K{00oPnGNv8X_l{jy-o_?-n%d=Vr@YyvNxH*}k zV%L1o0O$>60GmKQb0IC=CV6EbZ7y)}bmx)*RArhAK9#BCSA~SUGC-l>neeU5^k>8+ zYX;Q0z{jX9-M*bl0Jt(h8~da?QwDmkVWGY!A}k~mo&lFu$^c#ffh$1%EdvD7XjbDt zkZJ~eE3;()&r+8rU*F09gr>!iT8(dIsu34AwgS*bS>^y8g&LK z_xjp*54Zu82M8xXk`_WAK7R6K)x!j+xtVtw!UvG1g-L{1c1H|A+7@yyN=L1>y1Tj5 zq2!%hWEY@`Y_6qh9{%w6N zv=c}S`OX2`1FV<{j6o9}ZYVc=kEeS~p#u4qn) zqvO+pNP#RIN&q%t!*sc%CZ|f3*yh8Q7`cRma75f#TV0$W{Cs_ieFrfJL1Kys<%kYj zJ0o4O4U^nG>?V7^jRevkt22S4zNa6RV6EcK1x zw!kJHhwoznP=wQU+UH84E+(YDA%gqB0YDT_j^Neuj2x8*kXM2x(SHN7^a9hYI2b-A zCOkm3SjNp9UBZm)G4-l;H+A6-q>o^Il@8;Tqb6qMAKmhA|EW!=_+RX!H@&K=# zSLo{zw))o7Mx^!tpVRgTlIsC&FC#X1`+%=Um|$+xu8VnqSM<|(`pzD~K(^fG>H%Ai zAd>3)Pdvbrq^a-J9yq(bFKmmY5l@VbE)V$N^8om`=4v=B$P_>XMhYPjnn|b!^gt#M zSlxg=K_Ns_EXe=&Hh<`_rNrb)g7c-+<&V7JeJc*_1Gxxr^$4E_auGm;cpw)6|Ly@_ pkI-S(cP;`b0;Aa@Y{(Lr_ySexMEk4@LW2MR002ovPDHLkV1k9xB?bTh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb8bd45a6a3abde915a6037f4d5583143f20e07 GIT binary patch literal 665 zcmV;K0%rY*P)9Q}AdHGgkD|3`5S^`e<(p=|nb{fFh2Def?#|Bp%s20TY#^AL#|JYU*EjO~ zmbkpS$%%|50bmT%)nY;3Tq%@dgIf(T%Nisg^GbC~yZJpC$IbxvZuMdI1OieeAfU7AF_d0j-o*m*37M0_QDgX!?O#6#-lu@0Wmk?vH z#{eN%{t9A2CSwVJy~M+vb~n1PSF1>KfDOl8xrZjCY$K$G7Ut#Rng*d|z||K_qIB0!_G9~v(z{+)Edw}r^#yKD zrdYAdPy?VplmScv`SgXPbQ_=X$v{$H;Nt1dBm=)GF!lwXm8tDlg-lW`0~8vb3E!2O zK1N)!Wz(!0!M)STLuWE zS(<;{su}QInJoi&ma6m^hVgGg(_lzljql1-BQ9=i1)z!2^a0w+MWg}nz5u03cWMAq znhazDuuKLr0pNWB=4sNM8h{{hBoJuPbo=TDwl5vCN48vt00000NkvXXu0mjfF}o*4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f603bfee66ad4408e69b7a851c95eadece6d11 GIT binary patch literal 860 zcmV-i1Ec(jP)v0CeAyAUy!MvOEr+J(9hf?|>G zqziWd0n3%jsl1*Hn&BGFW9b&O!3L{p4&roAukb26Rjf#l`Qy!Xzz z_nx_#6ghD7>TnBV-$1W%@6O$)U9?Rw1b`T%2lw@fYln}YP}a;$Q)|0~C;~v9FPt_O zefjiJnL`{zL5MD5tC6t#}lrbhgX^N(mNU&j;#4 zMQj4(3opwwa3B*(9F{pl0E+-1#0K0))EkGk#kjKI%G|@*x2ga>kRKlw0y5d%7W$R9 z9#&u7> z#(zO^MD+mAnHcpB$kys~`CL{+R`r^}SX)m=&XgiRuem;FQ6LBK)G(gEZz=?_Jn(Fx z+;yQi*up}NO7{Q&qyGB+M-Y$Yx`PjXBmF=u53mS~5aRMczOW(Y$$X85j{Flu>A&sB z5_y1y@Y}8I0XeeWJCPyophPE+wIg(S0DC$0OI1&OC$udFvH7YVKgueR4kl)V zz7==s1G@Q`luH=}P62vf01QJe*8)Q#a^2mD1u$G50N{h69K>}~TqO2DQaAP5VHupo+vdT0-=TB%Z7#6zmp)@qE@NQp*>`_1-E-pEWg|9~?m_m}Z(NvB-ju3UQ>;qRde05M2+Y->?-J9qDKtQj29=CxYrz^#iu31&WK4=1wX>?dgb)FO6Q@tP#1dp;)*3u%&6n>h;{Lri!Axi> zAz}K}gjiX~dG6)a1^LwTtQ<=L^^}kRa=nEh;xPa_P6bi=SZfK%J9y`WI{1l#h;K`U ziU0s5L|=VHu*|50L=K>mej-Q+1T?oMqzH!xAOe686Y!mgxfmk9ar3bpBY5B84r2_v z-C6POV@Y(jCu{-K7b+78F_|j8J>lph)?gom^k!NeaZEtF?efRuyQ%ZV zO$m$G7J%%lfxL6|@>w;PGjbtbKH?@e zdZ2q3JdhE0#^%Mb{-g@lmMU7Ci;|psKu;iui9J04$Hp5AR9 zMpkn$ZMOv`Ch|ZY*eG}c10p8{{ra;-dI4oOB_IVno61Ix^mUXWgxcYEhN*nG1!Na$yrRz|a5y002ovPDHLkV1lDSm?8iG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png new file mode 100644 index 0000000000000000000000000000000000000000..50c40b137ba645c8e256c6388e86a23e1fbd7caa GIT binary patch literal 851 zcmV-Z1FZasP)eLoXwOxpy&_XMAqYK>#qEOts za3@0d{R!^%ABbCNq1csnVHd4XQSk$DF{49EYsV2Rl+g%d&P#9R<-WWmlgWYf<>S3~ z&b{~KHsg@Mz1!1WjH8n^`G_7qdO1WTBN6~&kdB=kjUJAlJr|q2v`F2ug*Z$;Gk4K= zxby96>>A=A3PPlaqM37+7O!{psIvf3bF)_>5rbyV@PG~2RA!`%%sE-nzuW#ujUR`> z*(N=>e^+hJ1WDvJ$jn6oKydTUf}xtBNP;;SdCuO?ecErdC{O8? z7$DzzU8l)Y)l}lN%oze$1OOpPz;i?$ZrT%L%YrR)tIO}>0(e7yeOL&{ba!Kv;+{WS zj-FXXXkw8$36%ke;K^KHTqBM8<}!ttgBn8!ievipU|X zvDT|$5^x_T1`*cakN}5XIwJ#2ETfyDY!~Ojt4}^19r-lubW8!#1G1iZ$YozZ8DDI) z>DTW+G*RmW2ho@BM4b~O_~0367M=efq3Ob_tJS^xb2&eY>4Z`H_k2UMnNm0%PC*0<_I*XF0XAZ8Nj zfh_1Az}ksOdnHr2Dgi`bgpff!&@WfTk zlQ%M*NJ0`@1@J~i`T&=*9~c5;UjXuYpa`tL3yOH46aj;HpcDbJFMzy=y9*0o5g1tr d(677m;y;*ARh(7|)b0QP002ovPDHLkV1g}>fhqt1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d79361c643fc2fef32d2e28cf58c5c2d3a874b GIT binary patch literal 850 zcmV-Y1FigtP)|)2v6F%M?_a-o-XRX6AOs?`0=g+7FgtUhqh`GyAZl#%tQ6r95T}IQ0I~cPaRkII zA?Kp-Vd;}t{n@rg3*zSVl#I!^hMiUX5<&zBE?vD65KG9!tTlLY&5vIj;_2g$-I-8V zLSpINYq7D~3f-$#7vzg?>T)avBq<>Qa(@d!q{aa3I4%r+8MlP=4&GHlKhzTi5u44n zD*!+V(bq^3N@gq}$pKU{N(6;KKzXnrMR+^_5dehffbU7HiXr*j!xwUl;FA->+8B1b z>yjMnqyYAXWug$BsVaR1Pam-c`ygce^q?n>4rn*X*W0Eji-KDL1Z9~KEXvUUd-(Q! zQ;hGCMiC=(kYhc_34>W-^ONTbPL`?|X3ET2KEDV+cbTy@D)Eh}iQqk;_DwY!Md9Pe za-)^u6;AI=-?|%G2@nIGd%*7jW~?KO0=@I#-fd@2Jyp8ahI(K>u>7jv|1mKz|9Mwz zZ|{ntk&*{=3HZsEza0?2|Lll!C$i#j$rLMVLYN23;T~|WUl&m=!QQY09z9#PGH#3G zN3vE-Qwq=L%W^K%15rmRN(A9Gan6%Kqm^^kCB6p;)dPGd;mX>Um2qLO_x3)#I|5V> za8ptb5a|8TKuPu=8kok?852(bFc7=8DUHv%a~v_D%XPpfY!WajRD>N`+&&f`AE)B^AaH|!dQ00g%KGko>UBEabr!TeeP79q&P z$IJBLOM^N)%QQCHLtPPpFSrj}-z-A5Vx)(6j^JIrWqmassMI^6zYQH6i&>#Wo?d{B z$$aCt>qLwPwzs$R?j?Blt~&OC=Rzqk0(dcFZlOjOPV6y(jiaqP_JQjgN1TR)2NqX< zn+cr6;wsVc!!ZHZcNWO{=2B$@J#c;O7~PxusK+B`_R@=2Rda-)9^tBQ8Ia-i00K%8 zOYa*5OWHkxg>b{M$z?zuhkRf>fS|X=2O=ZZbQ(HTi->y!j@T7k!c{$K>r5Z0MCQ9Q zyJQw1N3uuoZloB%ms>#kAm{FN;@c75-P02YC(>=C{k=LyW%0o?FTX@g+!ng9R*07*qoM6N<$f*P%b AyZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b6e6efd85674fa9683d7b8e4ed7a249bd97a2ed GIT binary patch literal 666 zcmV;L0%iS)P)?K@^22ux%=TB3hUfRzd;>Ok<;^C8I}y_7 z5$t^ri6Exa#v&0SC|X%0B8t&i`2aCz^=@YF%fcGnFt#e#DtF$vR{>~3dVB~3W^%f5ED4=Cfui{G+m7h|B@jYmWEOB>ayM!wC1_!vzm{>$D1x zF<)ItxKlidKHqc*EdzW%eav}Zz&1j1Xkk9LnAIS(47mD&NtEuLYEjv5l-~8YY8k+} zt1obKGR2Brh8h6mHfl?^Z>1CfR|aTepL8e6z*W1O*{l?X7)T~O11?RK0ek@hM}YiW z1_*@SZsiR4uFRGJ+)Gt@cp0eggr>oeyc*w?$wpk<*a|=sCFujSm6J#V;C%r~lJ3L+ zq$C+g1z?&CqyoVE0?d=7J23!3;7B0Qr0Mq64?f2s-qfm)h5!Hn07*qoM6N<$f+v<1 A-v9sr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3ffcdb6e8cc72cb54ab70cbc6d1af1cbe4a833 GIT binary patch literal 680 zcmV;Z0$2TsP)&5L&CgBiJ-Khb zR#kEfAp!*BQ<7;N_RnCIw|XWEg+4B z1jzj@1d-eWsO{q-&zDIpWOnc@3H^{?6hyo~Ra^l8EJR$@E z_O*KUF#+uc`E%t<6;;7?0GrZgY-UR|z#g7nJgLE7QX4TU2RY`0oXE2(EZ*5WcB+(O zSSc%~eSQ&u=`dq!B=PL@Q1Bd(eUm|>DE$1me)!1o2xoTY7FR=^05RY>2mBde#U?@< zn4OKaC1*^2Ri@U4W}qHuzZ4uL#N_e_NSgsu0Z~I7ngRFtbzy4>)+Q++Gy}Fz$|iz{ z8sgOF03kEL=O`f#WPpp(W}qJae+Hr!pamS3%DK_u&MFqL9ky?n_Td!dxIY6?3vgNh z5x7za;13!hiKVdA=YSLv7tBE15NG<=EO7?XB29=h5s)UtnYAEkh`#|MNIh7(ZQvyU O0000_YP)q)K zRNs=w+js9(b*b#M<2_?)0{FoTyM{pk!R^3=uf9nFK7AzUUlYJ01o`;o$S}n7;?RLF zxDTvvl8~(!>EX!{e6dp2qtO8K%Ee?Tk*62nATr;0cHPL71|)cTR~`F6TPy{J02fmO zC=r77tzp%%53FxoaR`|-pyQ6~I}2oe%aj6zG{7s2^$1se%YZ~?4e0r4PuVsSVZ*VV z%YdB6bl}v03=p!p;HsX`x|9aUmKt#B!xpPAw}742!Wxh^`(xy*Z|t{qF|!6pE=zs0 z45J$OcHAj#)>j5yapfTm#1PYf{LuZn?3Z*3KmsF)5VL52L0p6o*xZ0LkO(pS8tU)8 z)WD=IPvE*{861@ zrq|<_@&Dd4*q1X_zcmrz(wc8VNE<9jvOy@fu_=Ij2e%xc5c&iwLibu|gLtw40000< KMNUMnLSTYtR~xMW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4814a838e6fb80b9136e7e9e9e88d558db3869 GIT binary patch literal 689 zcmV;i0#5yjP);pRa-RKkK0V+^7P4z=xe`7kLYOGFzFn020knaq~5J6pGr15dJ@ z?d+R*e)G;dyK{;Dv(5p|0cr-geXHL&?b*k*&kc10fN^s)N>}4a+1C~8bj7ge&JWwx z0?`JjW-OGmimv~N8Ax|>kj&dfPY5jlFY`(v8vw#JkRCyoCxkD+*yxC}v601Wi$bt}3TWxkKoG|w*L|*_5lDOfc8OMsLE1SXaH zUVR=^+5n9W7kCR3FC)LAs|f&WZEbE+TjB=o6u$Y!M_O8m>_T_|Fi+nZR+fFq}CfoU$ zp)PO2O2J5N|3zp2SdIflBA#;aeIFVd_Ka1RM&~S`1pvvxGUWJ#Y8wXvsCDqr0qUW@ XAJrpDbVDPz00000NkvXXu0mjfw&*q8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d788499313a4e57249941dbfe3a3064a8b17d2f GIT binary patch literal 635 zcmV->0)+jEP)2M?AjLHS+*XDZ_>`}&Tr@Y+4=o;GMVth z`Um(2_*($=wKcMYJFR$}AGsNuWq~R)WoE^+i6Xl&JucdNXbr^ zC^XWxU(xSB58%1ZVRy?u-w8B#v?h(!rp7NEnsX>csgrp?W{zc)p%fUM+;o6c=m{lT V^!8ndFmC_=002ovPDHLkV1f@pAFTiY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png new file mode 100644 index 0000000000000000000000000000000000000000..88f24bf8f6aa2a09ef00cc95597780320962f2a9 GIT binary patch literal 636 zcmV-?0)zdDP)*Grmexsv$AP*ZP?HMX>stYP!{)J@tGh!g;VcSkzE zjNjj0m)rv`(lfw8<`=f5AY1|FW{30Etlb1CK+MgO6ofJpq8#=ek&!EaTlOc1=XCRs zWxaixnV#ejUO-#{5MXp--0`8@8*B|)u_pPHqK(y4H2~1z(H^hsj}S#6c=RAfvXb@y zARvG^&3g$f4N#~rKjS4JIPZ3~)&Hv@xvR~WW zH}9=5TYDLLetDy&P>x+hS9e6Y>RQs?AJqT|_4kF%zA#!mt+9-=G}0SnqkcXYPaAwp zlYFvg4?rjZb^^hyLJ7R8EDs1FQ(X@fYhM7xJ(T&-)BrenU}f!+8XH2q{s`XQ>}T~i zO8QCwgsdLG+wne`;n~7`FdqCsWboh+PC`Njz;_-%UuWAs*nwckHe;59odFJ`k=*;B z?Ds$+ctHpZ09@D&U6-rB6oAzO=tBZ#arv0HqVCXRB1^R)KWh~M2-!V=U1>6_;y2;E zs%#Iak}JSYG*&g#AI<|rl*8$_0BcYJ=q#RA^Pf;apcNpH2xOORU{3&c5S9A#FQZR% WtR?Dq2EP6P0000g2@TM^pgqa};9h9*sV8^M&AHe#G_;<+?2X(q{) zZu-G6k2}oy%{gZ#lMd{&4gd}SS_TLY4V3DAdo>$B^xptzxWC(ro_@bQ7Ch2ZF-Ltb ztz>dWAjSZ-42#w`(-nQrIeq4&2AO!axF>`Wz{r(TdPlX4SBu^t5DOu~nOtcvPc#G= zy**rd{&W$6qh5RQTAH1UVan5fWfD3Jo_M&gN6S0SVNIjXc7pAMLMK4h@=TpLJKM6LuLmDkm!Q!Nj;R0F@cPpzGkRRon?J>Gr)z z)qi;$tI-_=nKO!cO8{J0;(Kk%hq0}Q1{rz#8(>k(q)|4`y5T5&q$5u-1IETntpBi=PZwafY$J~Z1H=P60rzdD^w-|zE)lv?KxKoeE`#1LG zO@GC)pkK$I#s_;{D*nZawqpPSA>wVfww~3yW%4oc5*Bw{)W#{E zgvJ+fi#foyN4fpt2^!;WvvxSt8PG6pnB500=8%0OD?>Rn52_lcudcS&{ zBhNCEpJF2bfnY5llo+a(so|yoszIF8zW+7*11G0st3i=}G5`Po07*qoM6N<$f_;Hf AivR!s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png new file mode 100644 index 0000000000000000000000000000000000000000..08da97f26df03a24b3e3d177d97704dc33a67f3c GIT binary patch literal 750 zcmV*Y+bNOE zSRg$o+o2<^5ZKMvF1O;~Of!b#=4nS#$B@5y0PE3JG~M`afw&4l{T}GX{!2e_B|L}N zsA+sbjM)%3_l)$LF#E>e>Auz(fSEmfaS+#%X=z5|`1v{0P>jF5+!XV#a?bVZ=#~5L z-h1v20L2o!bEXe?+K2qJ*N8x+ zE%dKnjC=vhuUa_*EUXq}uf78cgrV7KziR;MrO~cVIaXi1t@P%TfsG9VjrGnYs}0cB z?3brkapl|&^I{^0_54qS14Yq*q^QJVLlEB040NQO1NOS6@zmRSq_SRd;sVZgH;Sho zxt7Wr@|joj%~j_B#Sri&Xl55fP_1gp0VST)=kx!Ky$Q-WmHXv&2VlD#csTYMM_K|h z{xpxYdPMw(RM zL=8w7FZ8|#HGc<8b5k@X02^<^=hKV77JxkmIHnZL?FS!Zui{Q+mI??4Jfe3AK&dhZ zcq?HmDjo~2TGgBbZpjhg)zp05>7MoyK~y+)`a{GJP#;rScm63=5bPBQrHm@2Yg`pT gC5W5a^6%dT!;r2qf`07*qoM6N<$g4iHkfdBvi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c14dd3aaf00a6ce6b5a966f09de8ff845733848d GIT binary patch literal 469 zcmV;`0V@89P)DIh8XGMGLa?{66Cr&b z!QKb(6%++KZ7dQYLPD%kBqEB@Sor|w{i}1{t!{SqTn&-?A>7{WkojijzvFH~j93Xk z0x*66JDW?MZtw7ucK{zuZ#-VnEBO`#R`ex%s^qyY*RZZ;eZc7Lo z5F-E*l(x#+Kb79_V{oLH$Cti1J!-iDfEw4Aa;`%mK7{1;tFGXR?EyeQ0MYH+BxVD= z&sW~#5fI$(s&domAl?}OK~S5~;_s4&_58qxFan?|RDXO{3(mtZ5P+z1B+tyI*$`|G z6j$@XS~VJ=@QWjB4?w6mZbEASf>7H&O#j~lpO4=tXdK1zKzRLAjn{L4+MIacPd#u^ z@21v^c@H2o4xI-OL#=P$4cxpF5(JI}0_kSVO>70Ag1FSkzl`1hk{R+HiS3#d00000 LNkvXXu0mjf?UKrW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..09240c27c23e7b73d5bb0b8faa2118067ea862a4 GIT binary patch literal 521 zcmV+k0`~ohP)oaI*9FD!LdKVK~!)N)XBxk zT^-&03u*;N2OX?Z(V~-JD`K>@PFdVy-YX|0As?qnG@^YW-xgHyUAug{qnlj4>t=H)6a4<*v*Z}BgW2H=+ zI~4_Sc=}*tS(YjL)qqJVsmn2Q0R+SQqQ zGYItjc<+Fe%y}dLbj|26vrwP7iE7$Fm@00000 LNkvXXu0mjfFK6MA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png new file mode 100644 index 0000000000000000000000000000000000000000..395922b8cb053614798b774efe5b61433fdbcf8e GIT binary patch literal 461 zcmV;;0W$uHP)rITw3)r*#*^Kp3g+aKEJ!vZTIQC>ZP0mgpIE*yx{rbN;)!cduxL#g}ndRcou_L z0oa_4JA+{`)@cs4*|h+qOyo--tN?5tHXbFf*$Y65>p7B06atC44&oHxFJ%QlW*_X9 z=&({1zZCON&u-iRKq#@3<9*fN**h{CLzmYzl1dzc#>1Uz8AR9n>kFa$;>rrp{u-#3 z&jAKOXiW2+0q{%L3VGG%6VIgHhaAERkX=fv)pJ~NABKSd#4Cq6PDm+)I0wRY4deQK zD*}mY9L3H72rC}fFg5@~=-Y16|IY!`yIyV+&4FBY;{B)8YSfkO8hIDDn#MF54^*7ZU+MB9 zZN%5Jv-m+xIUz6zmG19UwME*>NxdI^#AnpNcpOz@L|! zLRCPDoFxEAPm@+6U6pbZNB{_Ia-5ljL0g~+vFD?4QlFU~;R7cDl2h*`zy)UcwSBu- zvX}rs&jhU5)snq@KoaaBM231J>^TUw1#N^9U{wHpZF52soJz2ah-jZ2_6%S6&!|KM ztc%aef}4a8qT7MrqiM4}wnH8y0Ej0iKVK$9i|4!&H26FFB}81%hawhj!Rl>Gw|9>; zJCEu!T*Gh^LiT3tgI)pIvQ%zX3D{u(kv)KcH1CGymIN6>S8xYWTmT?Ggf=8C*-L<= zC9~fJ(w6L10ar^7B0$=by|=)&WWc9AECF4XoT+z4(~?C6%wJ0NF|m4BbjB|D2G!Nd UYtIZuFaQ7m07*qoM6N<$f-+CUs{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png new file mode 100644 index 0000000000000000000000000000000000000000..947f783128b7b35012a78778cb90f4d782e53f91 GIT binary patch literal 393 zcmV;40e1e0P)=y+3x+l6z*7jLFfDl>(#y{{zr%*(cG-2NNfw48St;WK>Kll(N@&G@etl zVL!y3b}jhcS*&8sE4>5&dKbr)5CF@TkN4Xn$x6BcSPmG6q4-!E0LwVaOr#>h0GQlc zyVnXNHJ1W_?5Y)M#H!-0H37hYH^*4mQ0o#fL!9$M$qL58Jwil604jEUB7ivh$|n3I zeorU|NYeR~0I&?%iQxBvwo?#gm_$+)z!8kzfG(W@(^7oMnc2K=00000NkvXXu0mjfBhsjH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d06908207d9365cc614308e0393306dcf8a396c GIT binary patch literal 584 zcmV-O0=NB%P)y9AyFbm znvfPn6P34h%67Xgv)eYl3obP~-<#c;DJSBeWd(3I@PBLrJUj(Ql>v0TQ_*gDqH%sK z*R%PXxbFL@^=NpR{C}`oAKbIl5df%Y&5<<#xz*R7AK$`7r80oyKwuS0U)Kgej`MNve&%XxRxe|btN~E>Y5+ae>6>5d-U&bz z0yfUm>E@ojH2^x=&7dd3_if^y&bnwkSNc*)!60&Pnh6B7pO7U1boZ$HqAo}}2$na6bE*J@s9&l-~Jc@>xlP=(e?v4$-54qy+k3|19_d_XrJcYqE` za19MyhEf7_JOD4G3fuvj6p3-P_(CZG>}%G(e{tsmcH(tOMlVxqubb0?pb{V>)Lo;n zTVv5zsY887>F6vb~k7puxZ-I*>x*!jK+ zf9?Yejx14g-3wGfyP>Z_)LfD%BfFn`zb^zSz?TC*^@8sUn4ex;x&Nn~lx70jd;ot( z=w84!1x{{LS#6G`mJj$OwEa>A`a~ygy1%32bN6}wKAr1J`s+JQ1g6P~IaNSVKnJ!a zRr^*96&QH0x8X{V5imbrn*e;Fr_O-T?O4eNW{Kb?M27m*)2Kqwd=^X#I12qvNdX)t4w>Iv-wZQC^TnFv>R_J8%j~z|!|2r+ n&CYu3a}8HB94x$aa$W`Rs{d}#pvS_nA&H^N9f6yzgKi|Lk_riz2 zod8X`C#?R)Cks{qqsM;M>s}W3cemZr+SSeZK}4OHC;~_fGEJmO@tbrLSpcFR^gAZ` z+8zkgO_G!KN*SO)h#e1&vkg`Oc+uFH44#t&QG%GytL56dCxQhK-OhE91wiiw`Rr>$ z>oPo*4UGb%4J49LQUnF~pj8G68_c%WYi7iEA2@YFL<%x&K3Sq%g9u~`HmsA~VeR#8 zWwqp}0BwT?t3ccE{B&PjA+`yvGa#!$gEj!JRyZF>q3Z0000XP)2{Oy|#z!pQQ|NJ_LzkM)M8Akx=fMXs?w4DLaie=7p zBBBj|$v4|Li$GK7MgUNF5=b3UR5n{j0B|5W#~AO>X$r_8>b%_viZQ-N=tv8|#;$J! zprSw7gmn`4gmr)>ozDp1Vmc_DgtS7c2yq`cs{)zBCNfF^N>J7btpgzZ<58bIES@tv zU;R(#XwT>iRgJ0<0BIe+r!Bbb5FnHeeD`{ePQz7{WWRp*I3MUT_Oy&rpw{;o%cBE3 zW;;7&NZ|*-YqDoo*SBoa_lobhhT$fJ)$_KF)GwveVW|QTZlnPxBc%qL^K!ndy@+Z7 zQ1~I*Xf`DU;KMH-Km=2DEwct73gM-T2;T|$@4Dfy1rS%y%V{H`@W;unvZ+ufth<~V z15jDfli@`S`)&(>J5>w_A~sOnCo%C-L!00aZLJbs`n!m)C9sZh*ssS3cVG-&8(E0b?w0XoAX|DwWb6xFXd+zakcA`})YUg-^Ky6F zkpskjK0SBAaUm2))2?zwxG8txN`M_ai0#)iNEA@Pm6>c^mp~Y|<^Uvvq~o*G42Yef z?kY`K2Avf4#61*~h9xPRF*6o&g6pb4T0~9RNRYS;N5^0M3DKT7%Vm8ap;jB_i-m{) zN8>6mH3dy&&>A(P);E=987$2-KF^^r!)e!_(J&(gQyD;91_Xu^bQMB}tY$pJr4(Y! zlg{QZ$BV3JR;HM;j>`}>bJI*Ax$m>Ne>U9iR)a`?4ldBb4FqXsLn<-!LFk0Y%f_u{ zyvQ|hL_A9KiYLvNzYm0hLNOtMW`UX&pzTivRPSuoch>xKI29OAmdQ1(;C100000 LNkvXXu0mjf(MmCF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8eade32e2bdb7721faa1cd53f8fab9ab78c1bfbd GIT binary patch literal 632 zcmV-;0*C#HP)I+Y47X(bTZTH z)!lgO&j@(+?PTvaJiYe2D#SXQuhh-MbZs()3G}+32YLPb{9P_wDnCP0w_NM*#g4p zaJ6Bk=1ylx14e=k%=GMN>z}et&sQ2vy z*ZNR0Nr9{+p?kn&B_Urx1a*e9&S$`2@D!05C1*}Lhp7Z4Y5CI9JzxgmSY>6y{*XW) zd6DL@m3>1p^!5C@OxdL*fN?w#bG@ewgq&}{ye|<<7UJbIN?uHmD!P{@ARi=hpQooB zxpWfwWMuG!07@ohkdDog0USqDI!=hqCJWAYzG4EkP(Ovu`Y0_4lmtowzkv^>!Y{+g Sqft2k0000{Gnsidc{l06mX!b!KmzDoo#yl5V}4N@D_$qR|FV^uwgB$#pP--Z z!O>w>{p#ZI2jot`I6~ml2S-iHuXup-vt#FNyS>Ex+4)DfdbR zkR9wp2~$%;Upz+x4COf{wC<<$g-G))erY^_A|Gg?y_RDO4`5TtFTPhq59pEsX>L9M zco@AjUlJGg@V(-AfReNZ^t1zqYoICsJO#Cr4`VzY1F`HxtpNCU&*h&1(s(F`@3%C+ z@qqQrM&Z3-@eBH(R@*PWS5~?W`4(t#%T}#*9a~MPI5r9o70VIF~ buyueRV{y!*)UsOI00000NkvXXu0mjfDb>C= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png new file mode 100644 index 0000000000000000000000000000000000000000..096bd81728894c6fd78c9d1a7fe8d30434df27e2 GIT binary patch literal 335 zcmV-V0kHmwP)9iFM{YHdjH4h5eh;ON)QW4uo^{^ zZANFYzl%9HuDUz(?aXnVTR)Zn2!H?xfB?JzY}V?wTB^ZCj%%|MT#Kq3$4P2!59w?W zAPg2p3AmzS8npm+GX&S)EmtT&ddkQJ=L;Ro_kzd!ydGzH**%A<#z~2;K>;Apn5arP zZdhMc)NBM|!Cc>~Y7ejg-r)gghl;{(%=Q434(O*OZj*65VeA1A)uOilm`{v6(3Z|z zPq2Q;n|9dNZhzzf^h*bUuu|&J;hr`o?J4pc80(|nYaIrg&j!Fgm#KoYfCZqR)t}b? h{S5^`00iLMx&wlzV!Ox7mwW&K002ovPDHLkV1ih;i1z>h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8df1d053507689e58cd7ba59dc8f41612834be0d GIT binary patch literal 588 zcmV-S0<-;zP)wQpgn`LY zNf`QI@VDyA5Q>`5&<}g>jg$lV{R$V&Cr;TXAPsvVm~N^A>vRWNO*5WNMTe6}E1hyv zN^-eBIK~aiQp)*p-`%Q)BW03jfVq%KF2^vBrNLrQm9Mo_P{zkI8bB^C&j9poK&GtB zGWNSs@X^-tNYHX=wFlhdxpq#}!V)|!w* zsxd7mK3N9y(2^hr0hre92T8k8jq8f+pF1Br$G9vOeg@DP206>P+Q&MPlBe@YmH}h{ a$FgsA%qUNI_FT#U00004ZcKoDJJtyV)J6$&cou?G)+LBHNF@Zh0G6)jY3 zAf&BTF!m*V%XG85CWwfV2PNI^X5O2bmua;6WwZiX0pAiZ8V+(?j}9Z%IoMTq_b=+^ zG1>W10VIw4y~&=2C%+3KW;2S(?B+4Y4M$zlC*kXDdc1j!wa?Bpnav4S#}P3 zTm7d%SCw#`Oy5;qXk>=c%U&`Nh>6KGQJ2G0l`U6J5mF3VvHqCWx{_l|on}y*nv#YL z=L!-!>pLUY#Zw^rDK}jK_#4_2dP=sv6M2Pd24lHpDd~avqFmpOpNe5a6G~(941s;b zVoRlPpsf5_07mE4S)9jxwG|NAK@@LHv!v*)%+@8^u9&O{AwA~0mRy3h+jM4)X8X~YqxerD_o!N~k=pvS6uJIfa(ddOl zKBf}(3~>GKJ5yUg(^sv!_}ed~t$V7~~u;R!@h500000NkvXXu0mjf%`)3`pIbI{RPBz^41n?CifgH5NT)H+v)0bN+tjI@Sts5eFuk#U=E+=!IuDx{sd0+c07zxIY0D1H-->o=w$-jK zebK_I0^rY+WL9U`e;?h2-E;j7V+d3gV7*zjnF9tf&m1u_$1{yr1t4L91|;q+MgJQB zMDx1?P{zY|e8S;(RREe0`#cD{X5$`liktv=iO1sqNNhyM#LG|i?PAGl01)*AtlD)q zhyZL&=A{XFli`;)AiaYP!;IG7mA`F>?&ns^V@ynq`L){C(24+UhRk}QU-7`I)c}xb zX__-0%VD!(bpVuK@8*MR z7-Ce1$EU~&KyLQ*aKFdeBYOzF!S9B&3zAgk2dYj;AQGtqK*M8N9YE8PodJAVvbX{g yOI8K&Wyzw$$cH661NgFJQ4jdAWD$T5Oa1}L)BR%Nn=5eu0000WAR!uDOxVGV(@0vwKez>1g=Xj^}tNCp(iqw>n$h9A@)rSAzuszf8yiz$e(h^s0Og_9dZ8=3)2i73;AttEGal)%wPJPv zgp@8EeVuSy)Dq~_+bLN9AUf+2=54W)9?#nIU$kiwqVfZfHTY7o;5t+OV0oR002ovPDHLkV1i8_zO(=U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png new file mode 100644 index 0000000000000000000000000000000000000000..08f725999fc2ef1d1ce4ee66847248873b69f2e3 GIT binary patch literal 649 zcmV;40(Sk0P)9S6Z^-e2W#K11H%HcTOhs*EKugR!|a>wf%VTa0=NoJHl_jY!}q<~01n-j<#b%D zW$%k|7=Bp&o}U^A!EyZjH2N%krxAeXcg4|Z+v12|biVjnrGoS4YXcyS-X?J-5O}@% zjYmUnPOKQXLAZBuj$GdK&|lcBofQd^W{B^XY)w-Ln8njB=4Ne3R%H< zV*n89!1EIbS_M)P;^y*H*!SJTYpx~N){O93T6Q;6kjMs91Y!h$LUTGv%DD~0_c42b z&~@?$0zrMK+BpNdU0QPd>ZBc-WVWV>Aww%jgwmFrZRvfnYR**0Z@o!Iz@ee?olRS$wfOOV*nHq z4^Y${Iq+ZGvPv}|+jDx?qXLyl8{qc(V#C)p|Mq5vrxFnjKL zDwLF)fhwE5Hh}7S@$~{2lU-3M0RD`?P-25oT(1a5XE&q;00SWx!#S#+fK=Bbp%>_? z6o9)IvN0MzTjys%Y{4QEe%kfQ*1iz{SMt(O^!8yt*>>r;US$B%OSGT>TaZX(Bn#Of jKo&%1KVQt*sE+D{_w00000NkvXXu0mjf-(Dlr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d13ab2e078411a43f73783d92244444f69053665 GIT binary patch literal 593 zcmV-X0Vw zB$?T5z{Kf%VPjPQ4BTwiP27pL?#DH=GX|I{z;rgTD+3H-nvyXxgKNI83P5EkZv0BM zO#iev0s8@P#qK>hq5E7FfD^)u)hIKgtP#En25=o7;&>GRANi*LU;vQo33Y&?RjQlt z_UdveO@?0>P?lcYLySU%_+S~3r5F?a6@N`qT>!g6w-gt|r2&|JtSm8`Z#?3nQmh6* zA*F0Mc2&aRC|v<9c2-Ii0Eni8(T1b(YQ>eTA28WA88g=bVEU=&m%&!&gEkB?4aeA5 zxd8Wf*R~18{&Qdg#dTwSfNKcx!_#YSBkBzRNpndUE#(5RsGtkN`KH`nk3h(T&)N3| z7`%<_z<`kVdHiG%3ORmW01yY4lXg38`#fD8JARUJD%1ereoVwJmxTxQAI&Ds$IP$+ zE&3pOu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8a10f9ebd973e43e5163c5480b8ffe0f57fd7b94 GIT binary patch literal 650 zcmV;50(Jd~P)t}hrwg9nKD`xOo?$IOlGdvA;5hNe z!MuwIBLO6pgglvxUzN&5<%+}%fP5S2 zY&wrf5j}BzdA7K@f3_+^tN=t0l2SP&9u2=E5t6j~-ro?Li-4c;Y)QBpqt=p?gb;;{ zxFWFxh?>MQQvAXa)T94mJn?fB@Ywk%pb;6ZY)07+B&RssgL^Xzpa?8M5Nt~`=XbUW zOn{7_Q7I73yHf#3GkRmy2O(sZPzHHVQb|$;z+O=X_CTB<0{tOZkG$q2fRGV#39{>T zlVYQGI)l`b7zv;!NTb2>r2p&AD2*x&#u)&Kj1uz|6FUVo_C?Zap+osp!{ z8F7BxY^2(=kpP-fkcIzfL5hbfu)(&fW`udq-f;c06++OCzmD!n1!0wU(ySD z{n?Uqplsmege27o`2xf1?1fwfpc!>SDav+hwi3Y2Nk&Oq*1={>+oCgVMrqNSWW#AQ zV)XKrjlf*3QeOU4;FLSdfP6>P#~@}2uoQC@5JlK3ug!0aD`wBL7Jx`cDs(uS56dEV zLete?EdVLyo}iOJ1iYbEovXOlxXc0olps8YzTh>A(Hw<@iwNxUZQp#T5?07*qoM6N<$g6nl6E&u=k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png new file mode 100644 index 0000000000000000000000000000000000000000..b42dd106c68bd129eb0f660775d751ce3880992f GIT binary patch literal 714 zcmV;*0yX`KP)RCt`VSIbVqKolK~As}c{V$cNT12pjm^b`DI_wHP|khn!n zlo&`5l(-N%Go0ylDD9mBchh!Admi^O!=BktT%DiIcz^f!yrX?@Z2|!P9RHa5e#2C% zyXI&5YuB_SN)w=B0Dq1LejOwxU;6Jv6Cf~DpR}45u+up*!@+32+At(_bA2&`8@Kn} zTqo27q+&G;Mix6s0+pRgUdwzNCdso5^V14986al(` z`^opzu0gF#2c7{;LgR7BrRW% zAzAx=vhUwTgmt2FK=wD|tv|4CNI=d83Bp3fTGn(dBw&kZu7XM|P%Q55l0j@&?p3zyDDJlX8*;c6bG!^bF;HTpPRJvkqZ@TV5%47?x z2}ly*8g@n01Jz1*P_V2Y1i-00ng9W_PCFnW=K{fu8F|Gaa1?=X%!bdB7=FuBT#A4u z00tL|6mN|{dO{j)?^s^6yJ>d6XacgGIDr0-W>*Wm#vI921Q>GT$r{ZZHesKyO+cz= z;9ibqyVlm7f};sQ+0cv}$YQ|AzhQKuO#W2_U@89jAhIUmTOa=me={fLMhGBSbg&*{ w7n_gVTGPUun%Gbg=svypy&n;7EPO5#e~s{^vhwbLD*ylh07*qoM6N<$f++GYJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae42e48fcaa1011b8f08e0d900fe91cc5d52a6f GIT binary patch literal 645 zcmV;00($+4P)dgx0?H|>19c{812(H|otkP*lTq!PG1JsjhD*L>gF z7=iP~{vm~f5CkAO zCuIx=BS8Ra08oRU-QGV*HCAnxAn@HEM!zoAsulSF$r;=lCU$dmCdsVYF4+Pk;i~oE zMcauv=+9xlYP&2*h$QI$a1hGC2nc10Hpw;sNN5sGYgfDD#gx+ldjK{Tl9VgCn1LP~ zFjaumL8$KQ_IexjWV(%h7A=5ma5UvN?{P3)1t=%%{V+x_sf?2-Ob|ela@m#vc&HXp zh7-ddNudZQ$7{_bSSg(OIpPZf!ue-F@;a?fcR+wNC72Za7_gnye;(Qisp$-G)kAwE zNC2+ek^wN;Y{M0%5#lPj!ZffCZ20Z5S|1&1wY})*QN31?(wJ4MMWqIk+l7Ge;{i1H zh6#P?S-dpxEtn7?+I5^5OMQ}YzkX0nvAP}0a^e|2C5+Oq*YEt z#1o{Bj~q$Ne06mqjMxm&5chpuFh?o5ui^B%7g@A(*>ja zisi*-I%Wcr!aF7}TOZ(Pal)65O$DZuzCL4eYoLtoGsYmz(K{Kw>mBV}Uq}LNQ9B&;uGA z;0H*dR`3c&GqyXC9nUwA?6J_$j7#|~0lx<*o8Q%WC5q~R$bDQ*Wo~y+fGc8Sy_K$e zNbe|?WB>pF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d0363b61413e60b70d7a3c202377b2e7b0267c54 GIT binary patch literal 522 zcmV+l0`>igP)oI;ss_WCN+9jMxTAw281y=Q zGePa(wg4yvKg8)oEmcQ_8E~uM3rKrDxBXnG$^hKG6m2pIg`LV|-$0ofjhFQSWD8^x zpX`dnmJL3=u2PtR+w1d{3W)GnS7?Epfja#R%>a{0yS#4CvZbb`$_CFDSo*m(wgzyh zmTyD40w@KZ2C1)>_}jpC>5}h8Dt})XJ7<6u0R-ELYx-j22H^NG^*)B-7T93iDH0`V zOAUt;ZzZvgmEx?deGDliU?PHP*rcmJr~)?8iNYh z3=%qe-Cl=)p9{#gMa00e*laJT>uw^th(dwLlk`4rW; z!z5Mj)v9#nwgB#~FPeq3{H%%B>#r6RUqC(&PQjW;$Qcb1^eOS^%eMq>7;k z^uG9LikU^XieeL#3;C!Q#RF?@uLoooT!r}eYGvk2s9pfQds~bbm%>i@Vq2h+rt{h# zfRBL3x@2}HHDbseCPeUn7XTOcKv(;_@^|vUvaA)Ymdki9$$9VP0kjIIf$L`^-DA*W zQ!PJ{0$OCCcl6qfHAP(f#j`k@Qh48JS9 z0N{mXX%cg9@H+v|90s|sqlw71`@rb|i2DFVZO6zZnQOaStN`+^{%sxZ-*Es400H2y Z^bI)JvSwjN(3SuI002ovPDHLkV1i8qyd3}l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4b6c6bec5e94405a51bdf775b817af35431188 GIT binary patch literal 695 zcmV;o0!aOdP)2Y;HBunlQ-}FXz$)Ud9ZkF zt)L<)YEw%O#=MDdGg%{O!H+{8l%$*8nK$pvZW72Jqasids0fr2I6l}-a6P-cuKgN; z!|ry{?QZJ*IC_#+xGpD0`$;^V$f9Hr6W8`uD2xLOLj~q5D8MAFnjmBQ z-Ncv#AS$0ASjvi?adMQdS#~DqtO(4dn3L+JGXd zf>QuVTH#V*(5gUmcD6JaWgXqzYhnbn1ktp<3f2bV-R?v!V3YXrbBwI5tgISU`h?30 zAgraT0Fty?bypqF0ACsS?skT;fjfm;tc(ojbDr(30Lc;DUBg^Lda7Qgi+mgUS0g8_ zZ8%zD)xmtpH(B0}1xjq-95y58m)T;GDV*6JpqWOuU=vBF9lAYg zD`GI(prkz;c+%PVHU^v4?i5vkXFLv*M6t`0-hci*U#h002ovPDHLkV1h@CGX4Mn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png new file mode 100644 index 0000000000000000000000000000000000000000..5d25c6018e397d77f3001f8b13a0e8c1d07871c3 GIT binary patch literal 652 zcmV;70(1R|P)4lfKond_Ll7!SIiLyX)!@OCH}C$rKj1;*6){ml zAd!NE1ITQdGTpY?8jUew5@@^I-8XOE>;upIG4=%Z1inS!^6Yqx>q)z1X7ex}pN30w z*MB|u6#~~6r)%B^t!6wvn;X-p`&$BIQx>@dG#~<0YZZGx8NZq3Vr4T25zOHp*CW4b z)hVMwOu&^@vs5r!&Vv|K08oOmumq58x6?MW_k|tAhRBiu0Db1YC3ILb%X*{;$iEEB zmBB-BWHXt}<6xAPSyFP6!#u|tomxVL(hBHiLC`jX=b;UZ4N-3Z&(&HprGkBLs~Q0n zHYn_alnI%&8jrv;NHJSpX~sOz(0m8U-rhf1f}WmZEdzsLb7aff!s%*I%uy)<@7!GV z;!~71wQuLKrw8Y5WlNQT0k|o>VaaaEscKnJ!*ZRfo7o4n3_Rm`?=Xm4E*)2cQc=QV z<_Ln1TLxXM<#NZeP5}*`CKPT;8ubhh(nbwrx4Bye-OweGXTGE&eqt<2)>vP8a3i{) zI@FSo`nq)l)B{=a=iy5aVDjN{V0!0WTMn?KN?=WVW;}&UKGOpTfIvJA07ww*@g$>& z6w59H)wGgtTK2BhiwE$bm{Y@#)Mz1)%X#I<4koF?Cujs@&SD-1}Oo$o(K7Qv=vNJ}aK6r@Jo)o&gk& zARto#JllTg(ztz5m9|Xwu7-iB4T5$617s9LAb{7ec3t$wG@eET8wC+K0x*wuJ1Uw; zs7k$GY<910F)8Kk>SX%XXX0p>X!x~ z1ky7p5~d=HDYc@M3y2|re0Es~-xtq?aAWn3v`6Pc8h}bCCimLOW@U()=7<)KQte|wvk)&@Kjj=`2;%-Y34mGob_7@hNC^OF zj`n*_@F8ffltTc>GkS~4N8UeI>z+|tEk+}94?;U((1v5#xjit%Cdm%J0K8atbjUfp z3g5oVgZXI01sKfn3`?$BYp8Ok-!s1mm~(*N8ZwKJ$30^XJ?hQ#2QGn}TMN3q)#(aM zx!jQJ&CN%0wsY+_0)_yP_q;bPa^`~&6`VQgz?218^6Ep3xAW@c@JQFde9vrL(b?;O z0N{^6^a>F|4R8c7@6!9woXXwL$?yIB4|2u`0EDtYaBaeH5;E5T4FIv&AQa$XsVu*{ z-V)6DJM3K_9T&8*JZo1sVASYknwu9dgh$d=S+Sh>gcve|l#anPc8Gu|WWe zJtB8REJ7|slmPUq-Zjn97CtVx_Di-AA-D(RGdeZKJN7!D0SK|TlhcvF5UdyvatCbp zm?pNchk%%S@rxgWQY)c~9a5D839+-{lkgFu=vUauHdQ|874=W+j> q3@yjD;UtX;E8&9Z`u}tKxB3mG3@LUlZgF@30000;qIh2nA^jl$z2?1!HDm%CuRUW_Po_=}(>M)f{^!AG z!3se0`ad@51`=svzcvvIcK>kmG%2cX)&4@Vonb0zh~)&O_y ztFTx+5viB;K>gf}`LHZWeUS)&fvc6O*la!@gXb+`YaHhQf?%<<!U*KY8mpBV8O|q@#jW9OwX&%_7SI zpTGQO;N@Y(5F-bW<$xVWPB9p%$)kv!yY-MZ4!{=Qcb~k(tCp0sK+plI3i24ijV%o* zE6IRqP*li>^Zj3Y_$E<~Am{*4aN8TJGJO903(V)`WdpNeG&%r@b8-qYWCq#(fA#tm z10jbHl?GrI;u1r590S99hVS1Q;0~F-?l4YA5aj@5i$H92-y=H?nSJ}gL!9Y_BnKc{ zjLjl+aPaJHF#YD+KZ5CiCVV02%fMt%L(*H-0V-u%kdUITjP` z09*iH6wt*1Fn}vN(!~MP2nDLN2Pkm}*$%)~IMLMs)N%+#4tVnN6F3`!Xu3K8ROleL z2awAGx;Ov?kV{5Fr6koIpe!SfQOSVB-q5Q}h^@s#j^$)KfSO>`0izBWb-;i-004AH Vm_3~FW^Dif002ovPDHLkV1hK#svQ6T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a0fd2a259e11f67131a467468b427d12838c96 GIT binary patch literal 708 zcmV;#0z3VQP)@i56Pf*jZWG``6i9 zS=rH8X`zXU7A9&T4UY(iz=1jQ9n3Me?A|Rz!X)JOxZRoGelz=+7c(|vfb-*B@80eba2C%K^h-Ksz`4>|%BLHhKdwU@{8-TT(?LRa2Vr(5; zo*sBt#V6xBF#@3cTLyJtEia03EY>6PUoAI8c0CjPce=Of6<T1$L$HX-tz09;k1HpfTFqpj2P2m0oKx~pxx~L25m|M z-yhP+IjtX+QbqtebK2dYjpccExZ?rPQuGC^4o(YzLAh+d@E|{ooFEMVz><^4Ax*md zLbZe=6+l2LKsc6d+$E>7NB|xjZ4R-ukqwFyN_~7)`_QXtkxC5};7ZavU&2}d$Si~K zB6OPVAT?MC1OT(s3!y+z5@S`VQ37BvcD-7~38jG?!7ATBBF~f|=NwWsDS403DnJG2 zJCyS8c6&+An?nrEcyS*_lVF)6b1@JRl#U;2wu&+ zW}phd=-5WTsLRU;x_nsBjhKRygfue(;rjsH7oq}d0c4}A6^>gD38e^xLt`bWaz8Nu q+3n+7Xg0c=vB|6_0+^P~9N-Th5@h{fAfx{P0000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcf3155c8d92719bc18eebb6a0960fd2472250e GIT binary patch literal 546 zcmV+-0^R+IP))kKl$Mp+%*Q?PR z;(>!85n6$wsl1YDw%gJjO0_XzF0^Ht`OTZxW%oqIQ3}A#)p>Y(|GZNfz+uf2*B9;Z z?y0*rL@5BxR$V;4ycPQG|MvjqUnv0Q?*(7g0Z_QDh7g_J-vYq-W@A6TzdUinhfZ&; zH=#5IOtV<3jR5M-vio2(5jA61IJS{cfwMue0n}uX{EMzpTn6%{^Y|VH)s2M(fFxNG zqic9zIPg;Ip#~?|3ZNKugYJ)-bwLKicmDiajJ-)T23Z9i2n!%9Nw9eLAwNL`%3gqR z01BXaV_*Rw34tIPt}zlSKJ;ht+S4;vymtGM8uYuo&;pLwp@T{)3J?s z41nnMM=4*ZK!cCZxMSTpQL6xTAuFINqISCKSs?&&E|j36NKV&e%&dZ(vjO|RASGpi k)6Yf#zZF}6EkNY}Kf^Zc{}jfFJ^%m!07*qoM6N<$f^XmLWdHyG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png new file mode 100644 index 0000000000000000000000000000000000000000..07591aefa479bf27c3baccca5df0e51db652db0a GIT binary patch literal 721 zcmV;?0xtcDP)OxpA=AqB2wal2oW1%pCO!sj{9wPF6)c;Zt)+iOmm*gX1{M{zM0)yRZF(}PvG_5 z)8zf(=ar=q*lul%`TINVbi=qM!Np^FQ2!0cx7QG0-NDO{X~f87k$-i)U+S>e|hgQ zH35k>imx>wWjOoNQ(@(S8jk)fo&bj6CfR1Qs=B?w{0O|=f04X9_~fi75sMCl6uwV4 zcoCQsDF7(GcQGC*<$%y2^3#EL3G&g103kQ*M%o`l6%CFKR4T|Q)x^vM-n@F24vhA>|FxgcBAV%$E~Q{Wsrbqevp+C;HoV*9u1U&cQ1dc zYPgoI$#h^y*d@!C!F5wE%s~FW&qT`z8Np!y3ApsV9q~+Ofo-j=dIl~&>9r%ZYwq*G z^3OM-NuBZEzKjG2ZJ>z{A5W$Ro{B)8$UJQ6U&ns|s$ppG@?hYu00000NkvXXu0mjf DiZVr!)xN+bB>IJDur6SY@LTf`}r!x7RjF~L^;((s zJ~YGQFWnqpPm>q?SquQ%3OV^D>Zx$!x!C{oK6JeSITgn$xe)+_>ZM@&c58DM#94`3 z1yDek46XGLq7Cl%n`d(Y2QU*XK#4qW-dBop!)i1v`2y^wagd* z$&1DOB&kS_px1pbZVRdg0PD8r#`_?|(4C-K2hdlx)f)%qpuM|$YD}v|)!ge_Z%Bpd zoq=`LDMm4{-`W9L1y_pd&}&uY(!_Qo_r<^h!VgBIlNKPVLabS+Shfa<0fxWq0D}yN z!TbOSCT&GEuoD364&QQ|lwD|SRp?vyCuKkl~nE<#20f0c){ZSkopJBfW$F~1=Cl4W<4KD&f0wj`&b@G*?8gn6^h=`ST z7U*X{Nv!rW>6XNMfciZON>k>uKqi%eU^h-Vxesl@P|EWId#nLq6)fWb5Klj!dNMh~ zsn__H)hX2h*)N7kO00?pQG%)Qi~!PLSa=DMpYb&0cBz)@-V5h`DLp#7T*&W(fAhED ce*haj0#Eu~lv%ubfB*mh07*qoM6N<$f*MXU+yDRo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0b84050f35f53fd35b5e1d21e4ace160740977 GIT binary patch literal 595 zcmV-Z0<8UsP)I5<^ET|x8(ZWU0rd_)>{e}Kt zt5)sWv??f~C@M%74N+<6h@WAe(L0R8z`XO$m~=p1Kj%L8+z&NQ5$I@ddvtPf7nAvH zBmf0XrTwk)==`A;7$On?Rf&_?9Y}pP5`ZxJ{{W~xPBoQS3;<;Ihm=**R9VwUSFc8( zMhp#5F6FILQRFTaSr23qOHySB4WQ)G_Nfhi0+%5a02;9IWm=0!R*{sT-|SF(oPB@X zjDHS*pm3mJd|Qw8;Bh=Vk-|;EN+;ZTcK+#tl&XI_&4y*oDvl_@Utx zce|QN(bw311ak&=%dZSldjJ!`StC;~u?v3k1vtHYj5)iWg|!QJFp6G6aFIz6a)1}l z!Opr30tbxG=1iTP8FTPRrob8CzWQNpL>Bje6Euhd0dQ8;x4LyAJEto$3IyO~=h@AR h)Spr*fO%-)0Kae~_ZM@otxW&`002ovPDHLkV1k)m`T+m{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png new file mode 100644 index 0000000000000000000000000000000000000000..1b766541908f73d65c44b875dc460c25a034a0a2 GIT binary patch literal 564 zcmV-40?Yl0P)`mH=Z4s%9)`gCq&5Jb?ObQ6Snp%-iuCHB;w@o#K%8Bz+;vzg2!ng5&f|1(KK%~<~j;Pi0MJ-@nN zm>GbnVgtw~7gcSe?A|x7~~D$3T!kfU}bW_x7%?xY~T~x7g4}i@*iX zd#O|+)UJr^Kp~q}9p_8u8$cN2J*zRkPGSRqFuC0iY&DunIs(Z;3{#Z80I(2kb-jqm z2KHn15Gx3s5TN^>sR(RIT>MpVcw{ za`p1M-F5szOa@>faWZIgtE`@_ciopcme0Z!nHnPi2oqwmUeD2P&;?qLXS|?Zr~K03 z3&0?-u{0b*Dkuh#!R5*U5~PU$-dyYRKATZ5udR{$Q7jJ)Kw;wD>grFR{*It45LPG) zl^}#;0UGTBoZ~1&d|)UXxzbhy$Pa;RPa9T&4zS2%P*gub#%)cGhxsZ70wCW?>;OVY zAnNj=9`8>nC*+Y#Mg8wH2AD=bBYo4?9ky-?Tj%&&>dkE$7mf1Tg}*kZw|E0Mo_lVp~8tjP0GEJhv5MI+eqkKW z)%@~143m6oP_7z)q5qku5HLO*^wM#FATm6Tb{^-s0VD+HQ$~O#!=Be}p;f@?0EFrs z&x$%P48RawqF6Up)Sk6{AZr;q2hiQ-m-N+_HoQnC?y4ujZ^b+Qy^#mD#FqL zZ0I=vO52KY{=aJAmhfKI`Zo*Dvaa7c9Ra3Yu%4vVFOvWO002ovPDHLk FV1hLbvB&@b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d6e3b2d29e69be6d40bd974078198d6a0783cd GIT binary patch literal 358 zcmV-s0h#`ZP)%Fc5`Lh$3Qf6hUxMIyrUm|Bo*IfQn#25TT1y zM08M7NJ-kebh#t>mX_preZ5{TjeD|4H0A}{=L3ZW zN@BO+#=z-vgDhR40UX%+nocKNFXx@3m>w&cPRBm|AG*w%trB-YnE(I)07*qoM6N<$ Eg2OPB0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..001c3604dbaa6937080971b29ef1540b02d39755 GIT binary patch literal 558 zcmV+}0@3}6P)h6SrDNkft+dj1iE(eL~#Xt8`!+0^8$G0!@*oZhj-+@p%G= z?So3d!)OA%(=LpkrVz*bB6*&F{D>s|v z9ZzTG7YdxeCV*qU_zGgf9zdb>RRr)oJ#O!sftU+Tz*kSonTU4s{lkeddC-bYfMc^V z0X6=L0G?d-3GQw#S9L&3I6eW5MGkxriN7L%6L2Ezld_)POH1tI7gvD7`t`5S__xai z9HCvXwgBz|ZTWnlE|B;u0%(#@7odoY)N)S9Ydi(US`Kd#x}HLsm`s0+NMSb}{k(h_hTSQlszlWsRJI?}J2R7vbwG{JeWzT}9Ko{`@=I;~EE%0UVI-qAkCVU^%1aO6+!B@lxK$W)W w@PH65p!|qhCB!A-hYq%d{5+TV=jGS&H@1jC77~7Z4gdfE07*qoM6N<$f`Dc9{r~^~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab5916b2d9e605fef23b5daafa7dd33da3f0945 GIT binary patch literal 851 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 N002ovPDHLkV1mTnD82vy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd8f8fcbb812136e14a2adc083469f0e0c62dce GIT binary patch literal 1879 zcmV-d2dMaoP)Px+5lKWrRCt{2Tg^|~NEH9MR2zrb4RO+RAx)rl#e#^o-D+1As~&plvHe?n?Wu>V zRkf?_hd{tePzVdCsd0cL#30exgL#wj#7XSL3Eq$21su=U`_0Uo_uf1!h!N&ZlL0_B zoy6gB3x95IDx+@udQ=@mfowX7(%c*Xp#JX7SlYf8X)i-!fBQ24z-ctFvS&v&`v8#7 z<$T+Y6#;-dKvmNsZ}-FRzxlQuI|9ay*yw=A3)AeVe&%_Os%^1d04Ns>Hl-)rm1^XD zWJ~S7rt}1W7!k0tXDhQtiYvYyyBVn+AhsQAJ7C=SpMa|#z*XZvPe3e`plk(>6R{w` z$fRIoQrN240D#qZZ@9TC;`RDLq$dLq69QyR=?QN3ig>nsk2$RioH|a=`eBHQ4FP@@ zn;%>YuG8EVt-EK-_n6pbFT!G>1Vu-M;IuA$&0{}D293lc=y0^k1%r{d8H*LL zTRj1A((zo(-@vH@&)`MjyZHs(NFs<^EEWWi**j~bn5t=b@bfQt@$!|jW4Bj^Xv)ec z=5GLSiR$M3@c$bP&%0O`Vne{9S%j)-a2gHNzwAT5nfAOV!zF4muAG2!!C>cV zhF@77RyHuDCp=+p85H`Cf{ZIC;9SjM(JTT0D%;z5yMCa|8Y#A0J%OG~crGyj_=L)X zk&(!J@7w>C5l}7|3;;}F>A(GBMFGTfx`}%0i~)e2Okn0_y2Hk&l>)fi#A#jdYc)S2 zWK)G?aZ4d%chh3%9;phRd?|6!{@F`nao^T8GcUB z$BhF{77?^nv9a{%R{%h5YZZWdH?Xp2E7vJ=Vp9FqW~qm7F78Rca_4G>M|SR(3>cXd z9xqHYB4PPqndNgi&oy;rdz+InYou5=bGF;c5DCBk!!#!XaD4!C=||p=ekuI9n!&u8 zVaoHTPa?a81>7Ty44I$qFY@1M=~XQYrMbC|rFa#nT2@;J44RZ6CmobD4JF~7NXVjD z>{#~0^evA=M4&b;3koSC0DRw^I!?!(x(L5=`mGuMo`jS^gL?mQ4FK?+Q|mv-AwXlI z36T3cS2MUy_hjXQ!P>X1DIC?$eDid=mfN#=nOP&niuoI!`}|YK>3LRD9T~$IJIl9b z*x_*ti)Im3%fj1^tTWr|4Ee?3{Lru5j@?wq-v-)oxn5Zxavchl50fd9&*j>}UmmeC zxDFueOMLc2&~k&|Qp@v|;1?_nisgr82K0BWW9JS7ZM%QaRX|5A;I4vhvk#zi3j{%s zayxcY`M7ZqdKRf3FxUzZg|Au`Uc7wOQ-^p65Y5V72wILnf&`sSk%Tby0C&c@V-+B< z(y;}CCK!cDL>d%w)>uCh$f$D~4XkbM2Ff)asSY5`PEJbLx|AmrWGg&>`h?NUZ?1j{ zoM=53C1}^0ICUI2t&330Sx>qr3@OD)RrRe)!aI!yHdjA|$}=7d0h6j4I)4vvlbOh| z65A3<5QSgc+zp*%J+f1PKucK^zS~Utfk+UOBqvoB<$}S)Wgm3U%NScgMD*R&o0*{HM7aKb zl~Lpta20B~V6c@vTM<1uQE-YYM)@5ffrrJ9>a{@H{iuF6@F@VeBc?I<^ zHr@;2^PpoIDzq+##YKhGYi|cFCx*%acIpW&!}2KtC`;D&|(@6<2B(C?BmXt{q1{syMY4hz14 RCn5j<002ovPDHLkV1mTlc)|bx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png new file mode 100644 index 0000000000000000000000000000000000000000..793db233c3905aaefaba725ef68e8234c6de1467 GIT binary patch literal 1701 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ae45f263368ead73b95a53c7d13ebdf035a86f GIT binary patch literal 1844 zcmV-42g~@0P)Px*?ny*JRCt{2ThDLWNEH59NU#A1FfCe2L)f%hqAk)^(XLjka_A|is+D@_-?`U4 z?V-}%S~W_PrV`zdC`2K|Y03|qtmy2)JTo@7V;eA8rQZpU$K!e5ym`OI0CyabMZI`y zqrg6Q1^|HF6D80*wl)e(&L)j(<+6u2A5JI6a_bih^5SVwEy`@YBm)5CY!b?4Z>sS$ zbqGO>0ss<%;JM$Aj~+2#0UBUk4FEVF=o7!VQUL(DvD4G!i!zh5Nn?M1?hI_7b?&ExM?h_}$^aO`9~~Yd+P}d4 zkv)ixR>;nZdj-GBUi*C)^ksff+pMxuxoi@?dH4@_V`w#uUO<8fVicM>4AgI~1iXIr zoRRQ^qr*e|{dRZe-iKVA-+ogQu(eTO)uPO-?X}G+)4E;Ls`J7(lwRch!KvvPIh(}R zMqy&Cd15LXKt6pGfG{#ZFSnmDa#>{P=CSItKwtu_0Zm4VV{4`A98H1R|hXlo^GcWK>9SKv#D!f;W_21P7<==SsmaP_zxE@dkbnh=7r*vj_Ln z=zN!)@avtkCO-N|aA@_X(EzVGg|%N`Be;8_M6&BoP%4+9b-U2IUDWq>&^c>*_Q!y( z1qVkhQ(Hn1d>cczM98gQU;hCg4g$UkdflZNbx|{ocGUR+JZm?yxe|f2)|!H z#_ov{>8JxF1OXIs`XRwi3;dE8S{y(wj)W&eHwz)$qPcm&7XePf6DYXhS@uf8tZac_ zcqV{X`}*FFql;@Oy@_@|nh>@Ycp`w0?CN_vH>RuB5Et;anoe3^7i!N6Hxf|WtQx|T z!Mo`h+6tOFG*(m)qnndkSd@w3>ZQGZAqU39I=P*cnqd zE%3T+?E1M9z-MxPgeNqVUgWs-1$|93CZMT9*X_WEz|`MKK)wW~sYAz-m|MSzP`Fx@ zSw@N@SE}d_bh}e!awDV2DkXCSMkLt9{0*fSsi;H7dy`Qqo!M={ATfY#S)7C)CUQne zdRD3Inw(^nQhuVnuW7bruotz*`UIti*smW0fKg1H6+?%}0Mpg# z2s{aVd5S0D<@PgX71*g9u64VCOXZZfMS!vJ0FYgO0zlvQ($^jYF$(3fhlC&)dwCi% z>_`yvYeo%$zzgP9D$hu9Bf)8&UpcL8R4gquKg`S4&KfT`!L6TZl5293J^kfZ0KgxA z{uSZd0YDPtcyK>$>vs6)O;d-i_JU8U`1dRV6B=MOMgX7S^w3cU1{v!m*|waeU+a7B zMeQ-8GSr(7rx6ORY2_CU-!(xuGMqp~lC6ybD~^nuT{^u8Om!~cg$!Op#QZqA%rEt^ zT$F7iyD%}c!%-_4WG@Kk0|BK%inI6v5`uu;6UAY~a4?tCVV#VzR;=b%kS{$1pnDiS zy7X4Xoj2xsJWg8CP`9%zXk?-^1V|%wY0<{qld=^PxW)Y~s>6E^Pi5P%U)@L?? z2S+We=2y_y%;}>YAv{QUw>sUmkVSr}ALzrVStACF0~gBrsI8%lRhYkL#cF;9fKHUx z67_8m9`F$d*d2Ls_l)08L`mYS z3LBw(DSDgnjetc@V9~hq1UP1ccFE8*uttKnAqoU+vO$718KNYJ|Kox6KDAjxYilU% zR9asIJi9?kf}Fx!J{O=BPmBA)$zZZDeW*wet|26Jf<@80jv iHu0_hyxFNa#0000Px+9Z5t%RCt`_ThDLWW*B~4qF{qrf+1`P3T0u+k`<|HcZ!rlPd!bmw9Ed+T_$bX zX{Q|~<j1cjRp=i2EZgFc5^wg`v<|?%3R8;^>hoq#FFgjg`QVj3)Ti5;QR}KJh+Prfvy(e;V z*{nqfYPHE}<`dQy;8%4J{K~nZa@rKOHUxqEIXX00V%X-AX9F zV2=Mls|pNO)UTWu_%N!Zlh~`i0sx)_0AOK|U?YH(8V0{|LC{l{5dmZkg<=su{rub1 zh`2Yc3%kLYL;=8F^&GF8*8*UYP_NZc@A-m4u?VBx#@6F9b6%^QR~T)laWFSrBwTQ2 z&v*x!%VyaxzyD!5?3JYjh*AvO8_R5*+#ys8Ao$53cXlhnfqH^^tp=mrhA7K;_Vfwc z-dJY5-%-*@jAIF*SpbkX&DOQAll;oLfs_wYM;xiDpkJKXtRcPj0QxD`kdoWf36`Bv=Lub$`lD5xcDvrfe9P0iH ziwFSt@rUn5_5n5mrjZA@g}xxG&-)G~okT(up?A#m`#?RhNO<=2$w(xG9tDD|{xI^6 zRMjGZqD0W&GgSh{+51lAMJeVQHO3_&R15IC`fe)^z>~NmRTX%j5QK!O5m3%6Bdxxh z)c|JBFbI{?rl9VdeT^WNFf{@eQ*nq=EKuC1mFLefI^CfO6M-BfV3OcgLpX7V0KaBB zNRFB&JgRjKtGUlS&*9CU6u&Wy!1= zWwVU@!DYSb+P<53TU={2tmfusX%$R=0|5AS=O5Q0i<|O6&E5;VZd#*(*v;h~5-b8n zZHrU<_4>|92-Wnw@}d;8On*|!Q;Dqoo4{si6{0MoUaKMX@!D2A34Et^WoZF`x&H>W zyWQlxTHpkV(R7?j+DR%;N+(1SH--U9q4j%7%NMkc_W{5nVUC#C-dJX|w?)bH#$K~Q zSGisbe7#g+G-n`Ucnho7YRG}+0}repG^+Bv(q17~zc>SW?KS7(S`88BUi2z?hsn(w zE$~k8xPFGqs}3>?5^~urQXj8zpmr>?Os|n7TuxG;dYwr4rjLtpb4UK9P5Y57ZOO61E!L{0$jwd3h8aG;*x(ZkKq9+iol0KPD}kGE{4 z_@y-*4Fi$P28Ur-4L>gU$#UctFbz0|rF`yhwA;2+{eMNkuqiNK5b;pbNzZxa%n?AP zG_R~PDRSlqUdP-Z$}(D7Up8_Acty!n>$Mt|dbK>zSB_rY6!oeTyqdRU5s?$1aEfaG zCIFaDuycOsn)kaY#8-vR#wq|SpUCtcOyn!t$O!$xJXz%p3vq--56(a|BHL z&l^t6906e?awiD%vq8RSnZ$Fz1m~2ioL3nAQEMg$py3KXWZ^SJ0M@7r7+ec9Ti17r zB4;r)bJZaI*k0(9GfJl z7&?1*W&P7-CJ3Nx@V)}qf@KomvrN7Z`N@aDnIzzo?h1>tJe96+N{YKa$}nQU?BdXC0IgGa`7N4 z9x8Ycs~{e|d#K>ui{M2gB0?hwD;@+1Y6&S#L}_3HD{0&i<7&0dp(fI>!aBd1_wAcE zJMZnhw=Amz3WQsbT;r zUD>Wh>IbTSvSTOjZT!CSPu-dzv;}sD?iW{@{ekMuMxWOYhhpYx|3%vG{Cy+RJ}nXn zn7l`GBR;qou>VA)ngqo?lraP2c@`l>1t}CEj+b>Ms6QyJk^q7Uh!BbsGa1xFC=!&cK~_hEQClZ^~cX7xq>=wbIf6xU_}72442q32v^*a<%x$+M6Lv(Jnuuq4?g4goeTOj z5lbj8OBZ}4AFWqojW5;#ZC7J z6oX6wGA%N1hDgv>2+g#)ZIb!hjtQbb!e_r95x+-|vsADmfP4|ApR=ms09TsmuQl}n@+fZ5 z*iB;wa(ugS7yqs@TO<--T6ZPnY$lnnsV$|wFPw=_TTOjZotk@?f}Pw$q=QkzqxTJQ zCX<@=1p~%E@$X;ZETBJ$;F{34xm`2h>v0N;cB^G(10w;pduiaYN5|^ANs1X8ma`>i z%Kngp&H_M0k{q_%-BxgNBsMfLBd(Vg7J?dicmg7(o*1LDQ0&4dKO_=ysvr~KO?+9- zVmoklCRkmWXVX(NjWQsD*LGQukRKiqbr)V^Rz!3PP7g()I9UU(eZO52<*ki%K}I(c z;gkR<4L8t}k-@WXFt+#+TliU;v`WOQ&({PIojeFt;fw&9`6N8~+*|CYuRn|sfzJnD zEVBKAGXf|8PESomVnE!wzW3lXCt}{)*`h6+5rDJ2G>OOqr$!q@?I)ZNK*4W_-Fax6 zfUB!z9=yitE7#_la&(YV;pEUp@Q=+k5eKN;4RB%sk_2E(M05~ARzV5_Vp-&-k3bmb z`m-~IfOJ^>9ln^DZ{z~DeW-f@y{d9{|WLFD-Hc&N0_$n*bVA!#+B`>OJ-p7#N#%OH}K@>26Xtl_4z>33XR z*Diw>XFopl^7+^6B4T$SYGXW?{W-A!lThlP9n-vM$=WU}y!}_W@q!~|B-h)45T8VJ z{hy_SAnA<+rv#`67-eO{V>;M~gQ=ZQ5}Xo1+g=~=MMBrRfC`YnV?^EMN^nOJfJCb+ zmqCJ$OpY=|AIbwx2~hnL$q}wt&eHg;-i{Mc_oY10^)3Lb>ghbdcQ)va0Chd@M7yl; nMnKk=7p~v@v_jXrfN%T{1zqe2iq|Ed00000NkvXXu0mjfh${8f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json new file mode 100644 index 00000000000..7ab03e564e8 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "we_open" + }, + { + "name": "bazaar" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png new file mode 100644 index 0000000000000000000000000000000000000000..141a97768a05114c34d8a8002e7e4f3652ee6f65 GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Rrl zr;B4q#hkY@4`vHHiX7YD#Hkvx^nzH9vm(3WhoJwg{#80nqDvI2UikhI|0BNV=>?@J zP2Vo9Uf#vR>i=?Sz=r_M+?FjGS!WZgSNuNvEH&MHx97IACCtYAoy*dUj4R*IHs73Y zem%j`k0GK@m|@yumWHPmj6`!M96EH@`niN-S=skvKIhi6EcnbXue-7>`tx=}u0Iw( zuIcTyH`it_7}lRn-LW_lwpS0?qshBxBx*2S-u&Wu#;iCNm~5t}bO zY2W4Bmu{sp)`i8pzAKG)ahb51M{nr+V_R6j?_7A zmE%~k{p5^ym9qq+eTo;}R*<#PWs<(dbd=Z5*6!dm^X{Wb%9qrVHI6BKo}m`laDZd| z^8=kPHK*)JdQ>iCyL9FO%g$LZB-X#T33oitQ4#fxUsXTq`omY37&p~jdE2sYd+1I6 zQpv*^5+!nzmvA{ai*+BAdzw`w>fgVZZPf)^9+}Seyqf*ok2JQkUwC2NpIPPBAR)an zyFFGvxmnj>c7ejYl5hWkRxf+6sL}U9<+^Ml$M#u?`yJ;zkf_x=S39w??PRNbn*^`+ z<;2+iylRfe)t1?cI{s3eT{7%)Mi~8PwCJ}4fpDy|Lk*EKq{;9HM6vlkyo>-o}I@y2T zev9Yb9(q#o-l`ja>g$NBHNU=9KJ9dD?ag(E?PT;Hr`YXXXMCTp{uWzviIT#fg`s!q zKPz7U&#^7u&fwJ+zekEQ(ij%ETyOqcTk~_r+?yv(_n9~T&gMZR`v#r4Kl|UN?s!un b{D=L}^XakdGFK9Td6U7@)z4*}Q$iB}fit%l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff478ac17960c58e3e43a170a991cb1b72df733 GIT binary patch literal 895 zcmV-_1AzRAP)Px&IY~r8RCt{2S;3CtFbp-TO~nOOYKqzebL9U&YB*30MM7Mv;m|oO?s{Cuq;1$i zT0aR1wXtJ6uASro7!3b4R?kxWw%hfex7+A>(=_UwRaN!;S>_zP9}Z8kHMvsB0SP=1 zbLEyInKJ4?=G^dH$^ryBqd6bal`0TPlxWUhE|+g(^E?MWmO3Vle`XMVFI6Dn<8%tX z%bW{l1$7ib1F|j4<;F2Ajvy~~XmHncBi-xux(E211v~?$$fEqx;`nQcFa=#b$pL)6 zEla5Ddi1WYYuJ{hDl5&k6v0p6ZMPE(lNRyJImq)Ix~_}TCw&SyPMU|;gA{g;9)=WX z3h^_bDIGGj@E(rGqxi0_YdE*9_)gN#ZJ25|01H5@60VHafy_B5ybsEp+ZO0p0D!r& zbpAPZ1CRhrRl=3=AZXw#$TLWjL;Z7|=XR@YP-T+4lj1&GDVJNK&;IGe-^1}nw6RXT0btl4;C!M+@0D~Icke$ zvxHy(Bt;l)tx)|Gh)q4u%DXRO5QYHoA`~hvIMJik|CczoEfn4lneeDE(pob_N~!}C zbk%7er|G)%NIOTK%FrFAwm|s(1F!%9OzXvuoYxLMvG)NX9n#!$Y#+`7RN=X8haXoU zfg4XVDRXYt-kr;F9if0pHgjL7ufbK|6Y^CEtv<@}mPAi+T!-WgzZbwZ7P=467D1Ey z)&;0RbMEt~^FkNt(Fy51K+ge^{Kx6kZ_6_JlZdrnY=cW~S^~~P*L5p&;+gUQ)9g=j zA3)PhGca`4j~zpGr@9kJb|r=>ETta(KD8=ccn_bq+c1`|B<@wTWAjub3ji9FIX5au z`~4oS*Xw93moK~@diiFv0bsi~T=kTju%y@GXkciS(Qw|2X&;Z3f2nJ6fUy%2v@30` z1xq?!E&u>OvlTWNmciKJ)C!Fq24jbZ=f(~TFm@P>9X56tVeBx2vBSm=8$0|^j>~cw zI~;(q!vPpOjDL(BHg?$9VPl7l9X572JTMl<4jVgc?69%J#tsKy?C>4N4jT+FgD+_r VmqnHZ*HZuh002ovPDHLkV1ggxj!ysp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b346516b2946aab60d47e81b73c0400cff580c GIT binary patch literal 972 zcmV;-12g=IP)Px&hDk(0RCt{2Sj(#8Fbq|Ppb{_b%)ELQmrPR!M zf6XV5-ZjRMb8d8yui>`kB0B?+;#%v8QBt2kKQP9u?hB9snSOm+YiEJV-F>1!0G`k1 z3AMMRq3nT_O{-1;=iIERNkHnqUav)G^e5nbCAY`KYzhY8e!q`dAk{WE0)~`G`4o&X zGo3Nph^CFwN3aQ^u3`#^exe(Ta83q&@@`5m(SO@xjabZpuImO2Hyr-%=G5O>z^Pc!0X(X8!83K2Fcz@0B{LP1p)U2{*L5uiQXVN2wmJ> zZc_~YrKl(?oTG3leBGtw0$;@n1Dnv|M`MLy6H!@O{A*a@Pib+yyND2x>Mq0zW7_hE zCdjCf2_LI_gBbCJ zTWcqu6xL?LZnQYZ-mLKEw0H?tn0M_`*o+nr3Eqx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png new file mode 100644 index 0000000000000000000000000000000000000000..cb9e52edf37669c090bd7b92303b2724eb711032 GIT binary patch literal 834 zcmV-I1HJr-P)Px%{7FPXRCt{2nZau0Fbsy(Wev1g| z=k{WZYWscPPoGOEroC2fHG;Ez;MSlu5C}L8d)B};crXx%J3;t+^#GrlWm(>=!SmVG zz~Dj%L_}Ynk1PwpdpuGzWFM;OO{bV&3$>u~n*c&K)! zX*vxu=X`Pw4$t#U+qQMtBl=to+&}JfEeL;V0RY1=9E0s0JO{I{Ep@pH;rF;rZiCy#a|jsstA|SskZ6&G!&ut# zz9hz|YJk-?=X?r+W*2_-2Ehz~wI8DcP4%q-bCBaaFF&rIM0yIe*sTp5;;4OBT>)~o z=Xs`_^KpOMwrb8o(K(oT?i7M;DSt~J5IhJeA44rTO(`H}8~GMvR0qk?24$tdx~}T| zJAI7f_~qcF(X0X3zId)(?bU$qB1E z@5_1|$D@7AOy1c6h;HrzrIe*~pu@qv5JJ;gKq3!otuzHdIwWVmM+oJ60IpL? zPc1ODfJm{E?Ovh*e5SDr$ost_^^xnRT|g7T76Am9dE|cxp-BkU0BC0bEL|+KR&fFl zLjEqmS=aS&zE=QwA310BsBN7E%oSjX9CEFPl+x*Q?Ig&T{IV=v{aE>5(}vqeVWdE- zVDY7V^)3LrGH^A!`@Y{2LG^fOy#@ohulJydAo?Wg`%#30w2^*Zy%wAA$(jzx9~ z!U%a`#0w)t|GzN8egCzE5xHu-Fye&~9WRVn2E8!iIF92uj`PF$2WLCM-qwEZy#N3J M07*qoM6N<$f`HtNwEzGB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png new file mode 100644 index 0000000000000000000000000000000000000000..09ad4bbcd4126c792df3dad622b50895a65fb806 GIT binary patch literal 653 zcmV;80&@L{P)Px%M@d9MRCt{2m@$vTAPj}yoo=X9Q6VvA?En8s89PRbs48Xa4JYRu$0U&IZt44` zlw$J?m=FVm5JCtcgb?zEd>l3Gy6)L(bGzND#`{a(mP1Be*F8_C)BJmyCIEnLlXhv7 zK6^qXcx~tTwc}0GbZ8PjTMfL`u>w7$&(`YN;A{NtY1^Y|#$@I73dplZN@?+X7>4=T zu9g^}6!AcQ5g1zMIPgoX_WZ zHEp1pzV8>SB!QMLLbk6C)FKljX8^Fw{hA9=)oajmBm-*tzF&y5D_#m-x7ohhj~!!6 zOYLp2`XVF__qLc7taEu!n4JW@8?0ZC+7B*G)5lP061K!`-T$}7u(o^S9SI(I;d8jv zrd8N~)&vN7V^|YBV#J!Dfi=MbtO>Fv$eJK)f~*O$CU_jy1i_jhYl5r^vL@*J^Px(8A(JzRCt{2S<7ndFbq9Yx(Jv+z{@QA|DV*QmxjPF;9a}uRYq3iN77DgxH&L% zrmZg@gSn?e2$2EwY#hf(N%}sHBb;*^CzRlvi{x-{HukcN@ny{L79fBGX~G=VHk>agLeq3KkvY^2vHQ2j-M%L;WkZE(wQYp(**B*F^oA% zy0gRCmvip6rT}kg95uOUtu3~`+KxeEC<;ocSSyc%r{mg&v@VbfDVYWuuY2pU>gPZ|xAZIzTS22_XSg1os|q zdEd@CpmY+=$)~~yJU1}4c~KFRLioVX&(Ewu8f3^GDXLmGsF6cyn`@t&HYf)GP*XuV zgDa>N!Bp?f-3Q1sK9|kc;IgG-c;V!suOV^(KMc_X`fH4VwKnoBe@2H80)?KIpQQ^9 zibCF&Q~4}mt;Mn|NrUCu$x5s#mQudvIltx6>Hy`x9QW6{0C5p6-k+76Qc{AaiS{Na z*O9qjYIUWkD%}Vjz7{UV3MghK6QDPiyKyjuQ+3l{)%%nqNy3uW*F#%9d5-81Ijs|6+7I583x#W zKx=lm1v3nE$_}5!3yQMpd)s;1v3nE!Vb4$hJjAl;a1Er&=EV_f*A%nVuxEW l!$7C(@Wl*YxNzYtd;^i^d*(9Nh(7=T002ovPDHLkV1jzd`@R4G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/meta.json b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json new file mode 100644 index 00000000000..67900194216 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by ladyayla and MaxxOrion for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "junktire1", + "directions": 4 + }, + { + "name": "junktire2", + "directions": 4 + }, + { + "name": "junktire3", + "directions": 4 + }, + { + "name": "junktire4", + "directions": 4 + }, + { + "name": "junktire5", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/meta.json b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json new file mode 100644 index 00000000000..caa105acab9 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Ported from Nukapop-13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "torch_unlit" + }, + { + "name": "torch_lit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "wall_torch_unlit", + "directions": 4 + }, + { + "name": "wall_torch_lit", + "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 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdd6e0323201567cb3bed6b77dae60531359788 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zB|KdmLn`LH zy=9nn*g>H6q2kvtvD+LzRgGDpc~^e&*>(PUq7?l@D6Hygo5?#RgS<7`K3dDKpKCMx z@jq*!`I>2>FFaFPMVi;`l>49Y=6?M5#3^?=^UoWdkSdK9J#D7jF#Yw-zJ7U}C(rBZ<(*!svu`Dy zuli$j?@7U(ndg;*t=~lUe|J{?yye8#8uPpA)r`LuPCQ*<+!}r6@}phMsz(=8-C8~G rTi*T?70>?jJ`~gYBM-5Kfg$3x_@VWAeZIfE13*Hau6{1-oD!M<z4vsFLn64liATVvV0(7b~If?{e7`8xL!Ac6l2j0SQMSk&M%`WwKJOncS!VP~QDLB~8u#<}$Ka`ZDdqK6* zp#AMlDirPjAiIq`Kr%H?N5|*%(y>WJ(g6AEI_+$&yAdeX#e0A<06O2^;VG#~X&%6F z#1%{wKn*~;uDkbvij)9;YR!KFfYuwEoemCw3pZk5HGmYzw&A`2pa@kZ48S`d?g9TC z2s`j@2)Z72z4#nn}qmWfT3hADt97;hf@BW%j%5R0RCFGBM$FH f#E+lKFamu5oZ;tC2LfhH00000NkvXXu0mjfBW3CY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..d629bc00eb5d8b2341abbd8498e1e3cdee9218d1 GIT binary patch literal 764 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 Y1IwE{)uxKVgLXD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png new file mode 100644 index 0000000000000000000000000000000000000000..da1078bd1463ed24f306190099e7f515632a0d2e GIT binary patch literal 908 zcmV;719SX|P)Px&MoC0LR9J=Wm$7ftKp4e;Ms^bus(5f3L9JA=Dv&^+0udWh7Z{jWnE3-)_!Ia8 zii(89fT~2TnxZrr9Hqetsbq%hcbuKL24N=hmc;Shz32D6`+R{l)>z|zhxIQO?S!qw zybfwM0PjC{m-tE-@cLnx>~5)LBdgAMKG*jaQM@FiQ~^T%?#o2~)^MwUa>4Oj0DAoi z2i+43z%Glt6Sfk+>2WlOQpAGO=_O1j4C5J({aX;Wl7sGvb)ziuSI-~tsXO9ubOFFH zo-vGPOJf^umBY~m?d?sV1P3}{E0K_yBt@uKDgcz?fMCDv{1*AM-G=^NN(OefEYA7^ z?gV!ke)+g^j0hXXGxjPzpSmNUWCzar1Kz%Ty7JyIp0OADym%03awy4x;~!OaHpWC& zowNRcH}^NW8QcZn`{`Fe^@P#Y4hd?u+7)F85KE8eP*=Gkvg$(q?aF^ zCn=k<5D|dxXwq25^SKt36)$rEEkKvx^}|s2@*;BcDYB?nDvZ6{=}WLd+3t8QqXP1s zjTzBZt;h2@OeeWxiy*t;+HJUqVjRz9XG0A>I!}N|KY38IbzR%rzsg{iqX-r#`^`lq zY<|Q7@k& zLNZYVDHA~3Q`hQ5r1rYGp4kZnHmE?z+e&XQ@0TExL>6#7SJk>%(L!bJWB-;WFxN9t z7{aVl^V&Cdg4tYxnw`1_5TNGu`V-wV4o4Rpe>=Cp=!84Bw-QLdx6Q*v_E2eB3+d#G zDDz0xaI5-S$WsEcLQFA&_V#9q9F)bY&VD9j9rGQMD!Jj&r(k= z$jyKroN>e?H-FDV(HZfN{+O&PPf)Y5L5|D-b2Q&i;YR8DEJmOLW2ux=L iMZ{~YvBnx}2z~;ezsK{NHghfj0000Px&lSxEDR9J=Wm%(r1Mi|9^jsW98WFJh>HdYZRO0|u)3T>5JrC!qWUiRF-t><2P zZZDB~L)#LyTCKW5phQGfVjpY)YrG)22WO@>@j!q*R4VVpjA!P(`R04y46wrvJN)0F z<#m4D`ZQiP>2?1mcitu_q#G|^v|<3eZY`bUR0=V`Pk;8e79tmT`JxpI;vkBc`60u} zJWUEf(K0Y~9RTmn-&%wQ@amh>*wl4Nyeb0ToiBw1QN)kGzS&sBp7>$K!AkNViU^_z zyKXV_!%aCeD6AgxFGT1+CiVaZwYkTJ!Y_ic1W&0^&WCWT=Ne+mk5M^1l`%cfLZC4pi=A5vGfnVMXWxHmSWq&#>ZUnZsm+8%}B4RZxg{x~hcNLy00 zYet!_H%1(BZUkyZnXA6XS<99mR4(ZBT)A68un4D8z+FfmmCa=YoJs-j&L@Z>tT>=i zn$jpuvFjE^%bA~>r{{8U>PTTCvC{8|#cNz7an~Dj{rCNH0gFOZN%j=CK=#gn{QnbcT^#8; zU$hKa7l7O&ON&w+!CH?}K@7{?BF3fP4JxcH;7M-Df$HJ1m)onr>;8?_^~Q2n%O0_5 zs1gv?%mIN_Zh<6H;+{~EZ!BO@$f8?BxR(*{u)_{J{AchFIH<+x6fJ2w00000NkvXX Hu0mjf23^cD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cd2612a932f69f24da73c278b4edfb156c73fd GIT binary patch literal 798 zcmV+(1L6FMP)*+SV6{36 zq~J-_E?!xG|%)w|9ERm!I6%fQYL%>&*~QDgZAX@*H4} z%Nq|M@DC7a9AYflln5YiJlJbiJ{m^`Jbk$6Nf?4qtIr;Uwg=vL_4Y$=OyX&1wjr&c zR;QaSM*Wcd!aBb^{bwQc3MXD8L#>y1dX zbKkjoN^V1945S&y%4I>Kf;9G6BkHwD{SU90#VNKDQZUT23h}~$GL7=ZLFi zMp1;2wkT9;y_pU`2q&1dG}XUk;Dd4{Hqo1OH>4|JU_285gkVE;Gw=D)Gb6t;0i+!$ cg##3+Qy(FN>ipE53IG5A07*qoM6N<$f+Fr@)c^nh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3afcd2e1e26c7028877da6750d489f2350297be2 GIT binary patch literal 647 zcmV;20(kw2P)pMiy zA?V;m5B)i5intfq#1*MSl9#iCS%yXI9fAjq2eczec4Y6Wr01co4G=K)s z02)98Xn_9(aGpOJ@avCGYtnzIHrM_X0Orw1Sj0l>qTTDud$@*-dQHr$KoNks7a&C> zNHi9%0jtv$+mRjFN6XW)FaV#Gn=zD5L`BuKWQ)|`eSB9az50rR5&(l>P%$1DhLn4V z^6!MAX!zA!HNZhQ3|c?{ys&HlnF>T?sAOW(_N;C8r{1UZ%__*iMfg;%OobUnv1~^6 z5rwVDa9Gpdc!2<5elj$QruJ?3AMWpD>)a#!tO(x#G;376FiVsBFv2r=f2?F8&I+!(^MK@M15*N?q_sM&Zd`|(P1fW^cjz@hukSqq6+#96< zsUmYO0G_7u=uSb*EJC*(k3&L~9;5#I3@OC(WH#w!ZAUInTT zj?=pXgq-ruR|mlu^_I9eJCqTmT~ejMXTj)j;k#Q?LUCxUd#naO{{&0m1LZa=^3W=_4yaXc? zPs7B>OR%vP3AIBD5>g-)B1;rd6IC!!QH6Zh`QsbccH%l!7yrw>w&Q!gbM8IoI7@cT zDgjD>5}*Vq0ZM=ppaduZasxcwemtyJ?znk>aB4xl>gI>7ulA|ky>TS~82vr?Ww$GL zO~&Km*+yVP#t#Rd=LVSz0OMQhO>6i1Q}^RAjRy~{^ZnSKKieG=9W)E3@EJHcJGVyt zmIYRIb0WaCSqMk;vLFfr;Ax}2YAcl`JL#S0em@mpBe*x&PsXd#%m@%dMm)5hS#9~I z3pHY18)d;!>!-U;JD|A%bn5+dL!0ZX*6ICqh8@sIdmq2JedqVe6#tz|0buB;6+z&sUPjfQEPdk@IVI~dJAX2yB^_#a2qWvuld9c=W zDHrc-@j|2eAn5?}t&jwf*$aSR1SH8glE-X~4lf5*5M&b>A_(sJAak{2fh38==$y>i zqLtB-fY`Voxw(Z|6oEzOXCWV@%6A#_Q&?RzO@#sQUd>8jm#4LHDbLbEBA_yj!FU0S zEB?(;7$ECQ**8i=l73ehKyAB|@a%A$A*3cXfdaSi2)M=9nv-kQ4aC+EAw~fGHohJNRCt{2mrqL@K^VqID)C^EL`?7!DUk|7YY&Q0p`chO<{Jot zM^F7Uo;(VLegmb@q98;NbI=wFYKoXk*n}hmJyaUD`;5NpJ3Heh+1;RreIVJ{$?m+r zegDm7P&~0>fEXYKhyh}N7$63S0iHj=``I@(j;Z8`Ja05x@_5~>iJzs)K;Hn~PLA8} zre4c&$!dsx$p`@BFOy@Ue%ltKi5JRmVoCJ3lj%sdlLVO%40E|y&QnCaKN52(gfI?Z~HIEqiH8s!9~ZT2gG$Q*z8J=|9{>cKQjm7r6#y3ASY5Kq)?e)+7@nC*i$b3p%7Pdp56~A( z4ajfH2B2Tqj7f+r-~awi;DrQr4^dO1lI&D+v}Jda2C%ucExmw}qq>Lq+mYWBdADpN zuU~l@Jy5#1GraimlQwTM&SP&X$^7zyz4N1Bgf;@;V!R!dFaNl6e(t0k@FpQ(5W>3E z7HcaX>@T|q8pNZGNG~6A%w;Qf+ze@3HY;h$rLF;b74pU8rEDhcj!hL22>^^ENmCO! zWxjEB7ea5DMhd{68V0$m`8#D|WWxEbMh`$PMXAY_Y(4yjev;_0PeuCQ&>LUpyyHF3 d|IcZ^^&bu0NGgsX9asPW002ovPDHLkV1nUUN#6hf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6dd9648c612f339eabb1c5b8fa4a5944aa3e92 GIT binary patch literal 724 zcmV;_0xSKAP)`yJ+%l5K7j8ac=Y7c zc=9Ot4kCCE1O>5&svxws6myYUOp$siO3c5_#7(kE6RL=^17$bK?#wr{Gm~_R{jw+k z1)u;FfC5ke3P1rUfNudXLy%8xIQULNkjvxxO58#-WG-i&1 zh?N6SnoUe{0~84|jwsMkj z$x74(fcht6VvTFIQZgh$233qKKe!$bgf9Xzg*XQC7WIuaGDra7IRsULdw`~O$c;*& zjHv_R03bZ@N|scjSJZ4MHvpEk4FRfeM+J>aw;cjtetAx+(-i?)90oC}N#QvMv~{2- zKoY3}AFr>gOnL-jxTv9sAPC<}C%huad+4cDc&J(Pp~1ApB|bMETfRNgDhP|fC?W4G z7;|H7g-1Yy2&@8lm>I|oQv!|>vE3pP7gzTT5ZHfqdLrH9ivXP&iQewAWIzIi2|Pt& z-_)O3*z4H^fV0O-#4AwJw;K~BA%UXr2X)IR-vurJBx0sebS*&EiiX85iCX6%7PRi^ zoKeLAfR`MCwT3SfHuMfqxTa9j=NE+6dYg?U4gi$z?e3W3L%q}B9*XA}=W{C-0A&B* zkVBwsASfMg{p$Wz zdg+s80W5$8umBdo0$2bGU;&H)6!Md9E|cQx`{&ojeW&)o=i}3V2_pbMm%qEJ5g7Pi zyW@jA0M$5@N)9#vbr2l^sK#YwFg%bP3cM%J#CR)p6@qN0-}@bG7!iZ2+A-cSK&k2w z;`~^9p>$sldje<2fBq%eOZU}R>O@_60EPeoPgJT;9ER-J*KVfjz6t>G_u@8mA0DAL z-5(18E0;LK1IUAHW|+aKMxknm4WQP!DzzGlC*g{KS|w!L08;0FE-rZtLwwJ_mTH)p z$p^lBez^8QV*)^^0!cQGwbJ=8PJ3hLy3Fs1)G);YI4j*G3i%0R@bfcZ`LjX1Twswy~tMDf0_MD?~y#jpU z8sUP+iYMoh^G5%(^=V#Q=nCFvtFQ?Z>=}@NiCehptz&1Q5fZM^;M` zVI`Oh9+42};<~Z@JAqBB;f-nsA;9EfP&yhQ(tiKPGbGh}t?MV%g(^xR4@hIlP7HHL zYu;$YGo};(zzTWg5keT?35U!{n}o94H48Za$T+*-hXBZSxLWpmwf{%``7j0`S&uW^ zjFqCvNJGJ@#RH~5LLQLTDaK%YZgGk49q#W1TCH&aiEZxNIFHviHo2V6N}Kd+ZPf(` zAn;CeLoxyY!2`O<1qR)a3@QK+wPUF=wQ?=MXUGD)0d?#?+zPU)2Y|!QA3N*p`kD%<}n_ZyAID+|f_c zVloDOJ)#msrO*MeG%$7^WGVA|09XbvKEDR{;S3BQQvb&X&3gRThMECcT43#q@#;kR zZ1g~0&9QVBiv`d6(Xcb|eZm0fq+vZMca%7eeg3`IYIV=PP)dNp2w7`oAfCuF8>6e< z^k91&_TDzHL1@eQqnD*@qD95~22XHb3UO!2nS9 z0n?b>RJ&hpw7df5{^5~#kKSh4Lg&}@yWl?~KZky6nra13ODCp!Z>JnHhUa0Db0L7A w=&W2}&JaYzdFTM+AR?N*e*pmyz`p}{2Vxzew3d2`B>(^b07*qoM6N<$f(-@O2mk;8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e8d731635d8c1ea654e7cece13c5f7777403f0 GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_3_ z(9^{+q+-t7X};cv9R%9kb*chX1f%zaEOGS@XQLeZU4GzsqF(@@=?qo=i$=ZJHrE2BrwS_7Ijkg#ga_01In!x7p zZP%1(zRs!*yz3Jc5(EV1)K|xZ`T02-3f1!^a2rgr5?~hD>*{!mYjOC+Iwgh*wuXNR zJ7&D*U)Fs&(De~V3%_#K`*I)o58tisUwgi}@LSFz$(`&C%R879oNChNUJ!d8CnQ+N zbxvPTQ?B2~yyZ=wgowi&W(SUqoV9F>3)MID?Nz&b$G+>E@bU+n8QOPRhS{;2USa6Y zcfMVHd0zBB&)y}{VN4u5ek}T9)2ET8wCs}*V@&M*+E@c&D{EV??$;k;l45v17@v8+ hrDlH$C~zJ`$(yCOU94hbR|UohgQu&X%Q~loCIC6dt(E`) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png new file mode 100644 index 0000000000000000000000000000000000000000..762f4164a322e5aa126533273aaa45107587c806 GIT binary patch literal 491 zcmVJNRCt{2mOo3wKp4hfvFM;kQna{4#8^R499jfFjiZyF#>vr- zAvn0Xw1a=9#)#NOsb1$G${o2N!u!B+*SnJU_x{OyDbXK`0T_S*7=Qs7 zfB_hQ0T>_`z(H+i=vQ2^?hZavXT7LTSIxVb!T?}gu2thE$`t|ESsJh5vD}mE!U28) zGJ(hqu;7%a+sUTjEqb*NfV@jDO~PyiVAo$A7oBRnJU2@;r5>yT{3fJN`30VD)wfS4M$0-%DJ h>VJO~GXMkF&=-4yrw5WDc`g6|002ovPDHLkV1mrX)Eoc+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png b/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9bff64e6c509db1f0946b4b38c770f3a8a24fa GIT binary patch literal 586 zcmV-Q0=4~#P)>l_~%Ey8tP-JCO^ zqf`6+r5djbb_P_bIGFNLDM{8yfbwXa=28V}ju5iGsh;3G#AIqd)MheYZ&2tA=mfEu zB_pZ^Ra8*FV{OE}jwq3mO&kmSOw> zt`N~IV8ZqW_%9I@(MBa1#MyG4BAl@R3CUAUI6vIrv{U;|kHVET+^3(2)ZAu$nTzO0 zyYO8=S)iZuP`V+Mv|Y(sJjqCpxf!V|!J>}LT@c{T^-|KX%*S=8)~Rv5PCtrvz=Hed z2^o;ml9DQWbh~tL`6&S`qRK?cYLb*{X0k+&;q`9Z1?hyxt2XG@d1IU8iewTu{`@Wi YKV}jnA6ewCiU0rr07*qoM6N<$f~vm?wEzGB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png b/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png new file mode 100644 index 0000000000000000000000000000000000000000..e6608f1928f86c1c6000579316adb175f4f9454c GIT binary patch literal 2503 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 ZfApV)%$&$p`}rmT%WJk~wWg?qe*t<&8k7J4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..adc809dd334f27c4e3392a728e152a186dd46914 GIT binary patch literal 1070 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 IM6N<$f`o2YlmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3dacbc7b505f0c6778d71b58c426b86776df2d9d GIT binary patch literal 1237 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4073d1e558ca43e5729785ba7b4f4fd0f578bd GIT binary patch literal 1382 zcmV-s1)2JZP)Px)AW1|)RCt{2non!vMi|DQY@Lf@f@KuDY?G}iP2I-nt-X|#KuNREJ!D}+4+*&i z+Dni9B0aT`kI+JM*us`jDCAJ+WtVl_I@^OoHidYF6@sG68r*}K@ko|r{Tca{8vP)| z9?gtr9=)1*A4xz?PEJlvPEO7(WrlhH0I;{aGgzop66@cxOejhb0MKqV@%YIRpZA@_ zel;SNWsd#DWpQx{<+2LPGEvqlcyNDXz>cLtfS%svlf5x5C`!@x7l(3L9sWko007Jt z6`Kf!m}8ehePxvoR5rby!7l+O=8b9bq8Pt6)2a%Je) ze)JHQWukRG4DqB$MFfZ|JUcr_za3*`{tPSgXXx}B==2-d_-qY8u(RChH(blb`ap^z z;Kj*sU{{9D|Gzk4N00dyxBciLI(^`E``A{0*at9MU*q4|u~9$v`anv&z=Qi6gR(aA z0&_*hwVpF8bf(GdI4f6_qOFdY0QK}P9zQvnNlgT>#AJxSF%l;->9}*!PEsL2S*w7# zK`|v}`MZH2YMY!N`= z$Eo20Q2FtkoSYm=$aC?ieErq_;KsCU+xPcB9E6@vDjtuA<-2b`ABgEVyW{-L7at9L znz@om0T^>dWuh^gM5YCZ`@{;!r~u+!C2&1+ z1W1BR3gEX3ge8*#$mG@w5cx$(S$;eWm1-51W#Zru17B{BA3tpBSXV7ns#O5b1N9jx z0%ZDeYGPdiGW<9-u>_Fe$HTz#0KZ*eDtUlRKOTkF_1kFw-3Acsp{yUNeOo*T>=8Q? zA^3S85nF(1Uj|OvttS8c&Ku#|hrR@4`|&8uo}Q^F z*wk@jvOFLdw>}dLB|s8>JPJ#1mR!p}{NUZteT5Pr2|rFv=C(ohl7-h>C}9`INCNC{ zsBp&w6ag~*I5n}hK^cCWn%H?jTt7}tq)R}iAEzc#9w5_?Qx o2nf9k$oAvZgcd-yAI~A?KOCxMsv$xt>i_@%07*qoM6N<$g3;@d#Q*>R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png new file mode 100644 index 0000000000000000000000000000000000000000..35e169511a452d65d97c2a6b8bcc36d0b1e749a1 GIT binary patch literal 783 zcmV+q1MvKbP)smr^x0@ku3o@ zbNq-LjB0KDgVBHOeCbn=Dg6V$JQa_*K2xkUL{Rwx@MF#^*R9Vh0BAUI6adsl zI01q1cEi{c04x8o(U2D>CglB@nTQHuHNJjzQfgXn%XnS?E^ghK-dqlps&!+6d3ovb zq`Y@`+JsP_fjRE^xu-2-QzuW+Z(b0dNeGCZ#T-F2zI+xO4OL%P-jSiTZ~yQyuj&20 zjIbTXO{UI{3pbEX6zKmzyuViz-Y-#`a|3&?CC|~Gt4bJsT?ODMT*zeTdu_dG_$Zqd z=(8pv|He52+2uo^2rz_E9c_Jf&+j$fCCG)<^oSS_jqWk)&@7e3+mb)tej$oXC zY+_Y$F()d8c~{WpN*6?FY0Z3JIGvWZ5m>2K=u-E(CmN%p8KsD7fQNh zz^HLOevoxNs@nkU_PD7!J|w`3!dcd&^mACZ6XO5? N002ovPDHLkV1gmJXNv#; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd4111cf39284eca502b284c26fbad6e99752b0 GIT binary patch literal 548 zcmV+<0^9wGP)257c?RsF_7R#BSQ4u+^l<-+<6-eg3J`To!!m6&&=-5 zp!j2B00v+H24DaNU;qYS00v-y{{=9gnr_kfw0Jep7l4)3H7Qbmd=Q7ZoDzZfcw$Q5 zD*f2#m~={or#1OnjCGm|57d~x#>0MXr+vso$beJ!B?Af8UAfdF3X mJWtzazE1%CG6rA(2KWTud-(*S1hxGD0000m`WjP;~4PMyHM) zBBGC#-yrG`5_EBcD5Q%A14%^GDCjut^RBPXF0-w=TM^6yGBb<5&u`y9!o$>vVGw@icC%6f>ws*y3a+;pMby~D` zOF|G_9{b^0aIe4|@L5YpT{#At0tBIeWYD6L=!EZZ3HXeRvHaN@7ywyVNejvX%+VK6 z%9#!orW;)HnKOdYK`P8p04$yYHsv&{Qs2Tbly00@d(ac}>S&e-cxt#9C%G62IyyXJZ3y?kOC zL!I0=EA}oN$UADm=CJ_uA;Qgm3?PaOfB`T72H*>jx(^kFf}%_S0000Afix=pq2GhispP!{qIb%RbeN=g(iZtTEoeq<_5?Bofy85u)V!r2S(9=71d$|4EK$q_G;s&8zf>8UUF?-o=8 z5I~ni#?Fu(F!ug~T3!g-=hjlHp8gO+V0@k&S06u3lobr%6mtf$Muy1Td7tMCVKq2B z!sow}7xp`@e2|DR0^-@04iG=Sf8$z^I&uX-{tsYnu;T@7egtGui!>sFVgwOZ5!ZCvYzoES zU?DbIC>ElHHvSA*k!T@XtRjnMS#~i2F^EkB6*Y*3sD)P7d2i-SCbRRAk6FUPePNh; z4nxj!?tSmQsi7)M0Vn_kpa2wr0#E=7KmjO#{|{g=(k<}*l}rb!0?;1rqN~gq`K6Ko zCdS9bS@MuhGg)7{F9~33dPW@XZunZfC;)Wb-1>o1i9O$oy8>`w2*qJK_L3)nRSR=7 zqM;$TBu`JzMt*s9J>Ue({^g`6U;ltH21F)(MB(ls+wW17mw;pI67f=a z0$}P<@ZkG53N|*$+|NH31#heL9~T_+jNllD%rHgGK(5mxIz7MDJn$-W>C9ySojBc& z=2)A4!>GA@-Y=d2I0rtBMX9B|mqxW`XDeuUZ-SHOW^e*=p0)O+YWNuc4YxLNk4{-aVnADa!}4}?uS{~0K7Ej6OUo? zx21dWiU7Iz@cB+=KuC002ovPDHLkV1mE^ BC^G;6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5c41c7077958e0decf41f80cc70993b146ed34 GIT binary patch literal 667 zcmV;M0%ZM(P)GRQp>Vf7PA3!WM{KXI zrT}B3qg*zK*54mthWUpTV0bkUo&b~Y$I0;ac8s0nPwe@@p<#Lk{S5?BtsDX1W}I+y zV~xg5z5q1{ATp4czgGaL)z?;HK*T-~+hV)PY+X;dgUg<|HvnwmQ)%e%dRmVK=x*J@}u=iOz_0RK{CBGFmCb$nDKhYDhF2|@RfH<|R+{Hh7`h6`d zbC6OE(ff$?$oIV%^E`zDP=S>9C@{~|Guv&pNw&5qb6}Z|ot^iYGw00g zLF}^`00UqE41fVJ00zJS7ytt>6~M~fYhI_~AiHd1_5PEYJqMsIUpfQyJ**~#n+V|E zofVH|&1s`1%8gzpGGs6+v3Z$AOz*$yrdKrlJ{ zm7nj=i+!+B1iZSt9&+_4xWoWfE+flVgVoX9x=hhJ;ZdCZqu{0j;KUTq6i(sS*9I;u zo<`-x8yRSG>8u#BK7?Gz<2T_%42Wk=H6f9AsgZmTI~o{7Ls4Zw-IjdxP` zd#?|--3`Q&+SneT_@Sc(QER|LMncfGMmy7wtKW41W%R(fHcl!=0GRIu%MRKN*O4Vt z(8>+P<>U?$TL?fG&t(o{ZLKQns&7*~sc)^2`}IKcS3ED%P@NeQ0Vtz5tz0hQ>7$2m zs?TJbV(cr6P+-5G>OHT%4kAvk`xY-A z0nment1DXY?9!D0Ou=y6vGj55hJ^s)j!nh^w?+wn>3t3X^R!fe>d0oSM7moOS)qJwBBcWUoFLSO;N3s1N)-~5%I(gBFPnyunV%(hZMbq@go2qC)DZ`r^3 eTW$dUD}X;*y9<=YouqL90000Y>^(V}IuA-hB*I?i+K8MA9=%+4%s&QsIOnW=ey@5gga4gIqefC5ke z3P1rU00p1`6o3Ly0FD917RK3aG(o&NAFn z$%I&M#SipM_l|Ff`1P2(B{wn!KyU<>0fM1XYS)5nB^=fvYJ+}yjQ$cpXGa?);+s_O z@d*gPZ~*bGS8HJijy4dVfnFlEpUgO#gOUKlp&oW}mZqthd9l9F-O+XSS#JfTwYJea zzX$jXxT%3@1rW^dtrO2OxNHZi0wu4~{0~+6b*8ca0|Oyy^fcuG(xUumiIreYR0d#n zt!WB?tPvPhz_qgzFZd4oA$y|`e0z0`Mh3g+g}2e@nz8|8`6Y~11&XZ*i}nSY`8CEC zmm`)CrU1xTPCaBCKrInclS%@hbg)`+#?oq^88-_XiVeviw5EHa z|8qcX$g~1hzQ)ueL*u%X3vgCA2C&li;VKMnH~X>xusLC{AX)Ze5UbX>0zh!=3s5$7 zN)m*qhZ#Zawx(xHLd`RLeS)ORy=z>4X%!4TL1_UjeVU1 zn%}DjcPm=}g_g{SlH=*({8Wdk_+exvC%vvHKqaLB{vF^0jB){1vRt1?00000NkvXX Hu0mjf@}&)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png new file mode 100644 index 0000000000000000000000000000000000000000..897e09bd7e5aeb8a2e32cfaf0ac1a6a53a916a1e GIT binary patch literal 616 zcmV-u0+;=XP)b}`=qP2m&(UpISZdyQ{3f7iNVpAK zm6RTd471?H+Ow-ZfZ#A?;_%#~=?c4lX` zbAD&$oHM8KpCth#fCP{L5hx0hKy@O>RYx<6XiC`}>I`H(- ztU>Q<`6|-yvjJ+so`zoYwVr2yN#%k;#_1Ra>LJH(&WuOUNc|%K(pc<=*~yunlgML& zBja=oU@Gt!c|3om3CH4l z2gtj6VUru)*AJjo>U@mSkG!{QW;$la|diK%Y?HENsd6->-c@#2zsk>qm}SY*)jw$o#$ynm~oh2=oEJ3;`k&XG#1 zU1Y=>PcLPE%V*IzeNRSHD>YY00bs3tqwz~6ZUV(`UE@b!iH^pKiEa|-ohzdNVE-ds zDotC|TifWA2}hM{5SoGIMDDH59~=>?dy8r+H07*qoM6N<$ Ef0@?kEP)5H@yXJ!15Co4U*7!)p&j6+^u%k&c^-qo>II|?U^gA_r#GTD3Jcjq72vM3`h&3xll}3l+y+^V`oAQjvmcLs_1XRKJ z>Q;tQ!@U}vg#ZYl;9PIN*USK-r$uW`dNfT)g#Zf#ppMzD^FH-^s0A^M{Kyx8@LE-~ z_rYt_icq~;p|cBkb}v6i_}N=4%zMNd|qn6WVqe3tasjcP8X7FNl z08zafo^|zf0U$&!MWGdPF_|Ky03+A?GP1{Zz5!IDs$od24UFS_o~NO{+t3Z~h+ORi zb>uSWU=B>4%?&Uqc!t}rIjDtl$!$aRCY(ic4v`^mXB ofN^6s1=auhS8M*AOeAIlK=n!07*qoM6N<$f_VGv7ytkO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png new file mode 100644 index 0000000000000000000000000000000000000000..79c5e850d7a9155d22a48ee57f6eb54184b0e244 GIT binary patch literal 785 zcmV+s1Md8ZP)iUq~iFX+{i z2hW~8c@a-~uowRWK|OmFB4={6K(i(~E=Xt66gPzT01J2*4u1{OF zY=Od)aawpXA0UsmD?l`9Q1)q>=MaIQQ)uj`MaI=jw6FAu7RbB(bqEd&hH0x%rHw|7 zy&^raT>L^LERy8@V>*JwiQu$(h#z0q`iCm4^=Mz#k4XOiO<##gz#axr#oig8Tj z!DcibFwjJ$v$Ow<=>-Bxl@!McHcDsl1C=t`HNTR;NT&C z{;g5x5uSi|>;!dpv!7CIs{$+l5#spQIV9cKjcZfZ_Q+8?M_Puea#mRz0KAYeh`j)D z2P&-tl2BLvBb8L&q$Nu_n4G`UoKKUQv{7qA{$>)wL1HDv+Y=6&FJ;WZ%4R zyGM8sO6>IaGrMKGSqFgh0uu30F}Uvbt($74P-uY1X7fAUz5hVv2AY#>+c-avsKr*I zO0XRPBt+-a3eDcT!{Uqc8NvyC^-P%!VKZ5hNRA*|7?soa=l39x(GSSsX_* zgkei>U#mIH%dzYU;PJypYCd{A#=?#IS4y0Us&IHUPXKxIBkye7IA*P`tO?N|iyPx- z$*=kPBm)Q_rZ3O%J(6%PlioW32{DjKtBPVB3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png new file mode 100644 index 0000000000000000000000000000000000000000..c5126efbf880b3a93571f19e5021937d6d4ed1a4 GIT binary patch literal 501 zcmVf(ceAr$XXuX=00KY& z2mk>f00e*l5CHx^K)ka4<&q$K7&NQ_ki0e9CMQiiI0!9(NFGP?#P$Fe=u0dBDv;%GP6<$cs|q~b4~p(} zZN~JmPpw?P&Zkm;O=Nv1l#}7PPIbHhAkpjd@W*)Bm{)+RV<;b0!03*u zF#yb9ZgUJptQEld$!TMCYrD9T=v1}_V|UkA=C@*Kp_7mgO#rlWEC5Of2-^m$ r6I-hXAg+vM!uHhxX8}x;+QfbXK&rF;SL*T800000NkvXXu0mjfu9DUI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png new file mode 100644 index 0000000000000000000000000000000000000000..52b69f7db4d038b15ae599acfb1062772eec3bda GIT binary patch literal 542 zcmV+(0^$9MP)rzgOjUEMM2L}?BL+Js0E>v0|osC+UFo8oR{}5xf31oKuIotp7)nGNyz~H zu`GZEumBdo0$2bGU;!+^{|6{dOn;>b(7kWui~$h5Fj%Hk>UnSwN&peOR2-(%Vj%bo zWDp!4AMYJyzY-vI>O)>#U4TqdFL`;o0Qqu>K07LIJ;6&Q_6%?nvl0t{40sQ2ssPoo znpp-OTaDoKio>|GwMpB%d;L-f-;mrVkHG>8zWP8X`YR3_%jMNgljdiq$W$x<(%1E0 zS%bQJ8wnsF<2+aZOvDvBI6l)ZA=Kj*pafW&sZiA!rTvq0N~4X{W%An3IPF){BTsr91{( z_A3Bk5D_T+ts~<%p&ShLB-zOX0D)ef+CSQ(+A;-*yN2>r1&r#dY6HLw<|fxr%rycy zJv_=yE-VI5a;!|wfJ#wg&~|ruq5mp|Mk)?vp&o#;j|D&q0bzQ;lFUtX1|TktQNs2m g0cQbpgPP3!2F}&vANsUzRsaA107*qoM6N<$g0K5P)BE4g27ZT#)60-Z52dA|AQWS z=|9ku6!GHGi->sgKk(F^yot0Z)HD=DdT>2hO-Tt$XoG1{sTYa)PJQEayPJKpiHfja z*lgy_n|Yu2<_Byq{bMBn2|xmn03-kjKmzdp0ptr)O~0*Cud27VRyy*>064Id&QdDl zDBDieBer?93em-}rY(pF0Kv_`W^fkzAymU@fk+`D0XVos@Z;r>LPP>^=KhR>Y*7DT zMng!{79eQD`5_<^gsT7$5>%lp$1toK5?KShe^UzWlkOD}fb;7}LC6lr4A1$?V`4bT zGKeaGz>@5`T7j_O#b*nlzWECi8bn=8odRGt^Q7*(qI#>chKPMIMhYQX0!;k)!9%)x z{}J80bBkWSTBXI}it0lf_QJ%tvY|bDdrm<}?t@4Ge{g{+M+_q!xhD1f(BrNLvtH=7wKsBNRR6)?+(65~M?KCPDz_;H(;$1Q)< z>g09J8%RXssL&9>hrkqBVqT#lBXFN!C^2w(AT3jyItxY%<6>lZ*8A zHp<$+YXDf=shMeg*4qgi(7#_g27oxLcG;oyHrZPNL;e9k#8+_~Nyh&KiaSLTzt@2@00000 LNkvXXu0mjfydh5d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png new file mode 100644 index 0000000000000000000000000000000000000000..d80d352f7d156dda7b8fe6ce717e50814c77a74d GIT binary patch literal 707 zcmV;!0zCbRP)5dfwga9Ex2oM5<03pEr14xg*soHIoazVAl&0Nck0dQa=o}@^^P_~0Y zk=Rx&<%tGItA0U500^!J)`PP!4xt)G4MYmz3BbW6f*)^(6v7jLGq-2#WP>`R2@67^ zh5$|n&JF?TAY282ke~`pxrT1lkjOW{&u=-`G3i+m0T}033PN_cX88JtN5ycGZ4gxe zfhE~BwE}Lzvr7xEzUgNf3q(Ck*9E|7=0(jPS=Fktx`=%+M+za@0xbM#W|lrof267R z6SVeagO;=FY7BkY$1`KfhW^{hcM3xC9(V%SgLBKl00X^zK4L+kN?eV=0Izyl>7eqD zzW;BxYzS_b9+-t{EG*8`P}>PbIy-1?GXMaD$z8wlR|0ciw>#M|-%G9l$etG%NJZ%N zSpEL5tmh~mk6rOEmG&nIgC_O!4RBKu z17u!|h_(TKO$U(fzh7TZfa8-x)dsm<`usouMt7q25=bD;N0H5q$M p<@QIkvs>{Ga9a{T#X%&Qe+Ej7J$RF!3s(RD002ovPDHLkV1mQMFV_G7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/meta.json b/Resources/Textures/Structures/Decoration/world.rsi/meta.json new file mode 100644 index 00000000000..1920ab8b628 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/world.rsi/meta.json @@ -0,0 +1,249 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/ffcecc82f28c796f8eff92ac46ff0f5e0d9b1ab6/mojave/icons/structure/miscellaneous.dmi", + "size": { + "x": 32, + "y": 48 + }, + "states": [ + { + "name": "mailbox_old" + }, + { + "name": "mailbox_old-open" + }, + { + "name": "mailbox" + }, + { + "name": "mailbox-open" + }, + { + "name": "barrels1" + }, + { + "name": "barrels2" + }, + { + "name": "barrels3" + }, + { + "name": "barrels4" + }, + { + "name": "barrels5" + }, + { + "name": "barrels6" + }, + { + "name": "payphone", + "directions": 4 + }, + { + "name": "payphone_alt", + "directions": 4 + }, + { + "name": "trashbin" + }, + { + "name": "trashbin-1" + }, + { + "name": "trashbin-2" + }, + { + "name": "trashbin-3" + }, + { + "name": "phone_black" + }, + { + "name": "phone_red" + }, + { + "name": "pot_1" + }, + { + "name": "pot_2" + }, + { + "name": "pot_3" + }, + { + "name": "pot_4" + }, + { + "name": "concrete_barrier", + "directions": 4 + }, + { + "name": "concrete_barrier_1", + "directions": 4 + }, + { + "name": "concrete_barrier_2", + "directions": 4 + }, + { + "name": "concrete_barrier_3", + "directions": 4 + }, + { + "name": "concrete_barrier_4", + "directions": 4 + }, + { + "name": "concrete_barrier_5", + "directions": 4 + }, + { + "name": "concrete_barrier_alt", + "directions": 4 + }, + { + "name": "concrete_barrier_alt_2", + "directions": 4 + }, + { + "name": "skeleton" + }, + { + "name": "shower", + "directions": 4 + }, + { + "name": "toilet", + "directions": 4 + }, + { + "name": "sink", + "directions": 4 + }, + { + "name": "scattered_papers", + "directions": 8 + }, + { + "name": "papers_1", + "directions": 4 + }, + { + "name": "papers_2", + "directions": 4 + }, + { + "name": "papers_3", + "directions": 4 + }, + { + "name": "woodscrap", + "directions": 8 + }, + { + "name": "brickrubble", + "directions": 8 + }, + { + "name": "cardboard", + "directions": 8 + }, + { + "name": "pallet", + "directions": 4 + }, + { + "name": "pallet_stack", + "directions": 4 + }, + { + "name": "brickpile" + }, + { + "name": "bookstack_1" + }, + { + "name": "bookstack_2" + }, + { + "name": "bookstack_3" + }, + { + "name": "bookpile_1" + }, + { + "name": "bookpile_2" + }, + { + "name": "bookpile_3" + }, + { + "name": "bookpile_4" + }, + { + "name": "bookpile_5" + }, + { + "name": "bookpile_6" + }, + { + "name": "foodstuff_1" + }, + { + "name": "foodstuff_2" + }, + { + "name": "foodstuff_3" + }, + { + "name": "foodstuff_4" + }, + { + "name": "foodstuff_5" + }, + { + "name": "foodstuff_6" + }, + { + "name": "trashbags_1" + }, + { + "name": "trashbags_2" + }, + { + "name": "trashbags_3" + }, + { + "name": "trashbags_4" + }, + { + "name": "trashbags_5" + }, + { + "name": "trashbags_6" + }, + { + "name": "glass_1" + }, + { + "name": "glass_2" + }, + { + "name": "glass_3" + }, + { + "name": "glass_4" + }, + { + "name": "glass_5" + }, + { + "name": "glass_6" + }, + { + "name": "mine_sign" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png b/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..e67ecc5e3704a532c9db6851b61427d7c890c146 GIT binary patch literal 667 zcmV;M0%ZM(P)Mp>I8wY#1~%6~wi%`@eJJopck zcp$YNHsufSfaTQ#iu?mgC;$Z@1<>9WFgiRHss3^79ZpWq97O}Ty1s!9Pm8H9E9onU z>F-bo{jV6Pt*J4{ZuU0j{P6bm$L4drjYhV);uSsVx+zvHCot9J0~tMEKl8TQTWuZm zB-Wfiys!+J0FrbDE_U!`K=0@2Zy&`6AYle* zrT8m0L9n!Z(m_fE0gx?1(g5U8w)ofvD5Odb@C_6Q78h^?Pfq{<002ovPDHLkV1mO& BA5H)O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ef027d27401b5700df592aaf3306920fc9b002 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(S ziJmTwAr*7p&b0Lxbrflf7v^?O{L#f46|j)Av(?_=|3>?UHV;onMovd=XT^|ky^RJX z75zrDZ{EFmck|}W9-sF4J05ydV^{p_jgbwzr4U1r3d0i*h7%JRCMYv1xHCEQu{6kV zGN4EVbN=}9@9W=d&(hvLJU?5y;?%J#TQ})14?jQaZSJ3b`FlIn_U_r6JvDdD{(`NR zzw08U_lq%Fzt)eQ{B=t2%IwtI$y-{Nh*`M!Nhg2cc;ctgzMQK z{BZuN+o9KvUp(m=X3ZZv@ws1<wd0Ls%y4=Zu*;P4J*^@vVLDMi@P%CVz{utrUHpC@jI4qezn>CSTHI5%ZrC|ZWX?e zwr)RZnZRQic;O6Va(QjWoGUL%Y=>!#+CZp0_OdeO|Vob6&+*Z-MtL^aMdfK%c#d#_$}aJcVDZ(xdL N@O1TaS?83{1ON*rMXLY+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..73d59a10f32501afa34ee45de51f1c43919ee966 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A)7 zeV#6kAr*7p&f1@M#X;bhdJvaO<0OGVmaYz_35xFm$83^&KR-Wx-&f0zcRA*X11SQ88vv@8rHHHe>O5+v15L4P}Pg zXG@toHI%2%UwwXeb@fs9zm=6ce@dSA?Q6WQn;V<7(N}x>ECv%v9=p1V8xm{$%{&aO z`O4mf*z2#W3r)WGzGl<3ZF(DHO8k5qo__l7w)09-@yofwE7z}&c)81S?QsR)Ddka0 z+(j8H=V`g-OkZ^B#x_fHmK{Gn$$tBuf8B;5c&p0F5}78|&3$}j*MIyh+<2?P(YfJx zznqE9g4gSwt0~zw9P_x_e%+ufXi`bp*&(k}y6^eFBnu`zM({Og=GF%>2}(jUFd^UOZv65h(YvbN-y|oMgEr;-6D<*><7VAL17K=h*+c zeonqRc%zglV}{cX?@vFnt@(Z*nYYLC{-ONTAEIANBK6JJvTS_&e)=}nRRdGt(Wcl@^ z;(blm^`_LB2>X0peAe=-jPhx>T0RAjuOVwQcdt6?#Xo_2W8ckZs?!WN%Ncy}d0+DH zzyD#+;~_Vmi7&VL&-ttP>gwsoUvE72B*iwt=T@I?ZcT3c?XtT?`>!Snw|?Vn~@QY&}jtl~??D~)a| zKgS!*X3r>{^y|6mALUaMBI4?c78RdaD72ukIBAl(q1iuw0Yr{qILFC&z*3RHLY;*H hBfAhUxkLPc{=LtfGX=Q*ZvbX*22WQ%mvv4FO#mfJ+{gd` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png b/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f250f41ecbabb407b20e87ebab85c8753a08383b GIT binary patch literal 1425 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone.png new file mode 100644 index 0000000000000000000000000000000000000000..928291b65efd16e82440a7becad6c0c5a9ff0b0b GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(C zPEQxdkcv5PXM6Ya1d1I0-?Tv8%FtG&?d1!JS$s-~rgFk!VrpTBoRSV-3*YcbbWN^` zn2t`0ijLc!DpjQu70Z|O3i|kS&UBlx#cKQOknruV-tD>?YWrl~{iI#*7Qedld;fcD zOYZ~=B?caMmWGEN3FfQ4hu2@B^|Da^UL1|_FW&>ynep@!(VHE zcYm0_NcX@!+14zp&0Nx-Dn;MDk8eHf@HPA9vAxG9+X_B<^OO5(c=@`@hrYl2AKaN4 zJTWJm(_w1-e%19n)8^m%{HR>kmRIXSoO_3g>kX?p>z}o;T`}f--(I!kYaZMAxcwJ4 z$wx8dRi>3)3u|3)zen2rL8yZ8t;8wc;Q-xuVLGzA3cx1$1Zd9(OtP`+n{<*tS*O(a0q^x8k$hn>+hlx9%l~tAp~L-L zJ?CW0bg7)r#S&Yp8p3}bysB06^;oQo%*~aD#M}bDbqcVbHnQjQk9^>xZ-sEj}I){a+9;Nxa_axx$7_J+A0jPXQF>|$j^-%4SV|glaEGy zVUhY@JoUv(#}=`KXuIx*&d2xOoNpDmF(M>WMsgg zsvUAqYOnBGeQ#TiL+HHehg2djC^}eg&=%K!c;lpSo=>f4fcK)!%1gfVdVh&l)Zw;b zk$C;K+LW_y{+{6e!*ySpSS6YM9qy2y#W0ieb^hVC_bwmYzxfPb%l$tW>Ke<}&E>et z{6j2ldoj}!=LuggPq*7~r&m7I{c#D~M!}~!2j90y^5wEBu+HD7QTZ@lzTW!o{snvv zXFt5!@a440BbCm(^X1=KHt;(*e)L>mz54Z~FovkGA1$uoK9LK&K0Y?qp??gLINOONudf19}9|EEXGhU%tiOdm{(wUs$IYt>KL z`@OLJ|3`SL-?yjn$!~>r@4ffxTW!?u-80<}y^)RLa=6>i=ioAhm-qe^x3|Yif0tZd zU4Hn;Wb>&DC;y$swBvD1wp;3--|Z_VFTTI;ov8H9@YxFK*>_IX-B!Gi`f&F$@o%X@ zEx7V1Cy4l v0XUKISN5a$k9NWO#xTxD`UxHT56DkY@i<;5T|E(4QZabC`njxgN@xNAABR2| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..aa05c3fd31d0d02ebb9701d6f296f456edb0d1e4 GIT binary patch literal 1327 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(C zhn_BuAr*7pM*HUryNmo^$PyT%>ifu{ReMcTOVFKwz|LR|m!}uJdMyeXn1$H={<8fQ z_{%oOLgDKLxhjX1SLA{ij|Qn;Su|zI?K9tBY5X~DkvYe4MV14F9E=4rP7E^b0u1QfjZZmd*i`Ow+~0afPvl-5_tf3> zi#PoVn0_{X-;T4}?6a9Bg&hd{*17WVk6)LjYlU8^RN1{P;@HdL^w3u|hr`&lnJxt! z2s0C$cQ^csQFeEo;0E5EM364uu5C(uba?^hrf@yt^LQOT>rO4y4%_6{fUj42Yv^?XZ~=lv$SJ)p*Wvp9+Vq1SW&TVV z9}eFP{QC6e7xsLAf#HbKUWU%h8PV0L9W>l4kmRb|SiD}A@Vdo%enG^b49W0A6{ z5B~S7Ol{Lze@3B@o!h%Q%ljVnE>sM0`@Z;7u_UVs|Gb8%+N;xJKbvf{yBOy#S8wd2 zzCfMP?(@8VOCwbozt|QOc%8R%lyBAg+kH#?#GmWiy_r<1_wvoHTGuq4dJziW`z4_kjnI#?y7Zf(nTzKSH zcd2-Skk#dv$}4SEJ0e&v?2Nzhk>_fb=+BzC%8Y&T6Vwh}ueHe0F%V-+`J}DA{XwPN zv}w~mB9*=2c9(AsM*J@**@RNF7C<@)fLW9nw}8Ej^yoCZHwUu6EwvgSX&QSinTRe?P{ERNC&$?HDV zAG~|(roxNJXUEUZmH#Auqqw(eBCE)^zSsAaU$LE-zTlL7Xa8i@n#!G1GCZ;~ zx1^SzVmZ(hJelIt52(M|KQYqd2{i;#jl*A3 z+xPeKDwn2}{uib;_}g3EdhzVyO`d7Letv6zeeFrW?g#&b#RETWzcc^XBsYJiU$ysM zZMU8K_wO5JwSCUvOeg-lU~=hreBpz4Zj5o>>E+Yoc8jas+vC};@iUe)V_orT*{OnG z(W?^Y@Q4+eSnyT%Ba@ImPz{v0uvflQyrNa{Bhy_jmAC^FD;lS_r~PqVJn_?F QUFVdQ&MBb@0NL1YNB{r; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png new file mode 100644 index 0000000000000000000000000000000000000000..87403a190f202eabbafda4133c2ecfd649c09453 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_3l z)zif>q+-t7%NN-X1&FYHFc!M$>{>Nb<&tw%zsTR0fl7N_Cd(3R z%M~_C%de{C?_Yc}<v;A#^QvX+8iMxxw`V-D;X~c$a7RsT!v~igy^DVYF>lg?IJ=15 Yh9N~bUSs*&Y88-(r>mdKI;Vst00DM~Q~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png new file mode 100644 index 0000000000000000000000000000000000000000..e925a7f1f4c6df108bdf1430b771c4603ee057c9 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_2) z(bL5-q+-t7%Z}bmjw0+I)UTX$>ruhNqx1G{C*pL5=qpR6H#Ij z;dsIcJ z`B8E4GS&NLYZyM}IDR}|S8?y!*<+knt)`dU%DQ|z$?xn<;gzMa#wx#_w(ViOGxyC> zZ#})&?TjLyy;z?#?|%OL!MUewo1Pm!|KfD+Aoh<|&3u2(o;!1hMUWd6g?Y*S<*UXYRbz{?nt@=WKXhbu_L)78&qol`;+020oV AlmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ae782f094f4bf8987d87a47419d157c2fe099b GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZ8YuYL z)5S5QV$Rzu)?9}i1lS%3+B7i6FA?FE7G%j5WXXT{a8Ij3$5sUvU7aIAi#U%+AL&U^ zouqKHy`{DO)J@gTZ_nht3MmAdg8~xN6YO3b&pUqdY5w;Pv*+G#*Ec*Z5!!x>ukyI| z&xfBUzc-UMk@}|5cy#sMeI`y^2h^WGdi_>$`!Naollp0ozwg^Lcf)7C51QS(4pjEN z$>?GFarm9`FRf|43XzYyHH1$oa|CtdIOZ~li}(j@-(m7Vq^)K%_kTvE3ZIvDpBV&i z>b+>IJs;4sFvEA-U$2IEj+>88Fz@WvxhapuhrnKbI@e3d~d%F6$taD0e F0stP%eLDaE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e594848a8f25fb48bfa8ddcdd88d2134c9a43a GIT binary patch literal 494 zcmV|&wV8oID5m z0|*fm3gBmtHx}oKnoqlHx@kc{&B5;43NfFWaC%>5szm4(P;)fO=F)I-UUB0y>V!L1 zZfmf)z6@P3a&U1K8X^<`EjeaR%~Sa#bUr`e_055T4}x)o!27~hg6l0%QeN8=i6pez z4(K)GTbyYx9)OajLHXehlyNV~R=d-Sqb&O+9st}}tvB6yabd{|&h^(D-8DRjEaLtU zHGB|O!^i+=NMFII=F9*$wvA2ieFFvw+vMLT9)K!Xg{b;}e?+tmgVtEf&jm0Hg4LWG kfY(eYfG9}-2{3YiFOQq3v$gL^#{d8T07*qoM6N<$g3k)nZ~y=R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f665ca9125edfdbe0bd660bd1f43dd6a32d791b9 GIT binary patch literal 449 zcmV;y0Y3hTP)_~_<99LcCPXN1>m8fVe(Ae=?kk@8mrfF4B0QhE#Y-Gt#^=9RQ1C(Pq=5`|xc5&#xh@mY3Jo$jp=rkTcM*P2j!SFLkXn!Wa rC}PZfs>u8avJ{gFkQEGIz{COXrY?}O03*Kk00000NkvXXu0mjf;(NW# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae15c9ee503d77163a5c31b47870ded014a186a GIT binary patch literal 475 zcmV<10VMv3P)EU=YL~tEr=iRM6eQ&E3Dq z-Oa&WK@f3NJ6UQ)&`H#stxKex&b+g)RVmWDCKTm;A>{Hd-1qa|yCbn+#9{yjU;qYS z00v+H24DaN_#XhPfsM1Aq&=FHJQr%`biiXL|ENH23)2)LGK}TM%?WbPb0FK*MOK$6~Gxa4iHj zT@pY)VVgSd#ScLGT7_Zt_kKvI4gKbH%Wnkm8-%X8F@ULAtN?L|0T^K903RP?t{Io} RGZX*-002ovPDHLkV1ims%WD7t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png b/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png new file mode 100644 index 0000000000000000000000000000000000000000..59447400c372e0475e72fdef8b061f854bf56406 GIT binary patch literal 2280 zcmbtW`8U*y8~)5BfS$IMC&tjJ2fbqju@CIzbi<3jWgP0S(G{&-$@#N1G5c7~Yv-n&bqBb_EjA|&XqFD*UcobQ zbDP85=$XXD-EVZy66%3w1+&{=rtET9zLfBF=nk9B?cKpO`gV$eyZgDi{t&-0sq%V2 zYWI0`(sO0VQ7kNQ#Z@jvM)og;zFprDjteQf|oY$GUaBOPh zPSB;u<3tWG;yQm?Oz)0}-0OCqVbQNVm(pUsKE;^3s=TZQ46qAOu~~*YQEpL^xMr5P zJJPGSc~d1_Jj$`Bh5~=DNtAf3bl>=j5L>c~3CV;^isap$xxU5e=JoTGi6b=~CDKz| zn6@`TINVOsE7R_Qfjz&s@Nnu2o3wnrW7>cO9%mMjoU})a9)2&W!>()WY!K(e4C&9r zB&?+P(m1PgQK*r{QyRZ6+oio_e>y~TuUNtGeyLG*%`Je=XUHaX2wSF-1uah=1ZRkY zW$??|?9YF;gzvfJ0GHwk3%N&Z6FawX;hkjr3@D=BonXn!EQBh9GkMQ1AQ>G^2^H?&{ zjV#JxkmYc9zp_nk_n#zdQu&S5p0o1j!=M+~B8WVrB$Z4)8;hlWJxKY&_Cq&-<~CI( z#b0noKHC)rK*#S%C*Yr_T>?Ghowv}sdw>=B9^&?i;y7Y95u*0vVl5_prk!_Jy`Bi9`iTV%CoAeY#hwN|06Li9w7GM*^Qh+?Vw_h&(k}UbTqx{f-2B8($y}QJY*iP zma`~8TefJBtP>+jJnZZ~!C9igW*JN`FLhLTm51g9C87^eV@U~Pbq6XN6eDyc%vyf3 z%uwVpRMN?_xsS9ltwDTb7$v5b74`lxpXRA+ut4vL@wE)OR=rq(Cs~21up&L4XXjO^ z@9M?nTnn0A?$SU4tmg2i0fg1p9~>mFlOb*|JdIJx;$22p!qQDlr`CJWI2AR;7%EaA z;(blON8CN7%@BCGs>mxIOoX+yL2JLf0iUC}B+!@> zS}wB)TXWVlp;%R4N{HJj=pmhv&C^tULn8laD2Ns(H8Ac>c=t%p@@(0=;SRh^M$5M; z@kPnI&(DNxy};1hsV5<)TT!?x!bknl?q3YN?tn0)+;I2uK_FMJ`k1Ub`PH}|Am$J| zmuKBpPvOd#W&aGsXxz4w&QPcO0YAgt%_B>K0rWD+xu5Q&U||<_wP53Kf{J0(Enmm% zFY3B0jQVDKj7~{(K}UV=<(q_Jzn`x8L4UnoVvRSuc`9`2rF0gKCmi2okT$;bp(ystEN8syk$l}r$uUR8u1~%4^B>kW z3I?i^2Y3=gsFehz)^{3xWS}X$$QY}UH{o$w!v3sG5ZZT0r2xq_t*X_qG*ksHNmxye zlMH_ieVeZH!gJzJj}rK?4nv5zv9}$A{`@7Hfq?R}4zjAsX^-s+bP1eq!E zJ`e9nO_ixw|5jUI_=q>K;aE-)^}AcNjV?jzqJ7?)aH*=b9y8;|Q@597AhOjtRl!1D zr}~OW6{2GO2~`*QfT%b$I`klI!1!WGN3npM{+2nk7_?C6@9oTX>rSYmso9|t4$xUVb@a|?)!<)v;KSRbtmHClt!e)s8LO@ zD_1u_3o;pa_+`ZJ38|hX*5PQhll&y4mD0bx2t7f1A=HErS+80+STxV!w2PX*F$%B( ba9jvuv~oiMg3a20T>#Xnb2d+`uqpol9j@-O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/shower.png b/Resources/Textures/Structures/Decoration/world.rsi/shower.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3f561f9d27ad370cf52e05328c50e9de44eb08 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(S zGoCJvAr*7p&OYxQ5-4(ff8&3L7Zz6*E%lPxHhBSurW8 z=-92Ker0KQlFU;3hhO(iFW0;7p7{RU(T8U&t6kQ{BJyx3*%1SHjHi zuf-U0Q?@olf3B6OvE^A`KbP0}XU-RCsh2tp&9c9L@15Ez@TKN`TE;)A-}Wc77s&7Xjtx|A*zj{X)1`M8L`#`0p6;vry>OD_ zj1Aw4mnW4nc?jo3^z`oL3)F0wGOO(>mqsghLtzX9QsAgZGt@WwX8CVWiDddw(Gy-N zcHq;_rMZRwn3B(Wzs;`Ia@oYPr96Hsn}3Z!OW_qR4O8xwq7Gg*6T@^D9FcNa+Yt1c zZ!446L(I@N=mXj15EW7XXThV5#*M%KMonJGBDc=3ysu(Q-uKUSJ(^qzAAFi0&YyFr z=GPz9Er%b(@2wDvQ&;!Wo+!ZL@gdj5{-fX};iXQ(*%Jg7w7nLO}j5P-oWuW=6Ybj$MOc=0$ZZ2Ab_P#ZKbLh*2~7Y+ CIboUr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/sink.png b/Resources/Textures/Structures/Decoration/world.rsi/sink.png new file mode 100644 index 0000000000000000000000000000000000000000..ab89eea0ad0efbe3cf8a2652118f7bc31b5c7042 GIT binary patch literal 1241 zcmV;~1Sb25P)ez zFJHgQ&)+k$dDD6sSl!=Tx28`a4TzDYfq z=i33{-@ez~V=Kv!R|HT@OPn(TgI*e5@!2_B>w-elAjB~x)`K1A{3^xsbA2ds9)%Y} zxcVIN37@wZ7|Lz7g3~1T1ECAb}GNkidxsNZ>>RBygeu5;)NS37lwv1Wq(S0w)?Ef#VE7X}jKOq0GG- zvUEBF@I#|6g{@CbHLu^gyQEBDqZdKLSIYpY!4-%{wH0e^P==DO%d=JhnLdA3lxdCQ z6O+wk48RMh#e4m3%r!-^E{|AhgJFx0hK*j-NSpzzw!-i1sKNlcHvqSYl{OgN;={TD z{E9?f+(*sM091l!{qD{l0c&kA=@uXTQ#v)W`aO3V#2fRf!+V)5@mV+na8KO0ddY=_ zETTC#^~AaR#8Y6rqt04~?Zps3Ll52nS3FotmPo zG(zDVeVe>+tc!rW>CRds6wZ+qrFl(W93N`>4SEpNS9{jjIv`zI3$nD~xEddD@t_9` z95`$Ee}|who#iqopsr*VNTK@^5Z@B!kbun~i3V-*F_!YZVZv8Aiu(D7DwX#tpVq+06Z!pd`<|N~i#95Q92y-B8b~fz)?SC$l9aMiD z0U!VbfB+Bx0zd!=00H2C0TkAAIx|1tIKRERQpKanKq3Glj%a#vT%|_F6z2t{bT<&* z0Eq4%9IMgcA$y)N03WX}cDtpOXQ=dK*TNr>>mcsM_1RTAZ6s z27o+M2V(ik>avA;sMeAJa3T1fR;ro*^Mn8df@6Luqe%g=x4ogO_0$lg=k)y6t21KH z0gl*C3J8i3K?$zqva@O`J?hn-u>k0M1Z5r|W`wL@s@|4$QO(+6aZ7I$b~{3N17Pz> zscgkKV!zv#vPNp^_G{pP;99$s#F_&LV0ZMX$-jGU#J&VgaptQv3(~GoW2NBo?#Xn) zw8nbLH9%4it=dvR+J!fOOg_2k!pwx0DJU)olnI*#?B_)4K=u>2F1!H{kai<*!|V&T z6SO5rMq0?&LAQom+V>$x5xpUatK_van6Pk~X3h-ZnYd*ri z0&pQ{J-3+LXys7P00e?rkIfXOY(BD%3k;*a0T42bqEE^iV7@N=8i1RVg1q`JBrcF5 zpB=HQ_kwmeXPrI3j_9LG$9wec#RMnll%Iar*Ege{&w+l#p96dXJfVk0E$Zy000000 LNkvXXu0mjfnJg;; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/toilet.png b/Resources/Textures/Structures/Decoration/world.rsi/toilet.png new file mode 100644 index 0000000000000000000000000000000000000000..912bd547b0ac817af8239bf657a5df0ba135f3ce GIT binary patch literal 1267 zcmVPx(tw}^dRCt{2oWF0|Mij@tG_-UnV9OLC1NLYMkpma-(7|yh(*RFc~rgh*2w$JX(MWlA;7;$*2s>V~^zVmn@n-`F#KZHt$Tm z_jLDuQ11*d48t%Cb6e5!OzPZe&x_u8@Nt;y-c?h}n$Wq^p6_?s*xAwn02h~T;@rrb zxe7*D%bL*8*Kv5z3SB!L46(DN2d~q?Ff@L6&_Y9BU#_Gjk!gS^^eLb8Ok7;LIO&<8 z>#C8t1sr#Vu{FhZb0fI++moMzpQEb-0LIo7jyqeDh~<*GM>p&BxncO9E-mY3!-&nZ z92)=v#ckWg#Pe>v56D~rfUmerX%QN4HVjyf4ckt3mN$vQK48_j^#;hb1)|V?7s=Wp zHhT@+xPPV6(RtT za|KL1Pur~5=VGe+{N<})oD4(bswfW>aDtQz06@2I!Z7sUMW1?fo(e1!1)@r-rnE@m zD6rdV0X;L6=op5M-Bt_dqtQ}@Bg!nt7Yc*N5064V;P~OuBDcv!+2wd41Dy0s9K&A) zfB*Fd{`vO}e!Tw!0N{Ky3M#{8LghF`8o)2dMWdheOzd~s!S9C$Em)3?L5}<9Hh^ur zFbo~~g%Y6Qq?8UFu~fKV_EV3q=8yGQBKreL1Xz0g6_aMdmAE06_i>;wtlq zg?zwu5^}nG=?`8k$HsqW=i=XGqLeeE=MrfYbBvxUBoRK^DoN%4Kr z6kIt20C6vWm1mI3Z2>^;3sxyPV;F{E7=~dOhG7_nVHk!f4Gl={!cyVPPae|rt3|u8 z2$c>#rIDrIT0>u#HW=+}>B<~@N+V0Z&^JTd&5ckq(yAfTZ;b{3;Mt4Uc>8_?@!Bdt zy1acq!m}5zL)StpprNl9ZZJ>@%dunII@BN`I|#8#$n;wSfN#EyI|(cKarFwsdJ8J+`L7*`e!fQkr<4*6o|~Zr{YyUw@IN?PF^ia@tAy zX+UxZW;A>N{~wMJ$E)~X0b=+T<%!BFjz^hzo)!~YyfGj@8WX*FRV`|=943mmm1VNV zoZ!Usw7mPd>i-h43|XaNkUF%J!bzEDgo;A40?Df&P1aNe(z>&6g7P9N$;vPc!!QiP dFbu;~%@?DUijL%QA5#DT002ovPDHLkV1n5hPI>?U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png new file mode 100644 index 0000000000000000000000000000000000000000..32c78882f4136f6e54a0490645b359b33ae033ad GIT binary patch literal 623 zcmV-#0+9WQP)~h)fH#3>x2E{*{ z1+V}XzyeqR3t#~(fCaDsT>&I!rrhDkF!}Xroz`6bexUCF5XQ>lu*vB-yKXlS+5mFY zk4}l!a400Ak&s}hiCENqc&Qjc7-ay$5XJLWtC47>TB9;xkMo8ZL1+UYy@-(aEip2H z;Av(fF2co*#i`&c`T<*p{7oMOLJv-ol)_(xf=2M+8Vv*$j)mX59RXmUHAj3@zuL|KLT3#zzIbDE%YA)nej|*G#kGXB0Azz`{<%Uv zM(=y|mHgeEZ8v*)>xpNM4#jo8{P*tx2%MfbMTR0HVrDeziOY8XTo`002ov JPDHLkV1mVx4we7_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ebeb9933b44c603e96c823565f6f811e4efc8b GIT binary patch literal 771 zcmV+e1N{7nP)RRM$`2yCv`BQ-h1DX~KPaXk4W*liO^t?HXiQw_YRq}b8E>95lbNX~${ZNxy*DrK z{O-LkZ<2lTmz4sf04YEUkOHItDL@L40we;+=f+&z2Q!1F-)gj^T-hA>BLFbZ9y@B< zyN#w0givuoVgZZ}54nsQLgZhX9f*UD;{nEjhztO8n0%<#j4?oP0f6Rg>ntrkeh~^2 z82}5@lp4x7=BmE0d1H8vF%7=;c{dOu5`bNI8n6vhWQCc)xGqmvS^5It!!V#3F5TAA z!;odLvlX;SLjhN~e?_sk13^##c0Cd|F`c0;O_ zb<>9VMB!Zf5*OuwImVwXKQhlpNA}Cs_IEiyH7#>j=H%-2o3VeEc>pkF3D`f7IpXzE zBHUNsypqY2r-W@lRLU!o%b%4b@&LMZ_BI?tnq+VYvKoQ8I@PoAKwb-}T%R z11JcicKTf!cgE{-ady`2M7knt8z0+y;G3D7^cV3j09tF6dUw&fH+H{Rlnc`{GMqgj zQ|;@)z2ctCLjn9`muau&u>lmsZ_~f|*X+Ln_yOsgt6-*@Rk#2E002ovPDHLkV1f&e BS_J?A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png new file mode 100644 index 0000000000000000000000000000000000000000..828a44184ee7c59002801ae28dce9bf76af460e9 GIT binary patch literal 685 zcmV;e0#f~nP)n^!#vq6MK) z(N-@CrdB*CO3kcJm~1!6###i)gOFsC?EK!Jec8p}kF5kK0ZM=ppaduZN`MmJ{{XaG z8xx$DtIP4&$!T|CE&vpxJ&nia*xlPP_k-)Z_`PobCKI9%fGtd0sZLYTf|0 z_w){4qv#06F#@ny6{au%Ct(^?oE~wU;_MB4t{|EQF91x04;fk&S0VM3qIO+qguDT0 znscu8tmR1{ybnO_9fbk-v7JLLO1(}q7HlDa;X{agO&B_QpCzu|+O7I~K7Rmyv|g`G z(n6^aGm@0GH*3pXT!ZM*zCE6~Y!yE80Q; z2m5Uk?$&C}-1qOpL>1ee4$pAbPUr&81%UA0cHLaRjNYf7voX0W&*NMGw8^hY>haj) z+lM(L*V^5(#IRJgWxMk41mNCoc>g-Jw6qnoyAeb~jkBgIP234!oBn(lcAS}_^WH-& zmey>tYzhGM5ap!&$n(`lM}pDnl-fW2>HxcLH5Y!;!J0Oo0*D^ay1 T%Ga%!00000NkvXXu0mjf*CH_w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png new file mode 100644 index 0000000000000000000000000000000000000000..368852fc2350a615d0eae4600483a11e5ea1432a GIT binary patch literal 617 zcmV-v0+#)WP)0)0+pDMN}&@& zOZx#rU&ss37bnD_P$BuGDvp!h{qFAB&SA1=ivSTI0z`la5CI}U1o(ddlk?LI*WR#~ z-{0O%5B>}Q!5LWRrcckEAzA}4bJ}LL*$G4|0A`M$4D71}uAv~`0?;u6YfuFl4g2|T zxmpKTqY(hk-q-8$o&XAiF@kqBF8~6M&(h*9%`=0&&KLQ0(02p!x&FUx6>2L0r_78Q zBQPq$s`x5Gt+cfY0LzY_b;Kar7Hc8Fy#R22JWicCRsvPALS(D74S46~dXf>QsT~f0 z_TKiD0X2w<5Bflh6!1$&Nv$SI0AFw}E&P0?<-E2;g-Sp`og9s_m$zjF!Ye{8t!7LJ zYJ?f97%5cDDPXa3Di98UDxYI2+$!B?d{37t0YCkw$zZl{+R^DawvZgNI+s@$wFv=6 z_lXLCDxFR>`=;P{4=aezs3DH$vqkBLnkWH4q{polojnUIgndtgY4&_h;W`x{gxzSg zr*I5`G9v|O+68^fx&lB5JGTXJz6I*aubJ6xTETSON`!<$-%t&H7uZU1GvX3{xPNqD zWI2Wb(26zeR6`*&IPZOD3g);U1TRC~NKg?5VwTW_1+!!I@uSajI3fhiw@I}=jJiT> zFPX2uu%@GXCjbJ0Yho+nJAif$5EAg$0YWVT>>c0(Y0IjK(}SIi00000NkvXXu0mjf Dx|;yk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png new file mode 100644 index 0000000000000000000000000000000000000000..b878b22d526995dae5a00bc3487e6e0ab319052e GIT binary patch literal 569 zcmV-90>=G`P)q$gGRCt{2m(5NBK@f!3#488~PbivrGEv|E4Lo_{YN9A74j??h zO0594DMdY9AUk1YdafDDiUGC&5%02v?yYz1(4b5-KA)9X~< zm-A&YdVW3m6#zINUJt7AY`!Q6La1FqS^-?1_e(|%L*yTeFNllbU=6qnL?Zy4pLM&% z`*>10R>SXv!Pryu_%vz+ss+G?8o4`H^Yn0ilPXC7b&e=~tZ8r{q)9-n?1TroJWvrqw#-t&I{ zaQi(oSQi~m3C!z3i;@AV3L5}$kSabpz^06h_qZa_9t@&U0e6f|Au-3ed?PK+ltuNE zJO#X&8!Ctzm4GTyA-XwWt5(dsGWVX>2w2yqU_yYm=?n!@GN&}}bUa$P)H&Aay>-q* z0ELL=upu4LAU#fjHYT0ZquUBVASzoeEVc4E*5gTMFz&`Q@r zOvxLWD%%0(qtAeD>YWx4T}Sa@zZ4s{j?C0#twsPys4H1*ibu0&shCwZXMN>^Jv! z_tTRf1AsV%b#D6bR0MGp03)ZZ7wdx|Is-6rh*CJp1g<%dP5^WaVHH)7(QwfG=8IJ} z8=U}_tJQ8y0ENLA;w4rDz=$W;bFGZvL#_V}^WwF~G}GoWSBan6ze(HT$2 z>;UckoVXuYnuQR+&-h#$xpRl`=iFB^1MXD!0ydhjqf96fgfUhC74<+u02S~fRwHsN zNk9E(0V3g4A4d?8aH@>iF5nB=+rH)ktTRqP&m#R41JG35g`@pIYdeOM0MBo8w8(}Z z8eCIdKufLr`?&w~p9W9}b>fa;nAb?TUwH3dN)^un_`}|MAD90{m%!cV^9U{Ya23(EtDd07*qoM6N<$f&`H4Qvd(} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab01db6716d21130924b25d138c830d0ebb85950 GIT binary patch literal 524 zcmV+n0`vWeP)5F%*VVaN$lyMMQACFfO`~K7!!F$50f+XA(it zx2RyT>du9hF1oOI$$*ri4lZ4dIhmdza}jf<2_oc&k~C+S|I5iqG862NrnpFTa_I;oEOUvmve|gTtDInwwDaS1`rUQ)y+cXB2-Pskv2dSeS)p*Ll!XY1u(G$j}JZb0IGosk&X)(h$W!< zs#Jt(p{aeUISC+odu5(Cl|nRI?M%ELtjM_a48V*5Ag^BkNw)Jd({=#*;Sjb}yt-EZ z^;vIrfw6FC7C=|H48h`DJc70Zu)n**j!sT9W7PDM0c2`fQU~w@2-tp|PB)2;zDwu`U5_uCEHlkbZp5H~^YmUNmKYd+$KDcp~CBMU|ES+q2`tLd-6Jm_3{UQPfSU z9S$d9T$Xa39Y6+9Rpr7uG>uU$sf|08mtc zxC_v@OlTZ(Zs(&ED_g9&1i?Zayniqz%qhl|08qDg_lc3_jb|Ldq`m?Eox^G5-Qj=$ O0000fM8g zgjEjWT~Ms#zuwbjg;p=tu_~lXT{scC#~W8t9T6B#m<4n zh55wfOW(a~SUG@NqY0ab&CLDT>dfEtKz+5IS$~(X27n9rY;LU6Q_yPNQ69}#IsoiN zBLd*+@}f@|`)I(@03ddDazxi_jV)UBEYNw|ur7f&K1u7r?si`eYpD)If<4>y(4o~* zI2S;X!2repzttG|^bGi}3>Oc8!=)+&od;<_J$~shQsRM>#&5<}CD13FdfYm3M_h!R m0CZg6+;)Y6w#XX;Z^9qQ?XMtv-ydZF0000PyJDb50q$YKTtz9S&aI8~cZnt_2a z)zif>q+-t7sT;kR9R=FHJ6zD4)73HIsz=b0%ZL1gJrC?@b(NAoY1l>TU*_`7pKm;I3?JI;8q06)6Y}q`EvyRjZf$7s~HtonpbEZ=w)wCw~~lTm}+l+pnQvB*>*GWU(@xK za+pH}-;3M`E%;hsFVsGD6{AeOUr)I1be|R6j-4zLTB4#$uLQ8_-+6D@5Pr&EEw#>N zq3O_ITWW|IsL)*#ri+lKbYS?UdpU$T>Ksw O3k;sFelF{r5}E)cq^l|b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6bfcbaf6b3b54c36988d90df3cf8e4b13bd5f0 GIT binary patch literal 465 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..72f5a15231cad854072150bedeab4bc982dc1b59 GIT binary patch literal 540 zcmV+%0^|LOP)b)RqX+lEU|djSkBD* zXhLjzp!f%PX%66ROx%+9$Z?C&yS`Loe%t5xuFO$KQ323IU#fE)`W5zdTg_Q#QC=Tl z+X}P=`_TUZNQtM`)8{u(DVCz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..2aea809d943558045eb68c2ea8ad0f8b0a36d54a GIT binary patch literal 483 zcmV<90UZ8`P)^g&GnN_G7!(=9^no9$EdR0C`JqDr}?Zevik`WwW3KK&vJ@CYlCau~t0* zlmX8V3*UbJO!&#rzLc+rK}%)8^NVAm`pZ5+Z2(F??)-c?^5UviDg)P(3*oUmGeO(5 z|AxG-!8Z`~Q3(iAH491r>wQ=k_{4b37RF18D+7?x#B|Q1@Qbs{^osy11K{e(=$sd= zQde9VAZ@DYrLxryP^Y*QfNdgR&O7uvhr@8p3s|9lnfTSF!iD6?j*@#^1ixjceJlPK Z0ADbv(Ejt}>>~gG002ovPDHLkV1hri(#!w= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..04bfdc1aef2748c711f3c78a9fab9108c002130f GIT binary patch literal 254 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a7551aff5986df1f7021236ab0193e60ee15efa3 GIT binary patch literal 5588 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json new file mode 100644 index 00000000000..3f29b07f084 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "original sprites by Mithrandalf for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba5dcc89629b486b489f8afc2a0ac2ed366c27f GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0L@+;Narq6c7*)92^`T z5|WsZkddCApPye-QPJ4Y(AU*9dGh2BpB4T9l`@tD`2{mLJiCzwph#_&!%v3oMt;US#13y~q-w%fThFV0PoW zMG-=G^~G9b!ZJJ64yPX> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..f172eb6e1a2577fbdc11fafb369aaed971ae5cc5 GIT binary patch literal 394 zcmV;50d@X~P)Hwl004kPA0q==SD?=v)MjbHffKdkwxC7pkPzlk*0iz}1 z$aMgyR|JZGlG}t(y%akD1Ym7KkR!}(jqs{HdH5W-T}YKSA-Ho1Y!AW!$Y5BblNfLi oNiSIrKEBTT20Rf002ZWfPFODcb^rhX07*qoM6N<$f)YQKI{*Lx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..cee2ab578631f0265342703a351826febc447dd1 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7e+r z#WAE}PI96|g2AhXKz1Hp_8GHo|5ZQ!;j%ivVbD>=_xJatEf7_(;$m@ik*uiP(Gm3f z=V|jrvc6lGO|D#(IFsAk5mf!@gJs*}D CrCsX) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..994cabb2715f36c188da2638753e45aff2cdb308 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*^E z#WAE}&f9CgTn!2WtO>2>g4Q+{gto7r%98tA(LdmV;3~m8$3&Qw_G~X&c&>d%#mp`l z1_lr2fZ5-E75_}I)@52S#r0q2k3DPF)ao3le3O;tbSS|}neE1%B~xer`BfRFI@82X z5oi$|D5QUw42 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba5dcc89629b486b489f8afc2a0ac2ed366c27f GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0L@+;Narq6c7*)92^`T z5|WsZkddCApPye-QPJ4Y(AU*9dGh2BpB4T9l`@tD`2{mLJiCzwph#_&!%v3oMt;US#13y~q-w%fThFV0PoW zMG-=G^~G9b!ZJJ64yPX> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..af64f96c3e2af8838598f52b50ffc54f4e2efd52 GIT binary patch literal 1009 zcmV($f9(rjm=^OM?^w1vq zm_78?=V$`O0g57kf!I#vSfZ$1{)u8|mReeJ0+@*x$N{f0Dk@D zr&_Efg3yN)DUOdv5K`jopL6)W-#(Y7snTb&nPm*X@4x+ApPZbk-{bMH-S78(ym;{= ziXv6|Xmo<*@>=bG|J}6ygj`TSa~7Z(@wouH~V==E$mb%5FH zGkAT6^jO(+k50r!gzFq$>{`nSt{oof@)K! zaInrc#sDl9F<#BysFyPNHGPI*fYCQYBx|9b84e?q1SZQGmg1E`0MDjR@$T|JxUSpo zWkrdr`Aw^fH2=uv-?!&x09aO&bdMjOQtWe;;l-xJ@p!DlVcR_lO{Kzfvsh3Fvew23 zfd1~}UcZmPAE;zoEMpZC+qS{JYKqI2fH6x9pufk~g8{_5gqqJkP$vwj*(@;_3=mQt zp64M5dAY>WVisQrGpS;7wjs_`{dz?hQGN0Lb7Sq6{5@aj4)PAA7$(=%*i z3_wW<$HH-b^k_m31g@^G@#M*bDq^cn9Y!IJjzU~s&JS#i07!SG#mV;m{Txv=q)-G{ ztpqV5I7`(^>8SQ4^#N^T1c0t}jx{?=GrI8x6mPl4rmCp^H4I8zbYNoyfIsk% z&=t&yCWXM3oC?t-nbYgRaU7NToC6F_+ZY2-kwY!}^<8e7IBN!!zT4Zkc`yJTFl1Ix z%;Q_n+uEp&=u`C zJ#|WL%1r22C?NH1tM1kXy5;~)yiEC8wb`c3ZtkI&ZHxinl8S~Se2yeZw|_^S0MK|% fjNU(De~J7LPDJ+f!GtgH00000NkvXXu0mjfYa!|g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..95c3f82c11fb827ba02375dd835dbf9dc1d745e6 GIT binary patch literal 793 zcmV+!1LpjRP)Oq!VJo-Q1b^CY^K7z2|&ijkw^r z1aJx962SihU}-UUOxbR;qE>JGvwr@0Y$rZ8QUDY#rvrl74CDAXXNpd@%bD)277Jfz z^ZTlQQ#AmpkUwr5gLPWKlw}I@9uKB%4oFfNrBV^?RvV3GM@voW0T8`ZxhT32-%TU@ z`XyH1yu*{n%lNwf9gmjpql6*`gJXRFC=5{e{R=1-3Y_Oek+aS2WEPZnM-G4(@O$TB zm*?Q%pp4I7*5UDp%)-jbQ`Bn}xZQJdPC!d&mLXMod^D7+9-`OlbM>`K8D&XAAh;+G zWlTQ+WvRjptZzi{;`uYY|L_qHAKa7gHxUeYnT3UGSMg(8JqS%RK$4?AQ`P0t=?pk$ zT%1V(G=wIjNlQ)IW?)Jl!a_lkd+)}qTZGr^1q?>GXWi)a2WT~`%#vwhV)OtOZ{0v5 zkwK@^#ok^C2EzpIhVJkhv9KH8;p{(8o_m+Prn(UP-J*TwqNppazYwR+7~t> z5nj_xh7`0HklhZ4M_jeygwdZ-UMDZ857g7I8Gy3)Z+zQCIQ$B$t8cM%`zFr`P)vrjuAB|B**(s5P^s6n^U7y!F-BX*C^^pUJZpT!ea<#^V|1UTJ Xb7VVoQ;FeT00000NkvXXu0mjf0uE(( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9b907af64d5b3c96f7022db2616f1bc5dc8ad0 GIT binary patch literal 654 zcmV;90&)F`P) z7aIOZJ9Hr)6=HU?|sgD-gD}~ ze~u}@6krPQPk>Y^WuCt;7K;K`fIkIeN)U3;k9Ox6Ji`VM%mFUN=a?V~4+f?!?iWS= z02E_E5?@R&AQ)2ceC-8zh7Ax7$t+WkM}QQN@bXn2cW$pBk%*(){>2~QsMUtY?Y3O# zBK!Cuh9eWRng*XFWApt6e}J(Au?tcBsMXNxo#4sSXINRj0iN-f1CglA?4O_4nEmz_DR4+Z**7 zmTpwgKL8clNxzTy#W~QXuvPfP#k;$a-CjSnrt9N1a3}-rF zyK6vGMb-%^s2FMfsTd1eANd2Qii~JPK|q$E>tzTo7psZUs1LWm@7yx+Wm<+;t|plM z<4*Ybi;mft>I?uiqTz7Fgem)UYT>Le95@3&4y?c3KsNix9!n-u7C??a04+g#H{9QY z=o48F$i2=vcOoJOLg4^v^(LB)1MKcr?Qur{C|XBds4?G!X!GZxa{wevnNvUL4bBeA oPAo&y5@{TECLZ$o7dRik0h1HrZ;2JF+W-In07*qoM6N<$g2zTE?*IS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..42c8042f278721f768de2087dfa94a6c2aea7ab2 GIT binary patch literal 498 zcmVe$m*{NTZ z(aRSWpVYmld*(4w03bjG+rmSP>s1U;Gz-E2 z+F9uH>v9^10iZMNic*_YqisJ0W}q*1eYLY_w(u)3fcodXJ3|k z+lwe9TY@vL$55S`HH0t#5MYW)-^2iDnszltuU<{;^4JXQoBw^GoPYUb#Q`%U4xqdn z6Di*jMNw)W%24-bKneAB#cx6?2;zMZMalFSz71f#UY}`UKlg(GY};mv^L<|o0PJvM zGV5(iW9$`l13=eCQgityrCNi5A4Z8d0CPI3#D0Ac2BWi2k1?;J0G^&-uEt=*nE|Zj ok_4L#YGCNY4Zw9>+~G#pH`Jk+NNfO}Q~&?~07*qoM6N<$f@fCBF#rGn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..d358d38b07574909f2d3841805da075187a2e283 GIT binary patch literal 548 zcmV+<0^9wGP){)}ku?E^*{ggly9YA@y4>J*WP@`|-ss`eW<_>;&ut{2u|s z;cyiM0WFuy(${P@%V*_>FHKV#jYf^F3IO@j!#(+XZCVt66GG79?UkS5pU*OWK0CiK z-PT+Hq5_Em$N}%*h()YKoBZ`}h`_sB7oY$l@x=#Wt76T!+|Nn?QV;Tm%$Q6{S!Ti& z&Zhw63J{}wLbS;SRss+$qW>yH&jPRe=7n&|fa(LC9K;^wW%4Zca%w_!J-S~fFV|=9 z6m+{a2$;{==(XQ?rI-Url5Afkyz5HYh*$%7>a? zUtLzFVJ!j_ArMDUw8buKk>GmalWFfs?&sc<&05yVv z$z(!d7_tR9EE6rdn0DvrD+I^P+SX($v!gZLH z$Z=6o8L3qOcRG*VRweS2!~HTNXwob*p9R+U0gv)CuhI>RvPA1|gA1$#AhJ9*xfx|< m*L>Cj#^bTkEw?rSb>S0ipx3%;!k_#A0000S!S^b^kFK;C^FWkIOgJi zE6@j?(-hk0UC(#>18}Bm0YWWjsn=>m2@!#zpv+_f;uWALrtM%CxK)+0Nl)H?#v(8j ziPMh?NWn)1Bx49jUA!NGBuQZF`-TLL*F5JJpqZosW07cy7QpgT7|tI}!!Mv9&a3XA zm!beF#x9_u;0P|uQjeSU3Si;N2vD%+c_0--0Kq7tTOe@yJAgH-G>Am_gT%^Oc1X;v|dr-}do002ovPDHLkV1n=%gjoOp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..65432daad84481ff0972d2dc7dfa784d977a9327 GIT binary patch literal 454 zcmV;%0XhDOP)ga$xaCHGq>w5bK32aD3rMeV2Xwq?tc9E;T@*@4-f?7#%`X{2(Un z`A%htw&UTkpB?~p-sn-2)irx1D|2@!9YR(4MJrnX8EF7%0K8UJ)O9=41(=mIfCkV2 z{|7+!Vwo9$z6muzrU12y3EPfAeo|$Gnk-mu@+LfYyz~HAWMaD?^fDt+fb5kY-^f_4>WJ*EfR9~_wC|?O&4dn#H zAgjpLrXJeZQA{ufXf;eByMj|D9_$~bp%Av=|%7w;Gj-em8#SP ztokmV`k%3%WsyEL0dEqdfS)$10wJz0lo8;NIj!x0fFcG=E?{LlX()VFokttp!NKo{~#hP6nJ4iDbVTmpdVz6f*_ zXIF^k@@^?9W!SWoS&r#Nf`ib*zxw+n-rcV_t>E>(i9=dqCf|l9f6g9YTOwD$u&%i!ti=d#Wzp$PzvV0JnH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..4384fc083d4022408a21e98154b8adfcd5c208bb GIT binary patch literal 526 zcmV+p0`dKcP)@lIYo_{nQ(eK8!{o^pMMgrHTY+tY-l_lClul7bZT%IB||9uGMRu=GxH9+o*%#W z*Lm8G!VohSqrYWB__EDpXoe8Rii)bF2E+<58Tty91!c>x$tWADI}Y@FJ*Bap@3R>t zLxaHpUR@U`!DW;TZG!;zhXY9*m<;I}!U{y3cI)hDHoI4SpV5)ckPIO##LA*oGL^nM za6(ZrmmwP}S1il3cI2@ck|9yerJ#sbs#I~_M!`iZY6Lg-t z=`HNB8P=AWrYSui2R>{xnM!Z_TDzZ3pu><1A*?heTCy3EA=|bej;W_#h|5w=WoRpO z%)eb?>-Lx7K0awNBtywl6O6+SEX&GrY-8V<0VC03$QQK`Lt)tjabjpOBt!H0{Kgp% zZUvPg85)g7O5+xb1)Cum!n?s~b)@H_?MB*9WwaiQ4I_UMh3W4dPKvo7gjx*AP`}+s zg?{s}_|FuTM#Y$!217FR_Wtp3%e5H*ML8YA8D*443J2# Q0RR9107*qoM6N<$f>nm#IsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..14e73e6aca0d4fcb04b89fc6a16bfd04116af012 GIT binary patch literal 583 zcmV-N0=WH&P)Vl&T4vY*gj{ZeIi9c{N z#4q3jTwF}-B5n*0=un`MAm_EOc?Ar;w+xtYms{@ZIq#nL?z^wlY0vDC&^9|Hw9O6) zZL|NIP#A^_&+}+LpXae!t(HIQIAWvGh4*P`WyasaTD>t{5X)Azc$DF-RRsx5%l0 z5fwE~2u_MgoR3ew$!oR5nDPltr^=aiu=YyUQ-;H#7*oCvjmOk%HVZLx`5zvisMG1t zrGHNE8My?*+A>XMQQAXv4Euk7cU$PZQVhF>(&ew`jZUdees+doAA7SN%%f{w5qS*> zFzgl5gh3D}64QS~uWFKZySQTUP z9E&mR?;(fM{-Ku|9$OMD@2Op2SP4Nzsv{|^LOQtlzT#p^C)DrvEn=Dkvv>c?egQ{* VuL3hYPC5Vp002ovPDHLkV1nhz{D}Yn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..3002352395a859b7109e7784898be358364621be GIT binary patch literal 414 zcmV;P0b%}$P)Nzl1IaSSN8=EBkoq4Yv1y%365s3?l9Jg@6|kW!}Q z9HIRZ%Ijp}oWD({aPm|R3i*oWvzgg`f7;`x=a(R?<)Dx(8w~I4IgMN%iuuGq?7qlD{x{4KQ+ZL8+ zIVi-1Wm)d7Wf|U_S}rO?Utuo%dwoeR&~i~BUs1|Cm6nU;7hgKkE1P{woB#j-07*qo IM6N<$g02g-ZU6uP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json new file mode 100644 index 00000000000..42ebb30c440 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 36, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_open" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2626c910f3768df190a2a41c26ebd6eca4ba6892 GIT binary patch literal 538 zcmV+#0_FXQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0k26!K~z{r?UgZ4 z!ax{?dp$~9n$j{GS0#~<7#18^42FMToc&iO4u(IV1HZzM;7G#kW*ca2uf6(JPXjl! zH++VrPeP9G8=kxzeL-tzXlOVxM4U%wI-R<3MEcK&ODTsJ6{8ZmuHO|!aq=&Le&u4U z=p1zFe$of!o}{!_1;EB*Cg4 zmW#CtE@Nz7a2{fRWhH-dF;_Ai4*fLC?kS}c!!R7wK(bt{EAc&#!Qadp+Ud0^6}3P@ zmWy>IK^W$aZNEc9NwD4GKGd>Y1qk2aMRBbYlG~<<8%UNb@{uz30PTD-4I@Ae1RTi4 zu9D?)$v@+G3q?p?77LCVNS2FrEpV&lujp&}9{Yw4pb1~v_-tV7Xjz%pp cHXx&EUueGufw4FiA^-pY07*qoM6N<$f+!x~YXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0446556ab04ee615032656cbf3362746196f90 GIT binary patch literal 630 zcmV-+0*U>JP)as!Jq$YNp@N`8C?!M?)mBzi7Fc5Dti9Xp`lnf)t>@sp`_Ak>KX%?3XWQVP zr3t|A_ZL~lg~MS3cK~9(vb-c;TdaLjdzX&Oxt=jEhDBBgCIH&pW_Kz2obEZPHMMub z$NP&E2Lb_R2u)K!n_s7PWdLGMt5|qpekL=3p|w*sMGgEgJ^Z8&a8imtzn#ziGV{%Wa2AT(03kHohq9~b< z4%t|ERiI4*tOkSm5`+}LX5Z!fV6PQ;h-nJQ+*UKaxXu0zK)J|7FgeB*`4LC;@nRyu z7XW24JVL9v9}2lExg{d8TKLwu0-(^4hIqa_YUEMcYG86^QIR*dlV1UHq&5XX&L5=K z`2wIKn;SI?QJu%li7Nmaq8YskYJqSC7;sNZEglL6Ix5GM`!ak1a2Z<7Z}3sHMh&;S4c literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..81d17e6434fbc0364d4cbea2e27a8982ae7f4a6b GIT binary patch literal 647 zcmV;20(kw2P)9%AU_Y~l#DaJ|rECs;i~}NV0N`!}CnI>qm@aVzAYWLi*VD*? zTLmz<10cJy4ba`$&R)!4-qklrx2K!b6jaIgnx%{Mrs;wcIdW-RQ8d)2`A^q~u zoab{w0NT1$dU{?ru6J|w90V>L?yoZ!gaLTHGL4K)(aF)OIrf&bA8=eka$rE4p={Pz z<<1gIKCBwSA@s{DBy(ptQBk`9d%h{x#_Exf5M1!d0oqF~iUH6w*Jc|zfGuZDI^+Q4 z#0gi<0-lhl5BjS_p-{*eJr)B1yLY!%3PKbk#{ft?SPc8M={a-tKLWrL40WK8dPXKF zl}d>N;6g3nE9S)r^85YN+fhaJb=6`4AfM9zrO)ev6FCOJUPlu44~?@vf}#lFf-9JB zRf6IGc*Vm3WVN3Qg~^G&T?YVU)o^HrBuOH>Dhhyq3*f?U&mr>jLKpx}Ltg)_%6G#x zfMha>Z@Z5~BEjqp1m@{rZIPXjg%piODH4gu#^1REV1=-bEiCU8d{)ymSyfecKg%r; hcAm5S&R_q}=o3wa-mx)Ge&_%I002ovPDHLkV1g=R8{Gf^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..68d500a1b9ac6459a4cd28d82e90dd5f8b60acdd GIT binary patch literal 459 zcmV;+0W|)JP)zc7AL6`{|ypL3fe~Bz#WMpb-Fi89|*@m$nUwk+?!kuGG;0; z75G=cahw2KUDszw1z4~w%OH}301Lito`?Nb`;|t31xt&0n9b#Ru%>C?x~^D(=yadf zYH;7}@*6~ka{(4^Sr)8F^Wn8u-G^SMLAL}~XD4Bc!3afoOdu;#1t>-z6Q~{-zoExK z&BP_xEiZ-bU@UH>QlHGi=cE#}MArcXi_c#c6cv2m2azOZ0JopAQ2{DamjER^&x42d zHI2aNd%%M!;R5vwJ8YZvOI{5>dN*_eSus)I@!88pAi5LEn`_W-+|dd|`Fwi;kt76G zmkZ(OaTXA)gj=NyN-?s%Q-RU&3BJY!@dE5?7#%%sL$W_2RtFIF_V?e1uwE>R7r;Zu zk!c31s_@ZcIC5y3LJlM`0TyH!M!@>EZ3_)%`~c>^jqbWBm017)002ovPDHLkV1oGq Byx{-< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json new file mode 100644 index 00000000000..4573bdcf0ed --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_door" + }, + { + "name": "closet" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..7f97f96245845c5981a5b6aeb68f4486f7309633 GIT binary patch literal 709 zcmV;$0y_PPP)Px%e@R3^R9J=WmQQOFK^VrLq$Ul-ZHYw-%e&kTfLgVVTMPotf?yy!c#p_I+pG=f~{)S>PWl zCele!6f;cmTCK*d&+VWniuwH6Q%^iCT?YXC)EYE)RbB-E^m;v1DwUX`C?*erne;QC z&CEOA&juX;KyrG9w)+DsCjt>?0l1Cr=7;Sq9JaTpxn1U{19Q~D&bv+Sr@O@K5SyBz zhHm8+A0n5xppJ|K9DROIbLlx5r@F=~&j(1S(|EJ7;fN*TT@1$(60LOrz;G-%;sAg> z1CLkoTmbGTD3wZ{??+6AV`*Y&ixa)wGq?cE87Rmy)>PHp*EHO{HOnn#*Qc*1D9ADj zvK$@&0QNNvbJ-OBbO(<3&1+J?2uqdaJa*e!bO4sww;x@R;o$)iamyf?UGmM}$+C;< z%_gl83VXf$6%qxx@*&*(@sDuDSiYH^ozWpMd17vWyT;>A!so88^%r<20 z0=vQ-%|ZZf6FY?6)D5Tq>PG`0C*jJ2)xbW>ImU6^u15nPD*BvqwrpUgUaw!wBHY=m zF^d4Px%+et)0R9J=WmcLJ0Q545NH7$gMTp)Q6qYlIuOhr0r`a_ep(!?%JG-Z2(iw+%} z{U6$`|AGT!?>Qg7=iYN3 z+~`KvUAMd}G7O{hKf$xvtZRJN1%_dCo;{u*9t~p_iloNJFbhQhf?5oKcr?s@?TBW* zN>Gc@tXBcp%GX>W2HcWANJeSatC)o%!|_3tcsM>tC^$eo8m4h-5s!uyj9jynnQ?W` z5kN{NmXiN45)iiMK`o|0r7Lc71sIMG5(x-W<6{6cPAvc?CKmu0N~TGq(l!?W%tBFt z_62aL!W=1U|p8fyJX?p1v^p2LKR4aDQ%5{q8;8B{QeaLL!w`umIa%Kf1=g?FC@3 zoM%)|Qm_3`&no$xtvB>03hoLV+V`U23RBkYy)SH7?0yDl{ARkrdq^?Z4G8TjrP z+fxa8CGY=b5CBV=nLmlW$rC`Y_3c*ITC-4OF7rwqNGVO9qSGj_l$r4a;JE}s2rSED zb7M{Qg^Rj3JP&e)HBbzUvvVEDOuB5TctbkxKLB^Si$i`}~4>d7DHk z&8VKFWaci7_s;+_v2;LoyxsxStCE>>ys{VN=@2@pw+sM}X1g6zn_X1!PV(FbdV|Sc zP|4?13BW%6yd;PJbYOR9{nCac-H=z-3xp>C8Au3$5Q34B6~28~vkj=L_PEKl4|s~= fA}^ok*H^y**q#RlpPV>w00000NkvXXu0mjfw$gDC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..24eae0e5887043481fe62dfc4dfb9c9137cc2927 GIT binary patch literal 628 zcmV-)0*n2LP)Px%E=fc|R9J=Wm%nQhVHn3h`9Uf~-hyclgiJY7w9O(FMIqAO;G#p}wj1&n2>t`k z0R@NR6alb|HA3S2~5-E;`C&oaPXAi`O19&F3(*9 zpt-pgc>TeXfqx}m1H*XxE(3Gdt)T!9%Xbg~vI%#8DZ`E>-x9d+SmF$okKckf5Q)Zn zHpi3a0t5FLaMj#g3mmF6;3|3c3ILz0Zvr(SyQ}qcw+nn&mSwf4Qj^rS`hT8NsZP)I z+bUMw*)yTJaQLu~8-w!hceuUBl+8AGn$zO$$_;M)VHX@*>|<2VS>fu%DB<(H3o zz_BsGPGf^~#vr9nQ?J-cu&;r;_a1~?I3U4p24Z7^@snY88XJ8NtXFKd8r37g!Bc{p zw-$XHMI~<;04~kv0GOE1N%Ja&0Svf}uI2_lGf2wRTbA`#{s&ZpXr$k$7OW7^;%UeL O0000Px$7fD1xR9J=Wl`(3=FcgMA8!v_?m5srHTp&aD4BbKx;9EGGuaF+Wcxi6o1B47N zziu|&dsPkA zXzf5FC67U1PvFM)`D{mE;`=-=mwX(L<^|Si+5t38!^HQ^3jowo0`O&P1W^zWhT&k1 z_9d(i2Rj07+y0KAymt4WXS8*oEK4VjA|9qwX7jmuf&XGeAkTBh zxImI5-Dh0`kY$; vp|u0@bh=xkRiM3I?Fsk}@P)ZZ-Y}qnS022Y)*z3GzD(vluMlE1R5G8f{@uoLV&l;26RMuq8311GY-f|2w+IW^2-7U zlF&Z^;90QBs;(4(L}^u;mh;g_OIjZfcp>3O?&{Zc(SIV{UBE>-Kiz)PD_RIKo)PpM zF%GQJ5!LzKfy2?ABGx^Qi!$0WiK-F+!^CnipVy$Idi{Rk4f`8gV7DD!deoc%0000< KMNUMnLSTZ)n*1XG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb2a2fe68bf0dc1b5b517cfb91200f59f89aa5f GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7etm z#WAE}&f96;Tnz?1F2P@;9tEA4Xw%@XRiZiXG{4>^P2Wt@OI;_^5*9ouoLg(B1T@q9&9_pbpG~C30wcZn|XO)M)pOD zX#?8@1}TTV4CZUqW9-+y-KOT(JD*WuLi0K=-|737$Lu{mG45Px-8l`0u7w8jbp?GE z^FIGj*fEc>L86t>)mo*vux_P2L*x$)cBh@q4B6e=wT_;xlBvjWZ#!jup!A&{gMe1d zA;wE0Wd|a@>iQg&HJEnZp8M5J=1m5(1o!XGP+0k>t!7E;f%xdEbIh{~j_}+N-oPO$lMP ckbS^>-QRoH#^awS14Dwr)78&qol`;+0LKPRZ}dX+P38JT0F`ACy#sCAsyiUUFr)#T5%Qx0+#&-o b0CK=DYKu=+7&9An00000NkvXXu0mjfMYoMj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..ae50afa7819effe7bfdcc157e9a9226e5f1f1fc0 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5gP^C2V@QPi+bfQK%?=W6i3!VCxy3RgA06BA zkx%ZRbcNvMFCuSZE->%-z#?~0`3i5Q)1m_&m!}vV?$G(i{pGgA&ET;{4 z4*$5m>8zUPXgTizu8m@Tc*r6lf@;hjBO zh(*pI_08Gue`6(%&jNBTeEs`(Lc7rAjV@pmjfA#2|l%;m`1 zT+g)B?)Kx4wU+bcH5?^u&zH?r*^@cz_H&);r7Vs434b`Z_Iwt%l4@hzv?ktHK5{aP T%V!5*h%tD&`njxgN@xNAqRy4q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..973d3220dfe8af07b9cdba08bb17de0e74fe4cab GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEP$F z#WAE}&f9B-d`%7ltQQV05LKLb!@+&O_=3kGcRGdN7=Gi5VHD2MG?!@R6>U8sCB68l z&mGRQf3i;US?e39v}`Ec&`=vW&G_kqWtmL*4A=Lp(mL_^Pj>!1H4B%E$9KK2F5j6T z@FM)dtmB1$qWrU!r)T7rMPFa{QS&szz2Ey6)H7Z(Y2CH1QK-D%ykV=@yT=?dinXl$ zsg76QGF|y|kx@pGaZ1pNUEbF}G90?_pILcsgb3@ZcXzhgFswCQ<<}O_HX)az*YJV0 z%7IdeZOk&0SuC2E68`7iV3;G=z`&xwz?j2V!KCSEJI}12VFS>=44$rjF6*2UngBP* Bb>jd4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0e5b04f6b37c7488c9ded74ca1f18c16d1acd GIT binary patch literal 368 zcmV-$0gwKPP)UoxB!vLVkx(pdu6h#yS0XdE{3_w%u3}~80mSvG`+Z2YOc!10GTAcu70i&G(2>$?- zM^#nv01$#>@E$c`0C60@e`&iN2Eg;YUY856e&;%t01`j~NB{}&w*Yr0&SdPNrPpu( O0000?_T+sX9POa39g*$-+}}a}e|ck=MW1pU|6vB(gYE&|!Cnid zFmd_4cMudWI=6-K^ri(n6qd4RePeiUYwooMPaLc?d;T3S2bL0uP%>0KN z8?H&^&v?GG{=l}}-&|W~bnXA&B;+n<;42)^$hg(yn1}QQuIhh(>zFiBr!y89%N$?? bp$}{mSNln?k#4jF`i#NT)z4*}Q$iB}B>QOq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b016fa33dab2fb5273c916a666c012147f4a9b GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5@VcjqV@QPi+slqzO%5Ur4;@`OmY5}V$CUEt zPCRq$&WQ_7JXVh7FQrPE_%Ezeu4q>Xy0~$sz&$HoIWL3zY0u_gO>R@{GBTA7Gig_` zTpLq9`T0-YzI~SxTpw27`=x5%K{(-VNs`=3?It`9JG4$0; z(Z3@7Vn&V#lR_@C`92O|z8u*VPx$7D+@wR9J=WmCXu*Koo^fQna*aT1YYU1V+%_MLlP|h%Vd*p-&J(CYG4X2&_dZ z&1gTu^aITYgE;rjJ%lNOXIH u698yLMVh9y`7CEMNrIht{JTs50000Px$6-h)vR9J=Wlf7!gFcd~lL-tY{jAL4FnT!)$JQO-+C~2R!+4>B|F`2rFAPeDO z@&xS=5~Rw7)D6v|Gf9{G^C8_2JRXnd!d#h`>1_51FdD}IG_^RM`(V~LwE$pMme$On zB_PX5vy_e4C%0k1&Fyt>0cQQ(Vop_5tjf~L8Fm$}*B?$S&C-(xS49PYR2r%DUO?Ra zlFk>5#xYSC{A%DSf~3+kwQ#;*U4Z20i_1VFppA(f`x?s^N5N)v?v&x<)hbl+)jOF$F` tmWcPa<=^aBRLoyrocUi%4{E)kefWp@#GXb-y#*;f`}>Mn_Q>^MRak=ALtZbN*c2U@KMx z5CKF05r6|=r%?EV)zVq|KI*sa>oAi2aSb)<^_Vw6agXUmopsvQ;&Cd;5}WbR0J8tq zk-^NG2>{0$WeJ+iFV{VQO)G2!^}Yx6A%LtplMaAJ?SmXLoP3rICnbDE1OPohRqZl( z0-yv)+4$#|En4|}j!H6B36`n#0uT)Y8@>bFlH>XUK;HAfyRzu5pXhS;5<`^xa-v z5*#*}{KZW0?uQ@l%kcs;ppxi;$xQ^D>gO6zDxXjQenEO3Z#Bz*i1j*(R}O$?>5ojB vhC#Qruua4$1_BJbt(axm(zISBScU!p*rw>IH|dmv00000NkvXXu0mjfGKl$X literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c8e710cc3856c80e2f9a542777f40706abae7 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^+5I z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYtYCJN1q%f{X*ky@{BQbmaRa^%W`}9PhXqqC z6}Inq@&DZ0YRPYJZ=8AY7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a45eab7ae1d2895ad22357dc45353ae36c6a84 GIT binary patch literal 339 zcmV-Z0j&OsP)Px$4M{{nR9J;$U>IP)h|GyeNdAB6{23Gl|GvFsFtGM!Ko^&nlY_G#K6->NQOz3706pb8p; zQ3qf+KuA)aCKll`7i%J9|NVgmPQadxapnT_Y()vc=OGjaAeUUU2!#trw^H5AQ7{Td l!6+C7qhJ(_f>AK^0RUIAQFFI$Az%Oi002ovPDHLkV1nk#g(d(1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d43e1ee13a5cf023ae3db70deda1fbdfed9cd6 GIT binary patch literal 415 zcmV;Q0bu@#P)Px$SxH1eR9J=Wm9b01KorKmh6>W5XQ`&Cf+z-yh+=3r2hqVr@DK3+ba4`! zL@E&_Ac-*{xy6V`>JSS(le7wHD|o-<$b0YJ_vN^}02~g7!};$Nh98cP4*KG%497Hb z7aH`vxNI|;#qULxDnYl?%iTajX#$V|w3)b&yV5V2xq)I0^7rXahie3YJSDkq{EW*I1U}yEaoNlxlEH145~m$jy~0 z9MgbALilb7%YBEGG2X{sLfZ?VYic4My*@MRFuJCuzHJ(rgJ^(6!qoV3y$pO<@%qC( zY5cvPx%97#k$R9J=Wluc_BQ51%shS*9LHX$V+I2|{ZfMINhwyQ3xv>>AR14Kmdzxe}1 z5W!+yxH4gy#0Em+!Z9B+X@?|T3|30wVoaFZnM~4bbTQ9n=6;-W-gD2r2SP$ZLjExe z?!o=_^&!AYRtDg#t&>T{=XP#bJ;4`1xl|HjMg;-t7K*CS(4EcQOlt1n04W&~$z=ef z$9q(?3guEs*c0_LJU%`d|8M0k07%Evo_)9PJ)l`V^vs(*6M#Z(iI&lE1jw?lNKXk? zvNF-%=WHlTzCqo=B}t~y(0xU?#T->GxLmx&SzDi8f<$tenpT{cu_TF^NRo^sy#(+T zADbTO}H`{U;?0J^<}*)O4@Dtvf@nkJJ}UU$#?1Kbz1H7@pL4XW_N#+PjBD+4UA}a1wp{K6T_v>0N}-| z*F!($z%Zw7a`dI8*c18p{y1B>;$Gh!;W63Yk6;8B$gJwZn{>Vj$WS{9A@Z* whSkHc3ZD6aZBo;UzQO!#5ra}Y8g$p&B7=!Tv zSom-*d;nu&G!k{;!dOzEDQ2Q1c5J8r8HPm>V!%1)GSlAPxosJLV9_tRxqoxc`Of*y z+z~io3<(Sg3<(Sga0G75%^l(#QRB34lnsbYjt6#LX>N1A5F6|3AvuBcBBatOC>rcz zD>emxf+;8V#H2!N?a_V6WphY?`^Hy-eEzGqUQF!K9377e-(9+X7fPG&h4bommFA2- z24d0Zs`^yvzFU~*RNJQ8KeYI0xX%H zU6p3cg0_KsO?yh~V$qP0F(8?oB}oU8Kn8SP+7yZS1s)Vq0$4hk1a5E)%qkEkVlqF0 z2=qfcYf+ZtKxjhzZ}G73}=HL-vZO_mCrP{tGC!M2xkEv9_Jmvjzw5an+OGl6VQE#WDq29Wk6ubYQ{Hq`K!zs zCT>3V*81m{U0zk1I-lYXZ&&&gIA}2qYg<(~b0JE5(;4@kERzHGo@KY{Jhd}K&@AtG z$7pxw!2-N{@%$(W;O%-5Kx6C!tirV`3VhjOeSyF|K)amzoDPZf0<3-1A(^@=IG(?~ zB>2I-Qx`b_%HGMS+^`|0>^cLEB$xrK!5bo3ckaF$4clagKCH&B<8L2gu9Uqh;0M&P z(##Nz6fmuWzZOJ| soQJGl=ue7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f5122c4ef7e8089f259dc4d995b79b492b5bc2 GIT binary patch literal 364 zcmV-y0h9iTP)Px$CP_p=R9J;$U>IP)h|GyeNdEuo(H#^8&mP}oFtGM!Ko@7{=7Y0;e*J`Du$Y_* z!-b<;8Kh*@QN)%kn2Ta33o=Jgn4dvV*cinibwgu@_isNks2ie+69Vtweq?a;iz28F z#R2c%eq=bXZ7qWUKL=b4=KBjrZ^FeseEh*+Xl~1(pr*?3;MQ%1^Cu6Z=wV=BfchK~ z3NSqmUcvYsfDOP5Kn4Q*91QnwoMyOx<20O)4xT-}$?)v)O$>2#z(i05jRD;p@c8BX zfpvhaxFB&3(9+STi34z%i!~8``1phB4v>4qaR743MT=0tmZeb~ zASJ8LASS0mb&DAo7~tk!x&4AB=8u9=FbYP&C>RB!U=)l3vH<|e7g!ht15yG20000< KMNUMnLSTaN?v}^^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json new file mode 100644 index 00000000000..2f6f3effc31 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "register_cleanopen", + "directions": 4 + }, + { + "name": "register_clean", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png new file mode 100644 index 0000000000000000000000000000000000000000..7e03d84874ed68e82032555e6b005fa9a4b44af5 GIT binary patch literal 1320 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe959cdde50e21771edf4f934c2f41209be1574 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!1`AIY$B+p3WC_;A2_ijBfd&^E1icnBsG9El zAE0*i;NIx|fHy}97)}%gYAUh`7Amgb_$5v^Yxq_oCU{WA=s-naBo-_?^>xzoknuoWqzpv@v zqHx-A+CiO`jT72L*;LT{@B`-378#RE)B4H-1HK4Ma^j0kCHl0L$A)L!RB;Y(ImMk@tv@dHBAo7Qja zT*#cWvq6Wwfnl47zlKyt5d%kq3}b4LtU|OM7aL!lvI6;>1s;*b3=DjSL74G){)!Z!23AiO$B+p3WC_;A2_ijBjch#uQtB5BL;mxp z8pT-FPhL2Ag|jxF`~4D3yOy({qh*)CfexmK56ukg7R<3ORt#YgR#|>rxW}qVk)ewzB49D|42x|7 z42(6u9G)#=-n58;Eg{g+@4{h*$Up|B8;cl4{wO$ji6oRV=&ZO<+_YzwiG`{#(~mEV z#f)|A4GcvZ5116<7cr;AKVo|E^neD`zkvn^8X6fHY$aPl|E;b%0SqO+)CkWsUtb0- XAe#e-LEuvGWDw=)>gTe~DWM4f^NEM8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a5facaf85f20d35d4080a3be01cd942f1a39e0 GIT binary patch literal 478 zcmV<40U`d0P)Px$m`OxIR9J=WmOXC5KoEsrqBOt}kU&_GBcwDOfhv;S`2rLa_yBHQ(Q*JND7b(- zTS~!lvI6;>1s;*b3=DjSL74G){)!Z!;1N$3$B+p3^|Vx3M3>6!sr$zFhNFqk zpxoexzLMUNg1>)cS8#l7ShkSs@a*aDCH&-e7)UWWE3h~;%v#9s$(BQahcSiy0+T=q z14n}lW2%vYHQSPz5e?q*o1Q8(TxImiDk@-CSk4?^Bg9?sa(DS_!9;ci=9J?LvX8N! zxN6Sjc2Gltb#a17Pg9@)*9#sA2?no-TE2fu4m*JU;Y*G1O!M_+&;qhKfEWZW1y2T1 Mp00i_>zopr0J-64;Q#;t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..5391f84ca77ddbce183710fd68f589aebd82e7d0 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;3iKO$B+p3WC_;A2_ijBfd&^E1icnB6jvVn zAE0*i;K}y)fp3l!Fq|l|EKFp}RFqr6@%6yv@^}fky*1sBIM(oOxH2W(qVBI^bAP8) z$dsZDPtWMG&DeQ@FQMrYGh0C$gT{^(lDr0=+x$2hVz|6|t}rb)(yq&!P|9#3X#!go z^NgJ?Pni<)%0R~6UT@#Y&sa5;x!G9IX{HJD;=l$Tx5Wt`Tp2ko7)ed2wdZ1EOh{m0 rs6SUM@lWWj4AAv_sS%!OzP=1vKsE;ugTSTW$so$p)z4*}Q$iB}hp%R6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..c4598c550611e03c69a52aca6ee30bf19411f5b6 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;AT%3$B+p3WC_;A2_ijBjch#uQtBM0!9V#^ zjn>$ewlAoXPzaL`<1DUp+>mBjn8;=unYclMBc|%lw1*c@Zx4{mYw*8+vi*JFnmktje5nzhX}-P;T0k}j5QD&_;K?A$)78&qol`;+0CJ>U2LJ#7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5611ffbc77c497b294b220c8f35677d8d655e74 GIT binary patch literal 329 zcmV-P0k-~$P)Px$14%?dR9J;$U>F6XU=)mk0S1hO6oi_o{D-kupSnX(J*oOwunC&W3;t(dU|^6F z7iQ3t6-Ji&|LEmgf|ldcckF&raXf%H#<(t z3G2J{AK4L11ieFJfHexXoVmrozyJwKba4FoLxP5qq7SPBXc+}C&%wZG6yS^k1_nrQ zUV4nkcG5yT=-CS^z^4yA3NQ)?SQ$VFVDlw0Wds8QYFU6a1PCQGT!2vMy#4wUBPy^u z09z`i2Eb|W%00000NkvXXu0mjf>H2?# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json new file mode 100644 index 00000000000..30ddccec79c --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By patogrone for nuclear14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..588072ac79a8412f7484c26797e34928fe664a6d GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;1N$3$B+p3Y!p7s zsBpS<=goySubQ{V*DtbQTF<;~&Q8{4D;aBit{gDA$j1<=r>@5%x>Uxd>ZjNnjwU`1 z)8L=_xFPFzlgw5Y&EXCxkz~ay_YazoYTMhvp#uWAoOadhg z91SvzsYVLcY)fWFG!lvI6;>1s;*b3=DjSL74G){)!Z!;9*Y}$B+p3x04;YS`2txjW-9s@OmN0vi{-0 z>fR=Ifn8cxp7QKhX--WmxxA>`X2O*%CjBm+fg-Mf>z*C_c-ZE=ew^7s%kV2YaRGZ? zTfO={&$!f6^WwJL)+5so81RTVEy$c@5zYSI_T=5=Oa`XM3byeX9=mfhn6ZZ;*J(}X zok}aFIJ2h#44aQj9N45|+4p$HW4W8cedkWd-RjSO7;qqJHml1bF^#_T*y~OYPJT4f z6aQh|B=$$jQIR3)Kj-g9U5oB8EHW3~pUz)?XT>9+clc5xJkxxA8MJ_G4j=}BOTm*t Nl&7no%Q~loCII^Id13$n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..d81f521455669db90f2e583599c7297ec1ce5c4c GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ot`d^ArY-_ zFYo3(puod&!TSiChmZ47k)9JGYYy^x%xesB;d>Ii(B!*T3;$ec1|_9M^K&1&ax7e{ zbH*~>>TJZjz415s8GQ9OuFw1Z={Hl_9)XE3bJot4dvz!LS>CrD4w|eC59V0QcX4E` zO?NwAax*w>PUdC(3rRh^3_)JO>(1}me&%jZN5=|lhPk`Ugt96N_5mHm;OXk;vd$@? F2>?)IPhbE5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3c39fa352053c89c854ba59ba042975feda15b GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;5JVe$B+p3x04;Ym=$?kbJr_WupG4B@#(?3 zJs2QmV$&`EfS9}6l*Nl`CV?c z>5?gI!u~zCZ{$7L#`Ih!%xmklsw+|7Pbl`znENp5TxG<;vkc2lNfgJm@L!Fp<|_aS z@5~BjHelQp;q~%j)NSQMtG+A`Z8z%*&IL&0+)g(gD6i|KbLh*2~7aEb8^uD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json new file mode 100644 index 00000000000..ba4bf0a813e --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Base and icon by patogrone. Others modified by Peptide.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..73a2329c8ee4725a47e6c26b704728525099f257 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}b3I)gLn2z= zUf#%iM1hAjpmxw17Z$~q{m#ifS<^Z~mKh$CNItW< ZmZ99ssQ8kwwl~nB44$rjF6*2UngCW%SegI; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bc24c52867737e8ad751d0a5130fa0f3ed19ba GIT binary patch literal 285 zcmV+&0pk9NP)Px#*GWV{R9J=W&@qa_P!PuPe?WK!R(X@;G!{#a@NN;Ckk&#_*upy9dW&3Q3wsMM zASg%-Dx`cCq7YU{xy8<}9KPXW29#1tDW(2c&=;6ynFsh@uY+lp`NQ!@RaLJ&=bRU7 zF~*RHa5|q!L;$$9EdY@Si{-&I6di0EuG~5w^P>08P_it?lG*mkS@`F#w;F z33XjRN~4IM&4x5hJNZ1%JDt5Bn9pYZdC4dYxwb83Sq4Q>c!0xxkHj%%IDGAl!jP}k j>ixw*Z>3U7sek4UqEtBq_^&+y00000NkvXXu0mjf+y-@r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png index 386dd0845dae633519168d2f9bad47ec8cc15614..c0538c846bf2bff6000a47f5927818845abcca0f 100644 GIT binary patch delta 404 zcmV;F0c-xy1)~Fy8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00CV|L_t(oh3%C)Ps1=2 zg%1x^Em5tcrYu+;s)_}vVrHzm@{c?754vS^7$TflDJoJV8U|9+CbkpQ0E@rHlJC7f zCpUfo4u`|xa5(;%Gur^OQhY%Z4)4MbkOr{e&uYXpZh(9iu2-l%Dc5W*2 zX#g)6pDgYLWB4>M#*G~~T;Mk`cVOgqCSqI5*a4YHh!@d`0hvf+%-DgyLfe7&ZhySNY#d_wsrrN`y46K@0du@AMAilT}yip+};EQo8C3L=bQro7-QDFTyVti zK*Xb#_dxGT34ahm06>k0c%Ekz&9Y35j4_}z+s;7A{9z6NNL~|L8vG9ld2#$p2q73< zj~eUs2J$U(!C{we=14f-YICfoAQ$?!Rf*-BHEvr+Z=l=*J!;=vZA8?3xn>pPDQK1hoBUr%zE;<~4}5jv#BDMs4Ve*#3Gays}M)(wdO0000t%v;{LU`5N4wJl56wk=zK z{N~LSM^7BPaie+h>ZV1j>gFz;v2jcLlGVLywro6mVbZ2ulQ-|4vUTtFE7zxO-@o(P z&FMQ1?z(Yn#;(J=Z`{85=FN&zKYeb+p`%ka?$~qv)`2_s7aTab z@X)Cv51$-;^mNJ5b4!n%KmPQ^$!9N@pSbw)&!3aeUp@c%^Z1kJPrrXZ`tZr4FJJC| z{5WU#;b~j;oVHbxl?%%%;3^A__OV0wS_>v&M;QurQ43lTY>j16dEbxddW?OOEGw1DWT{?9uZ%pIbxqF)zPn*2Cd-dwR)w5@Bo4mVy>hkH^`C}T_ z&#!k#m=Ie~Fd^0>BO;?BBEuymWJ^3xjH8Z-fkES+V@DXC9y=t`(0Z_e@rk9&4ueDu p2WDq)Mn8to2KENg2h4?q3_h%Pm|1o9y#jiU!PC{xWt~$(69Dd+s{a50 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png index e7d29a347937d6044f9dcd5ac752f4b9a974a40c..a94bb6a968a898d36bf405e3f7deccef1bdc50dc 100644 GIT binary patch delta 232 zcmVorfVG#fIgfwAzK1rA6*FI0v7K9K&2=QZuSCdgCI;g7hS}030?9M*bE9EWf4f+6t z_3&;!UdI5;CQ|^~-A-<9JRCV|I2+Jf6Wa~xHf1?qU;+a`x?xQLFoD6YEUK#B=Csyi zN%pc%(b?J!6Bxp%<}LSe1Hk2!zH(=|Zy=0nr}1#NaJ}DiuF-1dW?cUB7pU^y`DnhS i%6r&(-BJi4{5S#@5z`yvAv@G}1b5kZX6 zWmH7I0cM8QnoEG0&HF!3005=Z8B!3BTNLh0L01m_e01m_fl`9S#0004bNklL*WaT? zL-=|Fp!ib`<F}WVo1*gd2C%lighTUJVNFim1ZY1 zipg6dvw{1`fNit~6@k5dPnq8hP`uN&$=j;cYFyUT2jDp+#MqagFDhbL>2rnuV;zyC zGoaJF*`&)~H>aAqLs)KCRFrY?sMS2@3r)Wg;3b-m@FtTC1FGv&ECk>Q972?=l1}~_ XDZi(dIx@!@00000NkvXXu0mjfPgKT3 delta 247 zcmVHor^|Xd~gVcx!_I!!V48$^J#tG+)i&X__(s$hV8* zII4uVZM)Wyz_KhV0$V=ni6&qI3F{O%=TH=dN~m*gFAze&JaEq{0wIL8e$OWWfWGga z6(Ay%WqH}qbsg%uMpaeOx`=?8F$}|HzxO^mXe1yayBDVr(cw)oGl&S@`^$b2iJtS5 xeYX-Rcj9L}{u7#j3GAjI9TQanW>yV<1wZ8QIHkw`E;9fC002ovPDHLkV1g;>XGZ`4 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png index 10129791a7c8f748758bf50a950a1b746757270b..e189e1addb6ee8522f1773e4451d6b06c700db24 100644 GIT binary patch delta 238 zcmV zXmHV?82m}vR0|H?Z%T4ba?ecyFbwl!Mz%#U7gwQGsIl~e$Ltjw&sGeD6S*ylT7I&)e4xSX&~Hcr_YKxZiheI7$lXx50xXh3tV z!6HByws>l7#x}-2P23NTllW`T#{q!mS=zes^*rKyf>(SF?Niu0fGlOJu4@fl>)wSs o0}zqVbfzUS`_!_-?0;ez6drV4S8yUJB?SP@(wOHNeczuF9zuB5w^I@iXxP)Px$qDe$SR9J=Wl)q2HKorNn#f~b89B4(GF5EzJN8nFzGA0iEnI;Y|DJ&m%`E9v+`Cn@(_ae7dptY&rn|7ZGyxUs~> zDiLuQ4WzS*weDb)c=ZzLtYS$dxl4UWBmKp2yqkOX$KSo(D;#788{EOepX|!6K3j)9AxlKYH(>8@N)g zK_q!0?$yy$RS-2*6*yoS<`}$~fv)SgE0+U{ehx?O#O!uDXlZR+UStB#*6I!L;$qG= zye$s=UxB8oLOQEhpTm(Ww2bFk)m@1suROaf=ZFIy6FReC-Ao{ojF#38{JdV4)tQfr zfu|xO=z2_}?|a_*Z&<50eCs@0ZD8J0L7rG>z%a*=h&y%GdCPU9cQ~A%orDtq`uSa% e-}UG}Z2kbcnwzFm^T$^J0000Px$P)S5VR9J=Wl(A}qKp4mWin~M1Ac2s@8-zQ-N9d5a^hruPmG(Va`VfToNgizZ1fyl|{_xp?A9bmCoEdL!x_wXz`7XXm5_~3?b z#XA6Cl`pluyLerx6i0*{EC+yy5PYoH03f;_pbMu0Na^F#^B}P)j4s?NU#e&B(QE_x z9RbFZnb=o&OxiwoJei3w@K5PS82BoLODRRwY`W z5IQVLL=aBVR2#^W|F!D=8H_F zFE}^OPF(_~e#$olmL%f(=2oyIIqBJ9u~_~tUk15)*X}!khX4Qo07*qoM6N<$g8XW@ AssI20 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9555b7b10dd53d7d7828ab744617f4a7fa96c0 GIT binary patch literal 513 zcmV+c0{;DpP)4ZcKoH$R?j9P&D2Nw(5E9T&P(&|&iRi~DeuUsb z@X{*w6NEP4p~DS$|CZtvKCL464l zmk5y8meT`;3s~LUj#+^K-yrC6A6Q5nd!ahsXuATdj(h^dF?&-Wo4> zd~~QS`u5)cl|wMr=+Jn4(%ut-dknl>06vglTZljqXmk|Q~de(H0$fW>)WQdASpr1$aofU?K{~`GSYpu>bA<%6G00000NkvXXu0mjf DpsM2i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c8e710cc3856c80e2f9a542777f40706abae7 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^+5I z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYtYCJN1q%f{X*ky@{BQbmaRa^%W`}9PhXqqC z6}Inq@&DZ0YRPYJZ=8AY7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaada839480a2587c610228630908f812788594 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}vpiiKLn2y} z6C_?X2+m$Gx&3{8&ZGQ!_DLtsoo)WS+;83y1trb)s}E|e&5})LYp|c0WBh%8#|DFC z%=h-CI*7SHSMFZETt)aPgIG?}_WZj^2?4>%8hzoi6B{}+rt`bfQ~>}0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..1ede687689c3957ddd31415929ee9cd33825da05 GIT binary patch literal 398 zcmV;90df9`P)Px$NJ&INR9J=WmBC8GKoEw%mY|4A(==AWB7%k9gi;R$4?zz;hQ6dH4?+)uhf1a3 zL5Lus(i#(zphW_~dQhQjlWHMt1^2t{&hGp_!_F*7Boc|_zmpkW932{i;#L{kGE*1& z%6oR+5HywVhw_CS*QYnB8>m!kKpAKV``Of$CS>jgl%#;4jZza)-x6i!Ujb=g#DM1p zQxQtaE4&WdGO1K+9Go0a#l&svYP^A->r-?C+N~x#OA2?d5xdnr@`W6o3vqyWen6>i z(79}oS93zFv~S?WXki~O zgzj_1M#6YcZqT8s^xP&|LM)DUs|gT$XJP|d*pJ=Ubrr%s=<2WU#PRpqaMlQa^V;V2 s0AM|QNnPl1aRq>Px$-$_J4R9J=Wl;2C+P!z{MmQulAYiTLfYJAa`mFR+f7g3Ng+5Q9fmkHb0Uoa3E zDB{~5CMD?{jQL__YAH9gl_}_C^&zD7Hc4YEs1Nx(CHI_r&iCAN?}3Pjh=?a<=BD17sCQrC$Ir{d$#h zsf?lPl26=kvLYFM*2$H zOU%#uB{zu)#F^=7K}-^$6)6ZFq@a3Vz0Z=UG0hGynu_5vA|2{I|sh*?9oh203gP@W{s(r+`_3BTUY z9B^Mk-EN|4YH-3ZO6B$-3gX_Q__|_A8`U>&+u!BwFOn@Wl?MhG#s4iQNzLjct5_B* z?>9NH8*MwluhJn|WsaJ8j1Z0XdMux3SzBWN<0nrnKO_M^gz%h*J3P9TXDU`Jr7dy# z&64*C!SdQ_>($0PK7ZJf_Jj)P#?bYlTsql;Igib)`fl|ub-PK;JPykpE&!Z9R_*V; nwu9Y0-*uzp?;jBn@hrIoG_b(&dtM&&00000NkvXXu0mjfY?1?6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c59bb7ae2081c3fce22cc26558f576cb59d12d98 GIT binary patch literal 644 zcmV-~0(Bl(j0hvTj$lq?&Vd)p2+8()GbVEOT*Y&hK1yTmk-Ab$~iR9iR@t z0gQ}}zGLg?@z7X`N5R!)t@-doD$SjR3LhRem;(eRz#s6#O*Fe$b~)iIax&Ytu1@Or z&CNh06hQ!PjbRFoj?M~DZ5e8t`v)pEtX^MH8-5fZmPlp+JRZZf96&gCLLB2=N}kidC9AXil<}+y&`Zb9XGg z+)%L=j-RdO9>9u4$ti_^Y8Er7T|{Qmr9evq3PYBRo>TuNCUP77^Naa@WMiHCt*O^d zZShqc+}paE>=ps+ zxiPa0a$4cmX7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5c44ebd1f3d049157173949c39b54ae700dbb89e GIT binary patch literal 347 zcmV-h0i^zkP)Px$6-h)vR9J;$U>IP)h|GyeNdEuo(H#^8&mP}oFtGM!Ko@7{=7Y0;e*J`Du$Y_* z!-b<;8Kh*@QN)%kn2Ta33o=Jgn4dvV*cinibwgu@_isNks2ie+69Vtweq?a;iz28F z#R2c%eq=bXZ7qYqKZLM>k3Yk!M|T)5Y`F>-`@r;v!O+~6K|xKG;lZuj4ChZCM$yB- zz`!7-r_I2?pu%ur%SN~!2d`lK4!{Or1|S20e=H35j~{2afBZOvkHwg0m##8AyL1&p z933zbR6%1f>HrJ}XzA$F#3EegVoih}nEp`R0a7@`apnT_Y()vc=OGkZkV`IFgu;cR tTd8j5C>RB!U=)mkQ7{Td!6+E|003vWPwQ5NV~+p;002ovPDHLkV1gBrki-B0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..ade5f8427e31945b0bb3fcdeef4f0a49f3c4da10 GIT binary patch literal 700 zcmV;t0z>_YP)Px%c1c7*R9J=WmO)PwK^TS~wybn^X%sER12wqVLX1YBTr~U;4`Mue^&gqw!8;yI zOz=YVQjo+%h=fg(RU=EGCD`4??G_KPla>;83)PE#FP-UrGw(CseA|A|Q%^nh^uMd` z5^D>m<}3dKK$^}>-!1ml4gfgPQ>=daGJ6r2{!WYw`D`&XoO?7!tyaTxeuXg-XyvOF z!bF0^$v~ly&lU&86-FoSwLG{nJOaS(&UVZ98*8i0Am>6v0Tc@PY%w!74#1}QEe0>- zj8OpW(pDrye7A&q=tu4yrv{!FhOsbl=N9(Ki6*CJfc6^rSp3|w&@|0?;MIAX$H~AtAkEVv z!N%I^$!8#gDs`1?stuVTcm=-iWBshid06$~iS?v{5Sn}*)<@R>0J1lS zTIS8Cu6Yfa6-_$^>1qvxss{-)O+yF`J*h}TJ*l+(AEZSB+l{wpEC5wi*{klOdR18i zVFu2sfxmJEjqQ>g@9u1)Cl!Vp4uH%?sMBx9r2%~3r|br8uUXj*$cW<_X#Sn}9t?IB zV8ybmS=)u3@&T%Px$Ye_^wR9J=Wlg&%Qa2$spwOKNESZNDt2ZJew5VnF|q+5snk^a3P0uSAS=(4Os zWVr}pQJFP+(?W_mr0bPj1rhXnE@Qua_WeA3*+3u=2>v^PAG~Y6xnKJY0k3oQ<{TH<_bWt8rVuZe={7wUX14X)EGKz%-M(6^(=$NM$J6 zHfh6Pej)!VG(9omJp-&4BA-fx{FG14%(8oM$f@g+HVl?m3&djzn%0l1sz@F86ifSz z4nGMJ?j$=lPOyGHcXW2S2ps)n1DsXL07R7-McXEkNTBzr&w)Obs8Xe9+i3A#%9Rsj zS@tv9pTNP+Ch1hhD|3#kILB20dkN{QL!`uItudci1}^Xv*}& zHQ;$e?)e4vvID@L+rV+!e*?ZYAW0I}Hw^${kr3M(h356%%T(_qbS1!^+we0|AP@)y bg1^HfSpIjjx0QM&00000NkvXXu0mjfPqV)~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c197616dee93a0c7f24ae2e5846e7a588db172c3 GIT binary patch literal 736 zcmV<60w4W}P)Px%nn^@KR9J=WmS0cPP#A|Fx)s)Tix&5XM3%tJKnw<9GZ7`;dEpoF>zNo6F1#}_ z-VF4@IAvzR6oIj^4Pos<*WpF!VPix(nBK78%}&?1=Y7uG-#L9@sG)`$>ZWVt8qa3V zU9bHQ0FiWQ@j-5+aR|VP7GeF<*X&hbg8d}U%p`MO!j-2hG#U+>=8+d8fYvq)59U%3 zKLDA`OfnZ%Mwy(QCtoNqmrnEg&1zTB^W`OR56E?Z{1qbLC;77%FZr>xO{H38E}iE6 z$8}=S2#Lg9bX`XdI^;Kgl3j2C869Ks@e?Go{%U9c_gi4+Iu&5QTmm2*iIOiAn4X>{ zIia5gOz4CoHS&c5iCCOcc@Is~{7mf+VC(xA=4R(bGGn)fv0DQ`3rQmGwEU#gGkkcr z+B45Z^0Nyv$z(E@8XpyZOrFBri6wxu3RUX|m?Z;%V)YoqxZDH2Dj>@;N7gX_Q6<2) z&+DhZj)T z6E*B6s#p%DY0_x6d*W)X0los;w#BxCGuL}7)bRRs>wdzK*Evllb zF33PV;Hl*VP*oL0QN;nIs_xjU3b-cRv;58J3qY1-s`UfpW?gu|tH4Db_$RNRUD_1m z{c;H{BoS+yK=*MB^z4pn1K74r#d3PKS;caQE3OAR&xv17c%T4lhGAs)EGSnFk!9Ka zIY41+r~6aU*7@fuO$=hSSppuT@+9(7W;0?uG*BIZ%F$}+NnP}0t0K8 SPM^L20000Px$rAb6VR9J=WmC=ltR%0O}l@?Um)rXCu^#2}+z6fJWr(MgY z^NM6Eb4JpdOhwkl2bXAv_;l3=^Lx1uj=THu-FM$XMn*5l75=$u? zz|LP2Xw}QH{ooPdrxAyJ$#C=)fP78|u-$gAe|gQEN`c9E%wTZLVP9ehlk(~v)*JU} zZZrWTK)qHKzplBWQUG8vpX2?9Q=-r(3gOiE8E$uIJzfWh-F8o_*Q&y8_d-ydfoCt@ zrdMhRlZxYD2$OtH=jrno*rgKnS~X4%S1tgszw1(Q900tN0Bfa?O1Q5MxVgMMRjA4Z zg7bNf4)!Q68B-EJnXY@~0#ZsX`tpr8-44YigX{Vn-bp~kagx`Nj!z!0E-3E<36^EW z_io+5yj^1OF#_Q8SwKz*g3%D|EM(`krzy`sg6DbK=2o}iAHQQ|@fuO+GntGDMnjq# zO^mAxzzm+@Wj43ET5D|_7j!)^geaKByXu6L0?7oB8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00IL^L_t(oh3%A4YuZp4 zhMx?>uv1tiGh+-(*U=6ng|?TY6usH+>HiS=8~ho&krvryyBcq1Z-$i_VzmytwMs(I zF4U0dNi3V~&GOzP=lj0*d*AaV=Rk}YF=E8{-=X*yg+f782Y=N^6U)1KYPDKGGq6bP zCB$Lz@X-t$RgQ2^-Jqtduu`dD7{=0s>-9RtVo{ot8UU~?YiS0e;2F?$UG(T-7zX8X zd8s0;R%<-bN{9hn*M)7{O5$xo_(@Lz=_e?aN>3sVlT$FA!2bS6(QIA+N!H>dXibi3V1t_*>naQZ&{ zHIfzss9VlNR7Kr#a2l!?qZ`eQG+^7dvbp(Q0I1JHPp6ktw*|MR%F4Fzw~6G28nA6! z@lU`Rxi}3qC_LGvGjhkz$qx>Z@ha>l2GK(B$9kK)Q8HIUzVEiJw{9)#u=OY;3%niz~B%Z1$Dd-Q5Wl`4^m>eWla6ioS?Coh#*s)e^Ju zWnfkuBs3G4BALvIgM$wMoSb~)?(QvB$V%=+=d^TEAk>Q7r6`F?Pp%5PCL zaQS)n*vXcHdyTfj$GqD=YA^H_Oq#JSR!vl?R^d$mivtUrc1bduaKS!KvADDlMI{|3 zoddn|jb=N{PT0cql>6uGudH)@E%qEZ6uaR=5GVh^L*3k*Pvtqp;tXawyu7LUK6F92 qc;rfl%-Ey)Ih#4B%-Vb2C4X+G)#O5(IuD?G89ZJ6T-G@yGywoZfQ$10 diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png index 1c11bc8942e213b6ce32fb8445d789012b086eb7..4e3de205d81cb10c8d16b708178a85a54108c394 100644 GIT binary patch delta 256 zcmV+b0ssDn0+9lc8Gi-<0047(dh`GQ00DDSM?wIu&K&6g007HLL_t(og=1hC1*2dT zjDk@xz}^1gkyk|Nme9<5Ej8VB}$B_+QW0lhP@$1+r!j?4vV^Uz_5X(tA2Bd6Ffa%S38E-`_wGH>_TbVhFE7V%`0!EO z*$`P$NJtQ+KzQ`%G0_DPF1?Q)Jto$OQ7{Td!6+C7^aB9%sW{eBv+H~S0000%CO0>}iA8Gi-<0047(dh`GQ010qNS#tmY4#WTe4#WYKD-Ig~00H_*L_t(| zob6UyO9DX@J}bL~(b8?R5-Q4Qiy{n>kRI%<-_YOc-}L4ZJw<93-Jl{P1@jVGTCBM3 zjLzcF%w8bvWxto5Ip6ut`DS*QT@n5nz5(BWZ@@R;8{isUQQ}U~e-4siO=YPfbly ziPft6*Td5$mVb8P1Wx$|h$4j~zT zeSE|G-Z+(rVhEC|_nJz0tlvpi49fOeTLb72s_GgxA&u}q5rmV>+qRjLU=-iF;xFDU zMAE!}2lVeYUK!Q6w@Sp}XK&@mgtY?>TCM?NLY8GimVd|0oA47rp%cFME}X<&0_j+uO)s&hFf9&xS=nBQ)w zb;8W#=UjoyIq`^#L{{t#JUl$&!?+RNViw`W-SCJ@r!)2j5YSchoYuYWeT6x#MWL~t~TLXzS4Gb~{5AdS>0h@~LgG8O0WdHyG07*qo IM6N<$g87UJDgXcg delta 364 zcmX@X@`q`HWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$h5fKQ04 zyq=Uzgpps7qmMts;e8C^;^J{Veg+15a&ofD%1SOSPTKY=VFfl~Vxk@%Zo2xKwzk$l zt+&N~h65>~k|4j}|7f88Kf|N_`-OngoCO|{#S9F5he4R}c>anMpx{PN7sn6_|F``Y z`I;4YTp15`NzeZKe|~JHw`=Oh)c)NU=iDm@I{MJ}U(*xwrqw^01owR38h5cpfaxn^ z$c&_(U=HRlO!ny=6YkiY*E_}-;qhtmpNGa(jeoRf1u!3o5Nk6_75(HDzDOe{Vl#&( z^V-D??6Y3v#G%YR&IDF%!@j10dI{zkEr1)1~z%YOz3Q)8Mr z;K1p#7-B5w0-s)gVc-(rq`KwbK77Y2&O~*aNCcw}z(@lO3_rNzi{=in<+Eit{NOOn zEYtp@&2W+7BF)Sn1*2dTjDk@x3P!;w7zJbj05gUon@onGtN;K207*qoM6N<$f;LH1 ADgXcg delta 216 zcmcc4_>ysgWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g{fKQ04 zsER;HlZ#7+xsjiSxw$z|xGw)eFOXs@3Gxg64+0FE_b=HG6yYrJh%9Dc;5!V$jK}j= zqyPo|JY5_^Ed1Y|x8`eb;BXE6a4_)Sb{&=;tNW*pG~J${n9k*4ZmE!O#ALA9{&!(x z@+IB}@wYxOv^Z}2C(Q6^UAUW&$GxknoYO=*xLoElUlsmQD&W1QeE$}p(F~rhelF{r G5}E*#AWP=} diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png index cad0a0f18a1620abb893a548f6f3c51a8a369033..06b25dfb7e6121894a0b3b123544956915e7e1b5 100644 GIT binary patch delta 677 zcmV;W0$Tl!0ySS*Shde(Iv{r>3TmJBQ|E{Np(Rt}vPCqmq69SZL5(<~a5ePl8juX*B; zjRC&H-X1_vqMng%_n7l@Xf*akF4a4z9EwE+8lZFF6n~yW|MVR3Rhs=oE}s%S#ROmA zTggYZ7v(X=M^(fK=JRjJJx(Exl+?u4`oS|mhpnbCB zSSW6DcLxaU{6efuYJ9m$;>38lax&p^leB>bToe2q*_xK%H{lN;BPaIT@EVJGrt8Eg zZ*RfN8-J%Y3^UlkFgm8?>y~dgOxAQJQZ38l$7%iGYhd-^ZQtaNRV$F2#1j|F0RQhs zXQ2Bgf36#W+$5g3<>h~gs%=C#@f^m@(EpJdZ$18)ry)gEfF-DgaJX|%rpxUw2LqIDI300000 LNkvXXu0mjf20Te5 delta 253 zcmdnQ+Q&3OvYwfNfx%@-*D)Z)SRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$Jz$e5t zBRxGJARsXzp{AlDKR>^*p&>jZ#KFPA#mT9!t1CD-c=F`QK(%%s-28zQZ%L3}@P8!0 zVEaO;4Jg4`;1OBOz`%EyfuW4=Fyrz36)8Z`a8DP<5DWjeeU5w$3Op?3xvU5O{olJy zQ%%OhrXtmE_R9$jzZ2L`@=Yo=xLM9*aDknl!zJYF8D|Tz@RX&+6MdI_t+Q66@ zM?}XCK~R^DojMd5k;mu|WEd(z9ilF3^g~D!vKADAz?@y)x-&bw+gMl!zn9&8JMa5G zGjC>DJN&U401bfu2QcFAE#tj^ut&b;rBAqj%G6YV=aIO$vl#;Pba}z;w95%7DOXU9 zM8xwTu?m11|8WcE7MEaeYqjQl9RMMfa>~8i=~m*WBi(bq3eFN3xn`EVbNqQfUaf1V1SYF!zpKp|UN5I0NZ7PO-v!3yC=zO0FtuLBCCL7d2Jwm zk1tgS%MX!gaTY{78J=_iyabGifEX2KJ4eF@>_gmfosJFfV8W9gEjB;K;00000NkvXXu0mjf DFop-C literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fd123bcf2b8fc8fe40fa0e12c9653e160712da GIT binary patch literal 632 zcmV-;0*C#HP)p@+}F#4 zKSoYKPQd>Y&=Rispn15V+8*Q9J6ztxvI@X)>>phCi~_1FLlE%i*$xEj{>dTo0*(W1 zNdb=i+a(wn9)X3K@vQwd0jSivPt61VfMY+8#=&1+DxGcZ?1EVA8tR%lVRv&~;vlFT zt^zQ~?)I@gudPozpG1@Oi^_d~=NjrmFgh^>&CPAn9tvBD%t|)m>o4#4h%9gUSOH#v z!UlW#93dEZdv)&1{y+8%Nyz-lB9s*s*tWQ3NoUAjR+K>i)(>x^qP4wITKDu1!QEX9 z))tqbyRR35!H}Ku>B%u;53KH;YP@U@sLwD(Bp;lIG`93M5W*|p!%z8 z*B)?t1*X8FkEb5UR05TlgDLfBVRQlIiimFXI3GmgfZgHa-D6lpDL1 S*Z*b!0000IqP)U;Q4k*?2(;A|k_@Fp3W8375=G!42s(9(pmQIh zPtb?x97MNHK@cPqWkFq{4vLj%Sr-1;6oSBE1lnI{gx zKVu+ZAfW#Q%*UfmV#jAA>RKvP;i*z~lz_*Py3V>x1w>>&1VTP2)qXUe(r9W#BH(eL zkQ5cubqhAOwqbvF$MJci0LcT{bVW4-URiUaPZ}H1g)StPA)n8|)La5Ck|&y9dHd3A zI}W1&r4G?)Syw&;`VdR2n-C69==ShE7F$$p6m)j9r`kLYY=N}^8xV3<2%T621_3yL zqmsMz0DLG7&5u4BBsnHV8y_}?%Mr2>fPKnBdj?3^5f6o$E^elkxLC}?@xdXitgk^Z z7}jFw8K60?ZeG}QMgfxBWw?fjfL9+%%8dy!w@JuQF=X(%o&i!)QV}Px<1n28fQGJQ zY=1ighr@0LPS5Y5R{hrbyuM-hycDZKz0w{&n(Hq8sB&2f@W^g$eSI#g2Z&Du^cfT} zKIvCQv0MfLBq@EEdI}PQI|EK`0UeKALNj310+yTyyPkK{0^Z8*i-Ns=rUF{! jaX}B!e}Bsd0(y;Ka`y{nQS!$T00000NkvXXu0mjfqt)}D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json new file mode 100644 index 00000000000..cecaa5ed225 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wood_crate" + }, + { + "name": "plain_crate" + }, + { + "name": "plain_crate-1" + }, + { + "name": "plain_crate-2" + }, + { + "name": "plain_crate-3" + }, + { + "name": "army_crate" + }, + { + "name": "army_crate-1" + }, + { + "name": "army_crate-2" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png new file mode 100644 index 0000000000000000000000000000000000000000..19aeff684c28fb5d7454242d43e172d0d2b54113 GIT binary patch literal 533 zcmV+w0_y#VP)SY z@T`J@kb__kMT(I06s(O6wIV|8Bu?C&Oww)@n?qh`H{I;K^X$$n)DR0+4v+(63*fl9 zGsfrL?e$(^Z@FF7}aUS7ZTUnQ_5&&s$5I&d8 zwP@b9pT%m$oXHS8P}E~803^Ax9)jn3{U^Bf*qwZLW5JEB4P~92R4#$+cUCzZpI=-@ zeekOi02q7#WWP}peSf6w@h3fiAg3n>(cIAUl{L%d;`f*W0QH02P#rb*1YIW!`=jgl zi9K*@by)aV5728E8X4rbT6gXp^}uT=*FOdz3y;he^J^9l1psy$293mh%ZVB3iSvjz zsRD3w*AcJ2+B{3;vUq#{&`SN{g^6S@Xj1S>1z0hQ(fH)JK>*I_NR9!B%~~~p;=B|9 zOezQCE;xEl^aQDYDgctw-#Vv&Yq>IjpY8UO0jPA7QxJJGNm2l~0G!hSNlMJkD*$j@ zvguGv)&30%lLZ-p=M1 z?zc8p^7SSC6mgPF6hOyudO4^W1+>FZH2r$+fOvRLOClHOI11aKw9j4(08wi=2+%p8%|(bQFt;lLpj>p->dcX UQt{la2mk;807*qoM6N<$g6lr&i2wiq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png new file mode 100644 index 0000000000000000000000000000000000000000..40e261ef695c4df07b1dc4b87e3586c3c5d43f34 GIT binary patch literal 559 zcmV+~0?_@5P)Lrsb`V{2e*V6zO|)XsltUag$S@w@jU zJl|hRoYT0iw-QzZ#e80*ouu4A`1tAtLUF)pOu3f!-e#o$aNTz~rk$L|9ql`j1aVtJ z6pc9prBY4{A8}DZhjJPw#~N5QGy^EWgG_4j5u)2420Xa9;5CMG?`Z~*CwDei!`}A# z+9oy6fSOyiW!3I!G(Fa+W&lEF8v@|;XM0Ulo&Vlf5xWK`?5#d3-3j>Sb32${oE79q?{#|9gH$cN53NuGhfXROUp-%L zAP$GChpHg{x^_7&Q04muCd$RUG(}og19YgmnQj3dA2UJ(tTmqAtm~v7YJi-Y&xPZx z_4a_80=gxa2I#qd*KWXsEo^is^*{G>jeY86Y|spF8^Cp#>P1A##j(|RR9-WHaG5m# z;I>zlQ#rq@KgtmWhn$-Ts{w8;v<9dPklVq?mz_YNN40b5Q8{SEssURH0?gVAW;iU$ xd88C@qq!azT>G&GCgDkl6=SphkZcXC1AoC06yC4%yTbqg002ovPDHLkV1oU?^ezAZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png new file mode 100644 index 0000000000000000000000000000000000000000..5f45c1ec8b4bfd937fc0afa41bf4b37a777f0b2c GIT binary patch literal 473 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 N002ovPDHLkV1fbphoAre literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a141d00a720c56fb9ef0593d927ba041bd95818a GIT binary patch literal 349 zcmV-j0iyniP)Px$7fD1xR9J=WmAy*CP#8c@MOqqYEpCRiS`=DE1P9-tbdl$^n!FMsd%!+(QrqcgzUy{RXtvt?e18EIjo^?V*pkE% z>(xg+0s!7(xqq%jU~qAcWp(5PEUU9mT!zRc)Z|@8f8(Q6i0$-cN3i}}HL^;GkDyG# vTm0^WN(8bbDlL#Daaf?TRjeg|KYzm=IBb%_O`%l500000NkvXXu0mjf%U+Uz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..be8c7964677d0de262245ab0f0dcb143c0a17bd4 GIT binary patch literal 289 zcmV++0p9+JP)Px#+et)0R9J=Wl(7neP!xuLBPa(!C8$SeXm@Cn9zp04uA6H^FCi{9<%5Jz(cs|d zs9d2zE(o_t2)vC)8qPNz&hmf!91g%R48t)0OqOMuI%8>CCP|{}x~9$s04z*P$F^|{ z0#sE+E-+~z7D6{tk_V3%8`yXreBYl%VA6n63XPO_l_hrDExEv?fk&QOvTXqXtMz(* zfp5|@wPqKHh0tmk&~+WImkaqHmPx$X-PyuR9J;$WWWJZ5@P?u*rL*kC~~i#-p8d44(2Ra%t%lX0|NtAML`}e|AizZ z;e2!l5Cd+WJ;tzZ#~y-?V8JIzj>Ry`i3Ln#*+4~r*8#-DHM;uOPwz7zM;}EFATomgEI}hd-0rPN5Dc1rk5fI2uVni6#_6otRrwn0l7JVRJ{Y93vfmOsX2hE4iJ)% zWO(=DIm6?ZZ^$xKR$PSP#KjxrJK)iyM{xGj7o<5tT7r1X85r=Sfh*VVl4LPDu+Z0_ z%mLC8A`I_8{Uq69m>y!IZ@_Z_P6r4I@(-*7C`|*z0-WUlEDcCYh>&C;sp)1k4Gef1 zz*`Q`1K>=A??3%y5aeSgBPu>JeEas9atFXH=V4=IIC1d?0~Z%BgCHL}0|Nu3e!#}p zQPx$pGibPR9J=Wl(B2uKop0+mPj5dES?Egg7F#bdMKvOlC{vkyFxOo?TGY_kQsPY22ZB4^>D^Cy@AsghqN1YWf9KU>fw#SPzdnAr#Cg*w zl*p{(d>w{2i1>W^JbE<$mXm$K_ya0iG{F z>b24WzCZjV%?tp;ev5CjFHaW$cMe_k&r-f68O>vq~wnz9}vGU2{icwdG`bN4L{N zWY_yjDZ&Mnr4*jKM8y8) zt>2@_4k;0zcHkV>hI+L@#ICm&DW&p#8tqQV7wG}db#^X@qQhgktPS@HxDLM-PE=7* b@l<{TRi?P7{T6z500000NkvXXu0mjf(F^3d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e6a362cbaa675591d13384088555aadc73c303 GIT binary patch literal 387 zcmV-}0et?6P)Px$JxN4CR9J=WmN84iP!xr~h*GFns031tokS1>U0nr1ada0P{C&<24uVSu2MbC% z7(r5-L_!O#25N^mNJ?6h=yG2MbH@ANy^nj(Jv=B?s#K}}E=}Uni}SOn@3{b6UR~$D zu^<7^_gq@-4#wsVr^knpa)4I51Hj~?|0{$D0Kop<_Mafc031Ic_JM8PXF`Yp#1J>P zcRW~jW+y}e0P3|$?l{B&V0Iky5F$CSzP1sW4gE)bFdP$xBTkMESXy4iw;$C405py7 zy5k1`EJ^_6$?=0}C(MSf#sl-(-7<+gR0zQP=Y+vYIe=<)g;y`g zJWqN+WDA~bD_-x^b&NewuT^A6&~v+5UME0-2ht#t9uP^wG$qrqY3S1=R0fcQNG74u hDDJsk4Vd{4d;wmYl;oVvvs3^8002ovPDHLkV1jj3oPhuU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..be8c7964677d0de262245ab0f0dcb143c0a17bd4 GIT binary patch literal 289 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 a)WMzaThoj7t~s>a(Ev6i;$UrX673(0EVIV| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png new file mode 100644 index 0000000000000000000000000000000000000000..b2aacd3c56706685ead88cc0afd4c918e527de14 GIT binary patch literal 626 zcmV-&0*(ENP)Px%EJ;K`RCt{2+A(X}Koke?e@i|n5CX9)K_k@NoZ#pFgfp z7CE#|Q5HE4*WWZ4v2rwF6KbyH5b9|20OuB*C6wO9f`Cm;C4 zc>sVm2zDUmzyElf3q*2&8SZuve6=U>&~~`DU))RqUx`csdl?*!Cn$^D`#=y85fKp) z5fQx`qScxt88%v{oqJ}3bT+&5qEaNXCunG$BFmi1;u&2Yzz?ian z{Q01BKg*_~qeL_Sp;B#q&~eJL8s%kESrkHpJ)ykjVGP5xLFSE6(C85&9=^0i=}u)Njw9eonNf21orZG zc7D;^-dwNc2XoLOR0_Z5^S7A;fd4xiv?)27gBF|qN4O-u48F!bH( M07*qoM6N<$f;rO@w*UYD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png new file mode 100644 index 0000000000000000000000000000000000000000..c53f7e21a50a5594a4f84a2d5eda0233163646ac GIT binary patch literal 1015 zcmVPx&u}MThRCt{2T0L&tFcf|%atH&OBnS`<^ax#Q!;9c6cnLCf$YDAcT{;(C3@<^P zB}WJ#3LvaWfVTJs?T|i&l1Yk`o~#7sHyM;nK7Q|?6o7}vMdL~}_?fZ4)C)axu3T$s zTpfT`gLPz?qlBVB}gK1yiofGLFzLI!2wmNvWQ1K28`DG4YG4$D^Bi@6_z;P!=45kO7OM!E1AIFj|w=1yn-qAD=qkTYUX8SbKRU$Sjb>kx>EG z1mNa_*-ZORSyixqe1Z*u`Eo&LfhJfJ5X@$f%wxzi0cBMwpW{0epbUa07@MK8;E-nm z7U}v;FvaF^TxT79njv%}Qyj3h5>q#7v;fyOmI}!{1{O!~aKAJ9Z!(Wzxk};Te%DBy z_#2gHQh>1%{C0QO(7r9GqIaH&hD)`7=b1RM0?Zz^f!JsPI5~?WDE}{LLRnR$t!y%n z>y5mn#T@_uELSPy*>|JdHnKSN0?9nq`Z)Y9t1#egsizDMasIa!&U2AKbAvB?(X5BX^;{O)ux)BTk zUP*1INLgkVXe&WoH^#*Qe*OG$GQPRFRlXmDuK|ndSiC(ho4g8Lq*&DfD#+;&%VWw0 z2D?En4vk_AT?(tfE_5ltDGeevH@AKM<^-8ctN~;#2O%RNTuH$1Kieza5z-XEjoPGQ z4-XF~)K|vTSJKqq1B@kKBM1&DdN45Ac42)Wm$ySoY+1gVfT0zid>R7)&V^4GaPt(s zg?vI(p9fHCZHzQUIj6i=e>pm}08_&gfIrT8nlm-zz19R=QhhD&^;-9!FXW>%YK$>= zgMgtI8eAO6KW;$Co2QTyQ4>%WoJ?@j7a2q5l+XOBFiIih`a#6G=Tw%$0JMRSx)dG@ z$`hf!Z1=fHwT0XW4VBN>4B_OibwQp9*zdNZk^n#>pWFM7i(@NZpmHa$2c>0sFRnVb-x7J07R0l6PsEb?lipGoBeIGc$5b1elS- zNx;jh`m4Rr@73zS3=m!qc>dy8ZISi$P15*24d5g|Q+dv}6(IQ;Erbj($UUG>0}PUY zJ~0tsMvjR9*UkA+Wj24(cI^-_pD~wai12#Az0i+?J`La`0E;h9&&*?@F9SFUK;bYy zx>Z}`YMJK#FaQXsj-O?(y}G##dQV_^!Zo zW^;E}UrXRV#+@s;FD%ywq6wg~QhAh^u$FyK1Dcy)2*G9uLO{Wjvp4m9DC<%_gf7hx z!zi>5#Cl2RX2^aJLe01LQk3rk%n!wXd|w9R7vr#3V4O^yyr%IwH$(3)E*dQRl$Y)g z;d5gc&#wj9a&38SXDgXKV$LCg1W*Y~xY;fUYcL!n0Wu^sTUpG-Q24Lda`!(hzrOw$ zlsiV2q+S5ZGe>`TNK?$S(prmCqk?-2S9MyXSGYWrpnR06EhQ&6L!6xPCS9@wxQ;An ze8mlokdi^-)1Y9|zLsQ^BEp6*zU_UZ4PFB1N&pxSr6c|Z*T-1to+a|RZ%&3NAoq_D zqPxMayL#8o4$nw$+HJ&vd1x?O?zXkP&5%}Xryhyh&%vs^=3j1%QZ^}b3cQt|uN#9W zeEIyTasT}7JLh=hX;?w)SlqrZUEYN@Qljbr7i1&Enn1IGS%@^t+GDrwLrAd-Y(tv? zI-Lo^+NB}MWMwI>3?eiLcM|aR+vUNK&hV(HtO~U-$W!4y4KPRo`ou&4FSK7tYkv<= zO1?c0$SHcbF|i9P0a@PWl-N?fnty~O;G!l^pGJp=~?rKJjkOoZIqaMkAU3Q(dgPrd6HCKLr$V5Kpu7H zqEsC~`7{YGQV6Af5D`14mVDkqNGrZd^#Uc}tOL4QP@dhD01cEYU$7bCeG_1#lzjgH`q6~9<+&t* P00000NkvXXu0mjfh*ibJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae719968cf7cec3a657bca85cfb0b8ba068d5b0 GIT binary patch literal 1183 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|QH- zr;B4q#hkZuW4)yvC0f;w9h-Ed=H?Nlh$W&?dsYN|JoLZ*B6ntY)1?62ZHtzKZCPqK z>+G?&=T5cd8aSmbf3Gs{bA{lw*@x5S&ArQVZg!;Wf`tqZ0vHN37%W5>WVjgkSQ*-x z8k`vqU=vPOIq>L{*Mj)@=C3Xmo`1jk@7#V#)gw!uoSD$*z8d`5Pt!jO! zuC9AEFTOQA!QazJ^XJ-Yl^XHUckkTkcsBjn^TU5WJ@{j6{On$@uEWBB4!?g+@s)`? zOoXS(>+PHTCrk6p|JjQd=B;_?&X^riU*L-M-g9IWj->+Ov7_q|AC!)5*TC zeZ$uSXQ>rThC&HD=G#r5U2G(uu<>3;-|jf`Ro$LXchBoLn6qARHow8D`R~%~93o?1 zP0O3Hes_~l=|;~P{RQ#+ZqzW`J+gL+_O)Lx)uuf2o>;T?+WCx+wfDu(t`A!k`0wUT z*D3d3p15|T{qtXu&w^*3F-N>vKKtqYw>EQMXFpqhB*V_ZaKGr+%agPx%cu7P-RCt{2o3U!+KoExignIy|6KrL(pcVKL+*rpo#!bk3qzHM8kitdY;<(17 zbecRuKoW>cCD`ur2D(BT-CD8<1dX+4%~x5nz&ro0c4lYBz{t56dH|YH9!g#e0e@$q`1n5#ekFxVc`JWccoR3jipr1pufZ006wD>BZR!(B^6~ zDe1Ecf@T$54mqfypp^gsqZB{|0kR|qFhT*`_a6Yh4LX_=LWTqXj2{(OlSw%@ru_U# zK@bFCJoN4lkDb7L^}W3ZLWQ*`tc9wNog~Ctn)dxuy}%X;x(5z5HJF>c^l=rip9Qic zhtV^{t2OseeTm)$aAWTO0hSfe79q`lqj(?D9^fV*2|9oK2FnV_k{t1B-3a09>;nvO z0Oj7| z8n%Jl-rbi*&+xR_biQ-j)P{zwEoiyd|_>;M`vi*3L}SR-bYT> zBt?Q0)*@amj@AlquGf2gJlvjxU4ZuNt01Ve#oNxaWW1Uh7(J`+J_7(-U6EaYFw)q) zyf#9Fkv>=_pqL>`a%4%4U45Twid@xYHUZq3ca2w5gU#bZXEwt~H{QYBKd8}}3${(r zjsEERnDOp&uJMPi`-asOxh?CTMS%1Q95eXO#|O(;z3|0AC6>Eaw1wajz^i6y3YO^e zDey)B`YQ`i&3+i^s=&%Dgf{|^pO2Rd0Ko3$6+pdtGK%2M9zfjQ-Iu_=`{O)4dM5zT k^&UPZQUpN|1mO($3q7a^m^x7H7ytkO07*qoM6N<$f-pKi!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..f5588e0a1792b2dc27cbd48b85de42bf110fb68a GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfwaB7y|SFNr-z4`rm~12e`j6NvN=`n=K^IIuBzp108(5fL4Lvi zVSr)N8J+V$QO*L7$YKTtzQZ8Qcszea3Q%y5r;B5Vh5y=#+$7wP^Z&^g zoS(5ayq)*iB9-OI#hUu|19eVJ74H~du~qm4o|?HxWTtjNw&j!1XRJ3~b)1+Y#$;#w zs7J71nZsY}2RD4vI2On;&1&9$Evccn;LW~;GUpD)IydC4yIpcK=HwrXCv%RxXK>YE pn(!!KM$?HYJXx$xwhVjsGd_4M)tK%-X(`Yj44$rjF6*2UngEf0iB6YfWgb3@e@#(v%n*=n1O-sFbFdq&tH)O6x`?O;uvD#zjk6TU$X*F%k@6_r+?)u z!pjuWp8HIz?R2}Xe_*Qn?uX}_1pk$Z9XxY#l?>A@f2P)>p&pz0l{Z#IDHbwMxWW}- zF8JoyBhMG@x`O&dmTuU=wRKu&xS0Q;u<9co znL!^W3Z{n~n#lC`eN(cz*wTi5A{OlTzsGVLvLAmZeXEG?oea~C9eIyakBfK9x64fa t5zFBe#1!O{(iOm_!?Idor(jey=dGs<@_rxn)5$1w#jy>|s zXuq+oVz$t>X&*jMV>;9*@Zk>k!QO<zHo;HMJkpvni9IgDhO;_TPwi_5<1bmrj3-+kNWG+VbbbP0l+XkK4J?Uz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d79b683f982fbaaccd0a1b4d19498819ac2e1d GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpl>9V%xON^woPb^-VhKl9tV>vbVQ?KNl#&Ao9rY7m(sA3Gxg6 z4+9LF&gh&6igFfsL>4nJ@ErzW#^d=bQhboF<9#X&n= zwGv;m+dnVbxe1-RX!a*kq2YX=aEH)`Q@R;5x1_w_T`0ck>Ed~Uda|EF&5EuZyvO*q zu|Uv7EKHA>nrnxW%F2dr(NpxxbSez z&V|g%U!1&taGpB6>-oO>x1NPv$n`s<=_9FNut#8%VAOAh#3t#KM^}Oxf$n7RboFyt I=akR{06P(Ud;kCd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png new file mode 100644 index 0000000000000000000000000000000000000000..e1398fe96ba019cd94f9cc484bd4e4ada940b47d GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpl>9V%xON^woPb^-VhKl9tV>vbVQ?KNl#&Ao9rY7m(sA3Gxg6 z4+9LF&gh&6igFfsL>4nJ@ErzW#^d=bQh z_IWYOB)TllM_+x5NBrY9eQwqV7df3YMO{)kH|OXibGFQK=Ge}6aKW19Z>kIOop*3P zRQA$isZ$nl3iMo_5EpEq+|$J2?;?6Jy2RLMKhpil>5GVz#8b5O&fxIi0>&@s8D&_?sDl?AGjC z*bn($s0d0r__42GPScB-O&klwXJj7iDG;{OuhOwFa{Q%QcHWxf_0;kSyU!`jENI-( z%$F{2Sd!2Zw?fq3(ev8gZ-1|u^*7}e3;HFVVrhKXI-%L%n0VM8>Dc?1q9cG#W$<+M Kb6Mw<&;$TX@p&x( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png new file mode 100644 index 0000000000000000000000000000000000000000..d464a1094c5c42454d30ddee76a011f109d60508 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilo1AIbUfpnRWR0spZ@@$!&|9&n|3B$yE z<^Mp6wEYu89EvVUQ==U$HIGkRV6er>?XOMy zNr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6acfebacb69b3fd332e6c50571fbcf48e4e54b GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpnRWR0spZd`T4(NwLnlq-Are?CtH}&jrdbOq-i10HnA|g8YL2 z!vMpkGdkyiqMQXDk;M!Qe1}1p@p%4<6rkW-PZ!4!3;&~&0{L1DI9R7|6RG~st#6Va zJzopr0LKG*LjV8( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8f967c9dd188ccecd28c971ada43cf9b9d5d6a GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbUf%JhohUx%@_j4IEr5HNvl9tV>vbVPfiZ8H_+W@3EOM?7@|3d*o zuz!URNU*>ovY3H^?=T269?xHq0@C2=;uvD#zjdOc&=Ca=mhg!${>SfWmgEh4SatJ@ z>d6ZMu0OUg*NX`~Oh3-4nfhp|yMyJzln1>F#gBXn6mL7tvh#GCi}0HM1h&Jj4mKVe zA5^$o;Z8?GJCRPG#_!pMA>TakU?R{eQq5;OKSc!dMq%HZkh=d#Wz Gp$P!3@O6^_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png new file mode 100644 index 0000000000000000000000000000000000000000..430139d3382e020bbd6819e7549d1700d19ac168 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbUf%JhohUx%@_j4Kab}4PU8>1=3&{>zXY)+NEy**I2hUrcxkm4>0 z@(cbC2Mk{RjGutQoCO|{#S9F5he4R}c>anMpx_!$7sn6_|E&|fg^nn2u(EroRQ+c@ ze^|gi)FMx9@5WCVnw;}DJv`53`7ctEMM;g(f^8}Hks^ubl^o@ZxeslPNc>pvN}=Z- z+h!NpfNkOu0XB13j_`|cGr#9hiDP*vqWM)b=u?46NU-zO!=5{~6dr9-4C-Gx!S$2A zV*1sbV_pYpzeI3{?eFzCP_QHF-~qWlrp^CZHbj)){vLh%4%dw|a@^!t bTElooPVRR#+n4`9cQbgp`njxgN@xNAgv)*> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png new file mode 100644 index 0000000000000000000000000000000000000000..34f2c4373f2acb309017e8df307789f470d9cf5d GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbUf%JhohUx%@_j4IEr5HNvl9tV>vbVPfiZ8H_+W@3EOM?7@|3d*o zuz!URNU*>ovY3H^?=T269?xHq0u-F@>Eak-;eT|JBi~^I4wml52mkl)c#xN?^YGcF zRmGi~dOSHQzew-X5jgNxfzyRIC6#ltj7~CV&#eZ*JlRPHL)qV-J}|$nK=_h(fUZiN zvcTdOQ-V9zXu1fbIfkmO;xK=B>0~H3SxA6Oa5*t@G7s~>j%HZkh=d#Wz Gp$Pz)O?cP< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png new file mode 100644 index 0000000000000000000000000000000000000000..769a962390d23179f128a07bc666cede0f3ad2ec GIT binary patch literal 737 zcmV<70v`Q|P)Rkr13 zTMfXy^^`9DohxgU{g|f*H`lFoWQZCEJO^I_w>n2^0OE@w{!#xxqk%s{cT?sQZokcO zP-F&k3}Oo$4lWy?_2~f$r5}_`oS~Qzs8T=Vxk_E5&DDrC_8V8V)3XIOGE-HQfj}_G z5DiVEOUd&**Xs5t99Uq>K@ET4H!~o;f@V|#AP~`DpY{reL-Xh2F}5fNB&9%bWhFol zKmnG_||O+?3I<34vxr+U-)d z4Iw$}5eRh;1?G*}7=s`y(hGQc=XO*AfPnUf<6t%r5z2smKnYH?Wn53E2EgG1Nd^Gn z+y$8%mxsz=>w&EkI|AYv;Mz)rKGZZTm9AQlifv`|6wA+nfZN~lse1BJwax)fzGY$|*SIxqwz z8Eq>NglJJ?#|CK)#$iiXB-liwMAoqH$d(w)0$-B(aOO-qJ$C#vKkoC~d(XMs`##Tm zE-gGP#KO$h%*e>d0)H^@5X{%$CNMRD@q*v+OqkZC9Q+g6$jGv7ts%a3v9vQXG6nE~ z`y;ZhE?kumHXYm2&M&C53NH-$?B{6n6Ofgi)TwUACFD9!Z>M5Kcj(vN3qO`P>0Fpu z%HV!3Wxw=5yeSR!#~0l!`BMS=zv_-r(if@A5?DFBa-lX zBkK(bPG{#!{CuWQc01Gy*UOd|1GU89_cFHAs;s~a?SA9s$1Hu~XsXV;h@?%n)Jz*eGx;8j1A=t_8cW6UjDoab>&~X2?k|zRR(TGQp?m= zb{w)Hpp_4S&gWOQwcahtNU(ZvebHF0e!%gO-xHxfB%PQbhq)#e`m3 zPVwY)?V_YHgkh6Acq!GrY}4V@IosI&bCYRmg3s^xXPS@Hys2Ks_|_PCGECbTs7falD6|Q}m2BECw8`e3rT@ z<1EbXay{c$85p3cpaa_{yeN}Ol+9D54KZcKb;ycEUSbYH;`urKcf}64{|Tz~Z8jB`hsTa!taVR({BERZ6jIIR}9 z$Gp~_Wg{P0_AXCdz;!C;O$(ZrCW};`aXF+W^A`+0(n{mvZdtZ|Av3KmmWNTpnbIIZ*Qgx*bPnJFy0QZHEUUxdJ{Er z#aWjoS0IB$t}C-6iCPU}G*nAlLCAuIj}4@$iyZ`>RIy~HeWCSfz{=&#PMO59kcAj6zDx-&AsOJ5Fw^JM?;g9O5QI-=6VZ=vuQSw&%p$M*Wv12KNJ=B;Kd)N%Dv!hdvTuWd_ zj_|~r7L*`aW_Dl3Ik(HW=`09Qt*yK77h;n<)M9jI4Lf}33YS$Kk7;rn<5zAa?gK!9 zLD6b&y*e9KpcU51k=1#>8x=`TbD*u+!5i19ze5mJelz>+0R3H#yfw>SzizEWe6B%A zm!*06+BrG0#RsC6$j6&0aXM<(3_J9)1o~FOx{a-|)urKImH|NkDN>hq{fIto3cdS3 z-Mby=(jdS-+YRspNPgg6P2$Kn>M!n-ZvryW<5K=R8&5bpzL`t_$Lw9O9^VGQZEBT9 z>%9z}21pJ7kvni($$lh6n-YJ14TR_DUK)$wODP{;#a^tK?YjmFzFL;6fvN)G}U`ewTO8j&(8H$XmX=dM1>h2fOmwLF&FGc9yB6tS_M#z^&{j`YD{M84u z(BP*`_tVGms%Jj|1^n}N>_ez|z)Rm;8E_`%V=)8ku?>ok)gbP45>Q0ZFIW1d z_y4jn4ir#5C})-9D05RdlfbWxFL)QOms&`Ju%7UO6((Lm-1CK5uvY5dl$PJj{U%F# Z#N_*qPO3eukKq4>5k4p^usVQr{-5#)O#A=< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json new file mode 100644 index 00000000000..e9ea220d55a --- /dev/null +++ b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/BadDeathclaw/Drymouth-Gulch/commit/63d5cc6913885fd4b481b5ffcc980726c2dedca9", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "burnbarrel" + }, + { + "name": "burnbarrel_lit", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 1, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb1dd3887c28894a4faf51a2f88d63898409624 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}PI96|g2AhXK=vN1ge#0H)(e(eKHEQI2hZW#<%cAS4mssZ#_g>+6cD_-WuhA2 ziIboH@h9KkTiE&V;$rs#OCVrN)Xvbixw` zPEW_S;^q0qF}r?oE|;>+wPRBb4!vdZ;OOV?6}s$<6ZT9wQ+>;#K@4oUgWDJT!;`P~ zR6Nam#UQ}2v?S)i-PQeDiVtj7&zC6anR3uX&%tA!68oClC6f$Kod2_bN)Jbzd()MR oM;Hy<4FUvt_QoLma)pgy$90eM43Re&FC&zBAX2FSMSH-Blpz^Z$q1 zkq<8}D!0Y{<}(Vq%Xng1^MTdV{SB@(JaK&0!Kz}(aI+|Dh4M|tOGSJi0Jb50sWvdEKpP#$$?1!h^?93}0o)kIwHnX34NkqART*2%n3-;s%CI*HIh9D!i TW{o;v7%+Ic`njxgN@xNAV=jV> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png new file mode 100644 index 0000000000000000000000000000000000000000..e1df54b1528d9319db8f2a4830ec2d70c94a766d GIT binary patch literal 312 zcmV-80muG{P)PbXFRCt{2)4dA9Fc1LX6C4}@ViD0IS-Lnlx%d_iKB$9lA%#v3 zf^`W}e-K3|A}-pCB*cJVAi?Fb^pYIScloKqpBn)PKmY;|fB*y_009W#446*F&$4XD zm~*bjg%I+~*d1o`MJ)&b7mxdG85i3VN^C+@( zt^4YZcn3sQWgk^npl^BJ0Qj`079HYIr~i+1RVmb=;pSQ^*`2buie>clC^KIBWm8D91tflbR0Gr|W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png new file mode 100644 index 0000000000000000000000000000000000000000..1df343df5166270cf22c09ba4b905b6cd0660c9e GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq_xX z)5S5QVoq|RM1sMqhCucntAs0z&W9N*T~+@dZDl=}cpdj9nA@NnaxHw+V= z>fhhTe)&Y3Fq4993qv5EMfo#}D~i)BuIj|^kvJE2J%sVH`TF|{`1 z{xq=JTi<-}1k2Tl;dyr!++ke85Rh@OhL4+bmNml^1IGwwSI#r#WvwbM5my4=G}PYS z*3c{wZj#_VV*!iDRucv;uYf;xd(S%vF}z$HCDownl60CefTKaimt(>d?u2QNwYd{s zGBTMoRB%7#YY=rg!VtuzwMf>%$I(Sk;S}SGR&Fzg%aa7c_#ZGYR#o)%c5-3}KgFIJ zzbeH!swt3N;4MSaCZ%0ft1J_O;`x=Cdl?w&;;UuOt2Al@gN?z{)z4*}Q$iB}TkLvq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9d2d3cc88945d1157647edb990df3ab976b1d7 GIT binary patch literal 358 zcmV-s0h#`ZP)Py1t)QFbrdh)&ltg`!gj2eCJ(yxN4=q}AocCI6B(9lkFi?==?uIYz(;7y%^x`@I7JaQm`wao%<&Q}=4b>&pcsVDJrC}WXI`Qdscppw z$LzKnvg%L@i11Yy0%artgiofkeA{v5)KNB~R@3Gy$9Kw#sOJscn>@!C}7643cO+_&9`&mIaFFpS>V&lU*}m)0g_3l#df>{ zw~4y{UkQjJloaAI2%y?@cmyb5mZ(JMDvq20>pdU?Pr*+G7L(!s6z~fC^j|=QtqAe! zKkYI8uvt$5rr4FF+1o7iHzZs{rv{$wSg}?o#Zuch4x2Fk7w-VBii0 WzGW=qPvK?&0000ztNa1yLuArfL!NX=D*zU4u$a9{3nmk#_`4L}3X0Q?`oWID@iqa}@>(+rl2x%`K3 z0WdixDT}M9QVZf}2bSX%x^4LM0GMpIS%VjhKfJ6u+5nOy&XeJZdB^X=evcl&G_CiE z#WvJh0d!2tJHn9zU=rCyR8{3g#FB|l4zN93;BiYK82QTm)&h{1{{JFrQ?Gzo$u}bXltWUJQN?@J)Oe zr7FK%oy1`P%5t+>8WOeft~GL$tOmH~8OUA)fC`EM?EiNyHg5nN#0P{k0ExD{pi=-I zK3ss?ki@C~r6DRpngvo9AO~#bGX#c_lj<>x|zWG({WlaNnFq!3{TY!UJfK~<7RP-n6A-`wg*PtYB_gFG%7EAj0!p00%&mqkn-U0adSt z2u&{10{8?JMUDL?-3ef^&4nbu3OC0jG}#aXz^XTl*ghFxcep^UEZ_{Vy5IaKBHAap zhOF=`ghPo6z+Xc=1KZ6Was`Q;6{i+-huRm71eb(181<0v)C7|E>-XMEG5~)p17H9Q zfC2cw0Gk`@$xj5>-P)a64{Cpuv>1-c+}a)8vz$%#<{Leqhppk!lQQ+N5Ti%!ti#?%S{ z=-<~}?`sYhv1fv4j4(2x3kV{0;N-L>Jwh`o;T7=nTaUPaZfU)Y?wfZ75d@X?+mHu= zorS5=?tlm)Qw`{Zpyz?K3v@!TbHDx~`h=k0VBUlV;2q=(->o2WdF%iH002ovPDHLk FV1jmRznuU8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..aa13aedfb83794e7c7f3ce3d5a74cd4e267736d7 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq_xS z)5S5QVoq|RM1sMqhCucntAs0z&DR+ zrJM89#>XN2!R$fG8Yj*xsH?kQXta=J*!1V#;cy9^CDI&J$lJXvV?jpvcCwK!BmLA&Ff!GjNy6*Y$sJf5EaAnQxWQptCB_WJE(p1^CmaZ|cQ@f(FZ zMiW$DOqMlvoZ``9Zo_5QfvjTj2sKnV>ih%7`cSa5tU(8;9+W6 z#BfYpWQl>`p`d@A-R1#D=I^U$p6;)8;AO+*=lTzHomR54<)@m!1LX@7L*SlT?ma5A R76Jp4!PC{xWt~$(698lLi%I|h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..ad66f69275c1524a89dae654a0039e90d9096747 GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq^m5 z)5S5QVoq|RM1sMqhCucntAs0zi}@t}@O50g{Fgu3{`Z%eirY4Fp4nIYpE0JlYZ23o zxS06k3P+D~i^mteG*WiuD+mhsp?~@u*K_;ksG6FCHX^0R8*dmXa-MMu`5}34&+ii-emu`-(_~KSp{CtWf!%YE0Ik_D-R_n)0SnSL{^z(jWR>CI*%OHk0 z_68nTzZ?SwA?C>S>(-qs`25VbKtu8LK?aM$eFufAj#x1~kSaq4{TFCYjJ)|9@79iyHE;3yYl$ysIa(e<{$v44$rjF6*2UngH$Ob=Lp@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..fcec1e456a778139abd83158f9c898a26b90bacd GIT binary patch literal 432 zcmV;h0Z;ykP)VQ!Pj5=UwIzU=X2xP#m5Wg%CfV9`2Y7kc!1Lp1RVe~%urGUK|jC8U}&t1sTd@#t_bJ8dG`^npKJ$! z0Lb@`pTEJBFfv21&z)i*2T+s?o*mfBV40A_aD2f$f<7hN0iZa)`RxlZ)t4_=9e^%| zE3QHMDRKY^TzK{zg%2uj!2nnefUJG?{0Y$(lI#GimB||{r6QSNXtoDN9Wd&EQ3nhw a2LJ$lvUFu?pV(Xg0000VxfVB06J%qbsnK;q?_c`_ z#giZ6>xvBQ#en*O;6Xj(q%VJNUeY+PcTcHdSKaLEn_s>DATeuO=G9qGemmMn-(LBA z(T^uAvul{vPCSz_L9*L%t6f_(>jKpS#_M()1-Y+^vtKS%I4!z$UfHvT?Mz@J85qn;di5kN`YTU> N_@1tQF6*2UngAcNN*DkD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/vent.png b/Resources/Textures/Structures/Storage/storage.rsi/vent.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0f46b81217e3918c7aafe571b06982933207d9 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DA@1m z;uumf=j|nbE(Zq@whw{VocS8MHx}t=>m?pG&GAv(mZaw}MI-HxXGBf@*Q?c+|5O=k z{oDc62?Rg%4;1eGce4A?fp9&>SG$x_<9s5`OD>tc&6D%KGJA7ow9||)oY&YjubR#L z{O-z}HA@;cOIyr3%$Ap{(7E{O^-ZD9Q&ji%EWOT{FA6b`f#;3AU&`j76}v!uPgg&e IbxsLQ0DNXosQ>@~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png new file mode 100644 index 0000000000000000000000000000000000000000..c7365021975270cae5b768cba57d8780f37aa1d4 GIT binary patch literal 1389 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png new file mode 100644 index 0000000000000000000000000000000000000000..91b49aff4225c9bd6dcafcb1e927ac3f041601de GIT binary patch literal 1476 zcmV;#1v~nQP)AFkrgw1nyX?HTzptvRtE+p9 zXmYd!5KWGj0HVp!5V|KTRlVALf55#POcNS<%3 zEXv>B{R4sL7C(LvgJY)y*B0hKiUa-A^8NR73k?&ZCIQZz94mG8bO(q_(zyZS^SHOZ zx+Ip1Kb1(p)f+eE@7>$C8YV<+0S@%{1;_(iyLu%#9o@NY>KOOsITHz@01)EAy*uLg z=t$|+qmim zhKW2!Z~q>#IQLm}wZ$P*v}1w&gub^*xG z&CIJH>l2XznEF4610(_+10;rv^~p;L-`7IpOxker0B(Iw$|M9~u(Ri%@9-`I;`vW& z|2*T{3#X%SvD`g z2!KgZ+OP_M1|T{gJaNkDV@X&)N|>bK?o18EE4Bmf1!H_so5;o)J?RvzN|I{yk02Ab^f)R@Ns z4k8W^c^_~R01ZaNL0%FmRwhgYBqjqZ^~T_9E>B&}U0tQRsUfOQP*vwuJ%Ek!DyljX_%L7uvUsz6tS zO}sc#)4BjBkDMMr5F?QFc^b{fc5ZzVK}Udm^|>^ya2JKp&noYgaASG{kZ9?Nia@cUwc40 zPQzuAh%JC?t*?D%wQ?}JT^|1!>a;!&>m$;Wm9anqV6lWeAPuClKR}V!uGvJW41u{o z>I+f$sF6lmoVWmmwlPr{DUWzlPvrT=WF`4IaNK60_ z=U5s!t3)93z_CM{<*!W$pGb9!%;D>oD+ga6i>#t90r;%0V|^mv1?P_KQpcrT=fox^ zLRPE~Bu#d};V6TwXF6(;aTVJj;vL_$PuZ9)IXh?4j0>S3rm73KuW?iv}e e(puxI6@LJxX&M>yL9hz|00006#`0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..22bb887022e0280383c8888742b019fb1b023965 GIT binary patch literal 1453 zcmV;e1ycHnP)2$lacbpt(Gn1JlbIv`_%e^y) zso)q0Kn2G@04g{J0#Ly*5P%AffdEu+3^S{pavYc1{bKwBx z1epY2;=`3P4W0NYcKpcj2$f4mi(O#u|Dv`KEcm0#up1x9} zIVH&5JNLA3Aq$ZxKo;^N=O)ay6oB_{-M&eWA3VfvFH{k{0!Z?w&rZ?j)wXqfZDWg8 zJ6&onuju{psWJTuL8K7ap1Xc6Xc1xpFnPcw58{ny&uOSsvOd#Td_~8P^}os$0f3MZ zf)l|KK$7>tN1n0y@rxEhhJ}mhyMq$J8v+1r^3CQ*dy%w+H*?jo@af-K0$q=tlu#E4@^i0=7l zh+IHOgj1-92_VUVFmk};>{V*5yfFmvdU|;KFAtqOU|}*TPpX}QK&qo|9MEaN-easxudWX;s8v)kV*VTpDGeHnU zJIp1}=Lk-gUFs*#_F|n73?r&#W`H~s=QRfU>j@6+y9hA{pj-`2jp>o)5$4*D*l#o% zvAQl-jW8c@a{yqGk3JJZN%V#QR|6la$`ReD$pPGw$K;Xm;VONO8huSx2^U&FU^PMj zM&``ne`!M{L1XJTuZ;`f2w%pJ38BbK+e^R&FI5O^hU$RIWSO46*rL_tCuY5mv6Dp- zN#1mc5wPB{@TgAvjhFx!{rmMpbYuP$J*BeA!mI&62)7Le;0}&)2$trQ z&|o=WvGrBEfF0n1h49@dLHq1mDr0ab7#d6>GQ?}9eMYMt_D0glCJ=WrV-{f z0L}}D{}5u{MXV11K(ahNPo0-_YARQd3IyH7d4gApkkkPJxp4qPx57$Px$&`Cr=R9J=WmCbI`KoG}&vtF<2A^{R=K+2)Y5l$Qt+z>Cqp-&H*DOJF~}A`?#v z1cBkU6P})&l=9i8AaDD`&={oX5sWc#aRCqRW5wXq<7-k? zV=W=NdAl4VHbiWQu^|$KMU*_am=G}miXlxB(hnnw39`v_Lx5|FT?7JJw6X*dfg}SU z9iH+@GmM1W0Vqgzh#LVI^bY<$dxdEjm3%H=9^D)Oz|rAhX>0~EOWp-y?KLnB zBce3fIALdiS#pt;r+6!$)px<^aLJz7`H8ldq>b-RY)I7X(!K(*D=)xpXmyPWxp-27 zsM-~aiqeE&(1*`w-2v(nR4EwrTgPYwxcYL&8@G6iUHhT7=F(~S;9&syZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..504c12ecac9e2ee52d7032aac8f874034d3ce34a GIT binary patch literal 419 zcmV;U0bKrxP)Px$T}ebiR9J=WmfuRlFcijrNwa~>8%0O)M(_!|6!-2v!oX+Hl{xf6FRWeD9xqy4 zXWKRXBMSC|kdU0_`|_QfP#7`dzeCk6++E*D9EFV=SVy9hBahqVvczW&eRO|y>9~D0 z;`p7dHq5*!iPkP)~OUh5P?(x1tM9~vtzJZFjMe-EV`S3L?C&5 zC?!iNuNVb*c@Ih{($_ci{OpT1t;u$y006XCe_0?W-}NFn>E<~b_&!Pa(M>=a1evvk zIVH8>wa{wPO@KAijMPQ|cqpV`hY~>LMoZdSm|F^R;yu!VP<=It2il-THT=2*KO>+;l{7|8E_}qnQtO#ga}hF_117QMk_Ghn zX+HsRutp8^=u~0wDlmy{JhiicXcb`Q^WLI53s?+g(5m`(Y{ZB^flm&dU2})@ZTSEI N002ovPDHLkV1l2Bxj6s; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json new file mode 100644 index 00000000000..b03441e364e --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By Peptide90 for Nuclear14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closed" + }, + { + "name": "frame" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb8f484ab900958cb2108157eb7eda929a24399 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}yFFbTLn2y} z6C_xbSvPFjbm(Ie^X30*)~w+H0iQ2rCv0+?|DUMYWtA{*+rj#c^Y;fFdGV|v%-o;n z^vhQaueYz?&~^DNV|_t{t2z6hj1K$BwH(7^r_B~1I$ri^> z9h#7o@TuNGhC!S6d5pzj3k5z0cIHP6tMAvdU1L0vaD{O(pF}CcU6}&6sGJ1ZfW6t) zkG0FTH5M~4Gc!A1y2>rlx1d_eV^Px$!%0LzR9J=Wl}m2aKoEw%>TcT-AcBHs5jMbz9jly!dvF3I4uHgxt8fqYEFj8k z0@5TBLCO$6x{HPFj3<7~!!u&R{8G7Ha(C6|a+ezpI_Q6w^ga0W@|BJWtXWPV;1P@! z9yoY=cGk-0hJt*Z9FJk3@VDf~VXuC18kx>Hg8%@halGV*KXW8#SvpYy0ThCk1q;>1 zK7InZ;-iEqzwtfAUI~zX|F&=*K0#u%8-;ps6J!D%26b;j?m zOH(#l*lmhfcW0Q2-&g>|IK&tf!TSP#@ssKSAlOM)O!1OWW>oF4>4 z>}~++Bub-6v<#zK5{dLS*X97pi|19)(&8d5eHGAlB2~eM^*eaW3hYj!0OI%Wmd2d} zTwGuCc{W=MVlM#Cj*jl`RUvapYfkpz{?H!00000 LNkvXXu0mjf%&_WD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..c345cb331c01172975c2d6461b628249b6d4f9b1 GIT binary patch literal 408 zcmV;J0cZY+P)Px$Qb|NXR9J=WmQ72;KoEwX*^M6sg*JE*PoBK>fBAF#eM0Zj&?@v`+ib?eR!y5G zyGbJo=7nX$W_I?OcUTe_H0Zxe>RvqEKd9TRg9%)HialLj2#>Q_B{*r?^n7<4mAp>5 zduMABMv^dnTO5sP1OV7B4>qp7E54Kh1wYg;s`_CrN8q+#&mc`}oeBaJ3dQ`TvMyrE zQGnUaU_{W>3Ym;CUlE353Ih1kEP^%!n7vtdp}Kta4{1uV-gE=dZ0@Zs^E9#4NW^vn z$dhvbOztZ%fR@@R3VbG4*BUIY1+dq_E)K-xjhEQ(s!vqVfy5oyT0Xc3i0BqX9o7M; zTMK$ryaR32;x_!c13v@M;+6yf>`jVl5loa@TNyDRy*ZFLSG}@;jIU1vaM|ME%h#`Z zzXgeN!K$MHHd%(5j8BH@3^3K6te+qM9UC<0Pv`@NDqL)1)Qz410000dR3p6mc|AGYE{-tg8W|E8_i$Gw_-~0Fa0mC&ATM-%1lVhX-l+> zm0j@tqik5=F3Sh{%#ROPJ&@;H{o;AU{QYd#7<+ooFu!JqNw~sTQhvbNEUfKx&Ke#& ztyllqk1%eyRB(Fk>>lPv3?&8%d>33-3A?3n^jHDaDqm(acWDJ`-+XRfQqA#WRt0#Gm?DiT-g8s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..d4424fe40d13404a2d1c5b2dcc046e9dc0010d27 GIT binary patch literal 713 zcmV;)0yh1LP)Px%gGod|RCt{2+A(NaK^O<{zf$7x2qcIm4??yGMyOC+B&YH^Wb9@WQ#+Il8PbxW z6oNyCP7lPPTr*@S9nz4YTc!?0(L6Cj3B(WtySiwQBqR=+kn13kN+^`eLwoJ_1NoMB z$M-%yh5I}}0_R-ly59S6&V|fAe*>q?qC&9*7Bc_!yl_;m2U1rrmiBj6-Ho+SJ71fgfk}3!HbZFzLC( zm)(ZcUc)BU0TJeg$rBix7)5fK!Rr~ZJFkJE4v<;&FLi)a0rsr^AHBv&$ChMvH;P!FsytI0AS^Fh|YzFoDm^}5JCtcgeXSIiO`=)o0^C) zH}`_{Bbo7$Z?>=%)dHZ@VJXGE=@5y_{azPN8q zi}>P_&~;rnbX^xLX5jTp3sW;|SbwzxlP7u+0CqmT#hdk(Qr&VpHw1vQ`US=&MtiaC z^!4Tm4qev;(7pEVx~blI7yyEgD#{h$`7@Vb#sUD~^G6HGW!8)3QWlL?6jnahod~g5 z_u6}8eirAQtG*bSpGEoTdZ;fWV{5zZ__q5Mv= vYNBz{f!8zA7gfCnOb8)_5JCtcPx%qe(q(etH)7rkBGB{Xq zkb?LJ$P2-tTpb+T0)pN82N;sP@;Zp1AVLa-(hN;Xs-g}mcpbv~QiVdfgrtYh2f}fX z_qe+}`SE^pfCSFD&~@E=aL$FyIR68m%te)L2P~5X0I*CJm2Ic1lj@}hG8fg34zad+ z3?PfJzXE$V*yU;Uj#LG#tsWyfHjlxZ8lEMdgT-6jo>$LkG8Yvrzu4b1aMC!#>D4tx zLg)DOxhXYPze!aJ+|`C60hoD)aA=_0^XeJtSIx}D#l5Y79eY$*d>TWM0G>R4 zq;v&HDOi4C=HlLW|I}ny+1~-u{@egU2qAl0sc|gAvEWfvCmVMdL z?YLAb+;1rsgqbtEMRyX&D7gVuy9FSOlg1f}>o%%RT{@0a@-2{JLAa5enP(l1rDTwK zHR&$K(ig*lv(?dGb4qSN%oxYYM+UoGLh~Yxm@zIr zmXaHgP9|WNO8@}7TtYgT=<|#SA%qY@2q8oeXv8F)<-_>`~!H&IQYVtFIa}7Z>|`2BKs0*xxfyZ>)Iz_Bm%@d3hO{ zuIqwjvRHU$BRV#Z#kmbwd>YZnf>v*=h{d@L06=kbSIKH|4|EPi0&v?)U(CxBG+oyP z&_4D)cvHjOC#$+}mzj%;Z{L5x%rg|%ZJ2q617{1(i!|(VshtS1O#9e->cvx>UR`^w z>ZT^c;$h$iMndN}aJIbG%@CKCmY{LYMP=JT?dT9J-a_-|6~du`Tdk_+fC(Xl5JCtc bg#5*Coh}ZLx1}eY00000NkvXXu0mjfCqGr# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf5ea455534bcf508a005cc8f0f82377b48509a GIT binary patch literal 775 zcmV+i1Ni)jP)Px%!AV3xRCt{2+P_O1aTv$(ceECNMG}Z1fmW=cmmw6q7-=afDlHTz7q<=$CE&lH zgM*8IK$b#r=-$Q2r9uo5TN2ZP9Fi1EXp2f3F_0e$hfRkxLFrPyhQx#C1>p$XeR;kQ zPY&*r0|n7&wC44Co1bVjT2oo)Ht15hD892xcxncK@YD?Po!yoe)lNzc$Q~HblxSX#xU%H(qA}yJL{q*~d8Sy{)dRZImbA_{>GASY~tc6GMGwtLthTn#S%J zMAt4YJpoD$Ffw`GzIhLT$M=+C$-4Ido9cxNb0al?+)%1j|0e zwCZ6@>2bKz8k;{pbMfTa3&O#B%CWp98xZiji7d`HzuzQ~vE)x+VQ!?>h~(;_tVtsM zQ)w?snP8^{{BFqP0T-IHz-du^0xa18Ba;W9R4jAytNTW=yru5}t%&6-UhfYC7@Tl;R(sU&8<#^{(&c`ZveU_u`!ok{|bP9>Sp$2(k+5JCtc zgb+elj3qO{|FtkTQVaOq7@0g*kLw#HM#p?i=;PRymzQgMpTCg%cF5~F`#&cenLO_{ zzFV$Qjp!We@%hTqG^=Ydyv_mvzq^?y*oKFPYr)VY&mZNRFF;;Bxxs2pXe7r_&kpU5 z!RFC6;A!RwT~H4dw)Wl4w?9|cVw8$yj?Y{)7O|S#Q58L;;dK_Mm?nBiLwj(69@6Nk zW(kHSfxit1h9>E$X3;}h^W=(Y;&m3#LmIiGYDYJtVmn!|?ZgtC7Vk3DXJYK7IQ;SZ zT80>jM6TZh9(pb*mM(DEd#@c;|8x*S2qALYktYev(Wv+6~%NQRyZNav{d~=f{cujv<%Zs z?*+~a)mQ9VvMhFL!ts~?8;^aj5OO+P&1B-CIW_n8*-1fKb8W64xWXBgzwN_eO@;&f z%Omo)iR-TNEw^%P|I63?gG0gTQEEli&iw_EZw*VB!#_I~zfC_cf2*oOrfEfPhUOdSZU91CU2TM~@g6qkm)J}U-vMQG^VKaFdiF`I7j(Rt00 zI`Od2Wf6uA9sTvUe73(y|9oJjVvv~Sw9+e?fw^9L*8F^ze`DL)KLuS!PJj6K^Q(Sc u-Tyjfg{2`M-vrLR9HF8F0*mJTWHabYSr8~be-L#$n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png new file mode 100644 index 0000000000000000000000000000000000000000..da0b0a35ae363c858922988a44644f879a389b3f GIT binary patch literal 504 zcmVPx$vPnciRCt{2+ObOlVHgJR$E>+PX=zAoIj1J6z^0mlh6cx=#i=23C`!trENCc# znuHJ<`U8Zfgy00P|DXoLHkATfJ>qSMyS%97Q<6`g-|}*B-|^jd?;YH82M{R{F=TyX zOLFHy>GoXOF`zO?#1P;T0l$fv#bxNc2tJiTmI=ALjiFv{pw_ez30JXq`mS^=Er}Q+ zQjo)~m^?kNYkeEA161@<2Pi!RABvBj?aGVYk;!PqG9i`;$s9o2t4~BkL_|cSoxXk< zvrKsMh`r>n@**hZ0o^tgGd$a&@ge17X&GZNlIvh3r{$`#19~WwRn{w?=7@-hh=_=Y zsI$J(V?%z{KL`A_vt{a;yF1ajlN`0y)^zD*((dbmJ7-Q@97>i6{VIH+hTI zMAWUNeAeC1{V*~)mPI@fMXhOjYCI7|;r_p;-@eoid^Z{LTl}-$eD{0000Px#c1c7*R9J;$U>F6XU=$2RpeD-mpPP;O zznUn|e`Gc}W--DT+-%Hb89)w@=I3O%_4*4V0|NsC3%Ufo0Smf-p1c@MEqw6mJ;SH( zzu|l)n%YJL7VQ!P47dX@Dx(Ll-Vdw;kZY<@Fd7O*!H56=iwhSxuEM~2 P00000NkvXXu0mjfA{{=M delta 327 zcmV-N0l5CW0pS9WBYy!XNkl$@dFd9z_wJ7wEX0ozRzDmS%ft&kGOO&o)6Vgl~3cXUT4z&b+v+y&8 zSJ1XHa2_d!9RCdY8mk+xz1nB+-AS{-MR(0Md6vga_b$6OOp6Sk>S`4(?r|uhi79R8vw31)lpHJ7 zr-c9Sa^iS%kn!-5()E4nKAIf?uNo&bw0sZ$azph@f%n|Y&0<$h$X|U@Zo>4s{fDr~ dexYksj9Om>zDE3OPX_ve!PC{xWt~$(699J&heQAX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png new file mode 100644 index 0000000000000000000000000000000000000000..02b39be4e5b9367fb3b04d795b96dee679affe43 GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xR9J=WR=-QbKp1@yr!H<5ON^YLG`QG79g65wR5}QPb#PJ#2f@j|!bx!G zpiT}}5IPhUC#7^y2VJB^!NYh|baUw%hkEIy`O!;BJM~SM`@Z|$yYJm4Q4kQ*sd>{Y z_Hc8n1g+N}biqgY6}txuj`@S#>!79D6953|sU@cXbWlKaIOb^k*5;u#K04lU3)cdUkMgTE9?{2L=k;_VNXcLVxX(9iz}5|YFN2i&`yUI$FK2;>>D0Wr zygiD1_T8G}&s}*DafodP{BMXK6abiLE_a($Q0yub*UneMY-ZPC57?gVE`PJ>?gUDdaleAf+xEqn6 zRh}DHpKC@N&CS#Px$2uVaiR9J;$U>F4h3>eV`oZZ9!)6&AdJ6EFEiNbMq5C4BoOq=1Gy*^DW=Q?xlsKWFDkMxq=b#tSh7#z(dQn>frN*gOIgNA?ghV8Sj;8o*^ZF#u}_-~-6f z^XfBpaabt9q6azDD0Tq0pvESS>^N+E7@$fN-~+G(iA$a;4#4F*VgS}CXxn^=F~tFU z%Et!8cyZ?xY~~>Y6orDZP5+HvT_wihWP@{J+6?a(*TL<@@ENU3LuAWG!6+C7qhJ(_ gf>AIE7#J8B0Cg~O@A8K(*8l(j07*qoM6N<$g6?XEMF0Q* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..a3db90816fc2cb1f1a85de2dc952a8ae476934f9 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?ST1!J4o=WKL#4^MH>tMb(Y3Qwy4b^}PUl?3?({|5nv&HI<^2a0eO zctjR6Fz_7)VaDV6D^h@hGd*1#LoEE?PVf{uWWdAHtorx==`)YCx{ow+-+2)dlf3e= zs(bAN??Z|v`wtlH=HGZxh3EKMwS`K?$zp!9T93?NU7gwD`Ci0^iN)Ys)3t=2n>kE< zLZ>=(-h?IaNAD4}`4H*k`a<|SLwQ#EhyGbje4e$Oho{RqFIx9gOC)MRcFZ!)XG;th t-(oS2zGkqWNn{1`6$5-iT+`3}7mRKC{^vjYoQ=M5OP$@r{|7RBTUMRopjYLq2UO*CTKN!= z;w}mD3;quW3|{_>pMb)g1s;*b3=DjSL74G){)!Z!rOlo$jv*25Z>QXz)vUnN@_HTn zlfUv6>c%TsU5d8vP5k4-Jo!Yt&7M!wO&K{pEV6i~^-25`yKL{T+*^0#SH+9{-1bZV z>T!v0!U>_jLd1TaUN&F7C()kqQ=QE5cf#K{oro{8I&b{*L7(9p@dJ$&DIub%YVs`q zCix#RZeDc2Ak*N@dIk|il?%6+H17T3b`X42axaSE=&t{K4sPD%vjU!6XSl=cEzFa3 zBcAa=*xNG`Z@F-Pco5G}AtF?~#Oxx|mtWcpnm%f84bJ}&+%Er?O|QGnap?L6CW&vKr8X?sbjDyktCPI9vua!J zVOE1T_3_MEr*z8QKkanie{jPc*^||?{{51g5UurjXVAp=-rR?udu{z|&fuA9_d?@S w>%-Px%G)Y83RCt{2n6XL&K@f&##m0bzO$uK@IKdY%kRsI;DMH{xt3cY+9#{yM+Ez%V z7!ZpTsVoG2fq(&D!6J=?aF$~s8#kNXTug4=6aTNHavvV_>BLV;b@J|tXAUwHY zmx9BqqdCnY=~rt_r}_`~w}tY*sf+J+BDx6Nht-0&g|-}*bp=T7yjwI(mp@Zo>cG?DAXAB}iA-nvUj3`nH? zc;;bSyc8uO?Z;e-l4+)KomgBQiFPN-H0fKvRSCGf{XL$%6ZIa);xr6qp0&lh!>?F( zIG*aaDgpQIZ^bf6=FPv%4t+s6w#B(lbBm_^nANzPyG#Y}r7sUhKTtWg#aoqNZq3s$ zU^Oo1E>i)1)BlETGe1GiRv-A*SF42&*70v_0gF(})7D*LjLXs^%adA)*2TBJ+8!qF z=C~~VvOTD+U|sU||KkJ@0}?byGUMvzOygDYt>1ezAEq8xlfyJ#mAw7u(gGGCFC?yY zimER!gue8%{O6JYdA(hKRX?w{dsWu)Z)^djC=u!nQe^bdk48*s<9oi|bM*DH@U7n+ zj)i)I&+6gj?b&|_`h0!8EPm7f%*6JH`Sqf|>^@gww-eFjfiN2Kt-o`8&Igkhr~0Gv z9=%uSmiQw&vFj17P?tFP|e4W!shg8YL2g8_q-H?td1 zh_k>WvY3H^?=T269?xHq0uEak-;s18xLB1mj94;#x{{KJu+wJy^RWIYd?U-!A z_}gVk*!~yc4Y^nCH}Yvm-z;Q&eoRN+VUDYOmk~pE&xs=iJtl|Q9^4ANSiq%SG*=>g z0@Dti%?W{F3YP7q49)Wx!Ai;WnBuJm~CU(`d@F>?)uHM<@CxU22(ba zvcF+@a_=5zLiqw;|0%~du&?_#g&~f?>?d#5BnQC*wO6G6tm@%jvDLmN?Dv&M@xP2K aukl-|3mI-Ou)7EJ0E4HipUXO@geCyso`Gfn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d7907e3a4191f98475d02833dac3bc1f23c070d7 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`c>;VwT-SM6Udwln_qPTLY|c2<2vS!P{c-a;*QC zd&AD^Gqx$G4k(7X*!*2uBw1`}pvSeuYu+plIYACHQHKY6R1eKOm1J{F#EHW}=HN1> z6}gOIeGEoihYakRm+}huBphYAupx+7^|_gR7GsfJjk9OtzKz|o4RfOZGAT?x%90ru zv}C7EkHPNfC#FB5pY0q9KzPgg&ebxsLQ E03g_ec>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a6d5a5188ba9476f43f70b2bb1f7edc3633fc0 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`B?5dxTn)4}x?1aM$_rBrRive)T8s@$jSPU2Zhx=#11XM@Aiv=M5WsM+ zd2b|8jI+QavY3H^?=T269?xHq0u+4c>EamT;r({%FXJN|C--0Ws~O7C)o_s_4A&6dbYZ70dtI@c<{HY78e-TaYQR_UUhPl z_BG~+BL|~qwm;R|Y?V5#@miGQ0_F%22081fnY$twqBt^Mn19pNQh9f2mCsQIzaEBL zK_%;$-K?2ba5h}|$M$9lV}U)>h2uNfKkzX;kNQ?9qHsIo{8n>@JS)bnbqopz-!M4b zXZU0(HFdc}L(rOXMA8U_0^fk|6&iroHbmLiIYs{HeD)@YG7R;_P`=8 Y_^4K2)9ZJZK+iIGy85}Sb4q9e04{fulmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json new file mode 100644 index 00000000000..bedad018567 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 32 + }, + "states": [ + { + "name": "workers" + }, + { + "name": "bazaar_on" + }, + { + "name": "hotel" + }, + { + "name": "private" + }, + { + "name": "we_open_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png new file mode 100644 index 0000000000000000000000000000000000000000..2e18cb26129c607df809dd40a9ba0ab6d841421f GIT binary patch literal 493 zcmVPx$r%6OXRA_E^ooWjYWO zOs2D=$8%13(B177#mzdC>Fj79(gZxeyyEiWlj3TP`MN>!BTazG0H~N+03#F7Yu zK@=zOgHWmcAgr|uU1yW+@>Tcv)$$Jf76QKo;3w0ow4CAV`m1d6X&~&q-u=$=sTfOw z$7cR&e>ua~`HIOgl@N_pg4KWy1zEMp+T;KaVXc0Zt2c4v)v>SgvyJvCaO!V>Dsmhr j`y5sUz%UHM{6W3}$ww5&pPx%pGibPRA_u5@!i@rH-MU|{3fremdk{B5 zxVU#vmslJKgxbJ8f>q8Hx{)_JDR#80xQIS5){b_Eo!On8Spg#>9~xn*U~%(6HYU=S zUq7#nZ1`+4cyaSUSDO%bUrn_1XY(6a0A%6>Bk!%Bi2mGd@%(rT07$c3cr%yypJf2R zZC%E+z0+k~@-N?i;A#`%{+sA+htUoIfak|sBr<@nVgNuQ1585o;`y+ZFO1>$KxI%O zgSzdjn9?j4x{SyCujg8Brw`Ub05}@rH&)1r6ug;B{5waN6RBDkJEf1FQw*L3 zfND1+T3b(pZKPQ)N+}6D#VbyI^bF4Wi7r|O+nB>(JD@9W-zp!PK^#C!P`NrDW=^C? z>>!${t4q#RA7_y?%LOe#VrPDNYhv92-pr+P6<`voda{SDB(I1G0Q3VgkrG}JcUE|` z1kH=;xm;C!ZSRgjLqNY2>1amOhg+&Stl8JriQk6RGPx%9!W$&RA_cRP41A8~)pGVIJS%#qpsQ-Fqx^RrK#&ptC4jtW`(N4f-8 zm#5~c*#U#$D05%ifS1=doE(1`D`=aH--}uwZ36(HT&cqKeDu1V#M*G0sMkuEOjihl zK3vZSfS4`E0f@aOU&=-M08;bQKIJ9E&$+vAX}_DkMH=e05_;WER5%qU+A?CnqA%qV z_tWxIBl42F0V*0!6O-vGvQWJQiI;^Hk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1o3GfMVl~Ys<4Gq=O)ipFRDJ(2hR#i<%NQjAviH?qri;IhokB^9m;1v>= zRZtKU6LWWW7Z(>76%`c{7It-Ym5`8-l#~<^5fK&^77`ND)6dH zimwM@Cnp&G0A3UD&P^>E{e%l-F0+)*k+{HXB zQ=MY3r%rsnDnag7AB*?@0t-2R+tAo)UZN8|KfPnp`{_xckOklMI9FTt>)JljMTyL8 zdn<+J|199IT=xFO{ufLPZ|yUtpX7f1u+U}q(Y*N+W?bCtJUgYTAoAFQ@Q!U~f)2PR zcWCXXy%4b=X41FC93}2^Sx>2E+A|+~d-@pDJ_W62-8=i<>C9Lx{z8h+wnUfv!ZsVt z3&qzxuPn^{{hecr{=DBT96qzFzur~8u&?I5(2F1PtZeB88x3^MDF4&ZNuBce*p}tL zZx&5^{WWcKoYl0>sV(P=G9PL1Jkr>5$t=P#&Rk;i?tecX+^CoqkZ|*EZeyV8F7~K% zm$`XNx4o8MrPTS*Y**KTuZJsUyH;{8_7z_%(BXeCUC^ZWZ7Gw#V8z@6n`gHzuGACk z(6u_RVG;IQrlBYaLEj?t^)Uc>h@8CH-b`1$t zLod$@&k{B@^~aqFeZktS@{MT)lk4Z0NBV0XtQOa@JYdvUtiWo-E^@ZG(_zno;IM`F z-Uk@0YZ5u36<~5+mFZ(|IK%S=dI{{4iw`hWg5A*g^medZKG(k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwCNPP1Fi4j$hyw)@D<36-)RhGJ1^@s5pTR+EYj6k>(=g_J1(Z0h%+&=h;rN$ z5%_uW!Ifpfew%hb;+|u|njcb-b$JGZaEQS{bF~|_6P4PU1qE`ry(}5Hob*)LciCA0 Pox|Yi>gTe~DWM4fiWyog literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json new file mode 100644 index 00000000000..5dc376d26e3 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By PatoGrone for . Screen by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "keyboard", + "directions": 4 + }, + { + "name": "screen", + "directions": 4, + "delays": [ + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "VDU", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png b/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..889dc80bab32d334fac722a10749421d5161d576 GIT binary patch literal 1305 zcmai!YfzF26ox+$P$6?|4J)sertXH6W@d`6g(gyIUZOP8CUf(arCn4|G-(pY4ZLi& z=wgkVrlYW4(h3bJS0&BLO0r}jB5gHAA=FQ~EVKJ#`?qK2yzh@Q=ggdE&K!F9!F}e4 z4F~`L%<&<(2!r<+GT#(#P!cUM#b8F65&QN4oMGF)008znt^ zOtgu7&vKt!C2kUUsZW{2Kz$v(?uwZ1LA#UNP+=#K#wgk5M`bVcqGOV?nGP;jt<9P& zEDd7~VJqnrZq^H*9(@u9ByRC&vi-g{^FFD z?(G17->EQwGo5obW6|vtr(G6vL^Xp3q%W4HekFM{ zyqcP2tcAsUo|%=rR=3G*;uPvX4^QxZ9{S!7G>tYM|EnIhCuezm23ltL6Q$oN`f!8(uuQjAss<7u8Si(Xxl7 znSfGg@-LD9(a-tlvH`|!Nf(|yO@g3fUzdmJu4|mDb^~Uas&` zdRl}_IIuIdVkWot^HkIYJ}+s*p-}UkPu%6_T5H%gDT~N0yabyLym>-xf>P-4lDM+t z!0jZKphd`GI@h28!3Z(qX?tW>;uL~DByo6yylI=ut?IsX0k##y^!Ei!`tl{wj@0sn zx1s6}*%8z3%%X8#ptdvTfyqNF;TSv60E00YCpK@Dt9$@ZZv549wuQMRv^2jy-##KU zOg9X^e0*ziACyxyc^?JJ8A`Pkz7nK9)zQ+%7kz0JiVxk)fE(*P*-onZ2_z79ZL+&8 zfE%ze*zI+?QT0t=)U?5?czfJwBfwC0e3W>}L()&CW8-F3lmlFnbW2u{uKBz-A)Sy{ z;VsxyHks{hk(C@>)O_0Lu$-S3*hHsb{3iHKOAB5+s4Te+CjHnbvJOW|v66n_C!e^Q zFG;M6V4a%U!9oKVBKF3WsFHMMUDD!%Bo;}TjiANU2yp0KF*aiyJFZ@F&9_+d&X_KXS>?Z!A=X=iG)U3!V=npzy?}W1 z`f%*!Ib=`gfISvo$@fG64z-+=;KGL_Iq4e-XgI3}*fHl!-O4ZD?)L}30t)m?&-h(Y zoU@Ua^EXm+sQGu_7c@JE01hZ)Nmcrc4;$LxD@VHHMjX zLpHMt^tLOIv*^CV7^Vi@_J=EgOOrr~T6`9|*?GNS?1H6q%bON~EV@)oTOJk>?nKom z&-+8#fotX{Zt!&L!<6V&_YhMs$D%+MGjx%PyYU~qU0r&kZmRfR>B0~P@?s_3D(vM{UEPw^D09pX^+2p|uJQ`06 z#sHvZX%pGwy-Q(urB1`A?a7Vy;6qqTUsu`yGPs&tT5ngTUi(Iu;7nc+`^Ev(%GBf# z5(1)Ht4I6j64BZ$Kpd1vh}T;69ryh`U1N(%9A#CfUFLDBNhM#?b8gvVg|UMf!zU_Bw6`41IPkEg;~do zbM)8%xLAgRzV?N*Sgy1#B5eR}P>%lNf4~A*01J?(o;3xQ5ibYG$N&HU07*qoM6N<$ Ef&ku=PXGV_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..107156f2872dd469fa9360b83ce46fe3517de564 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0t4( z#WAE}&fBSm{7nu#t%ixBJ-dJDM|#Nk#6--M_?vmkkDR(TUIF2-5=F_#y`519t_sF?&3k&3cky6Qh&1+FvslW)E#2whtNeFVAih)$?=Gz0QK-L-2)u4u<|+NNeiwJd2K_}M4?|}-O<}m5`nyaZrfp$ubaR=X-nP$& zPcDDv&bi_4RWpft?OS?!-*pY#>n;g>Xq~d?Y>h2v6Ug;K3`Hso*t`XjQ256Gia(&f z;TLnvj=iG)`2RBQ>$~#jiLXJ8Y1}UR1Hnt|6?9Sz_8eTNc~Aa9x5h&@dLv_o;T&Hzg_DeSVr(B0+_#HF=AG{3c5!F-5d|SE@GO`* zPkoB5L&)3yQUH?HTABPAzX}klz*3dv+%o}s{bAxhq~H7ycZT6y+S^OE<8hYW=_T%L7ofo*W+!?gdb?VM_I%8Vb|+Y4&F&raSP%yPSW z>ErYpl6Nofb(A#_65zcr@Mw4CgY7JHkG=hR{%gjMKC6Tp4m-QAjc>%S&DNP5VBW(z zCqAanPDW;GfBkdQ10D{te#OyGY*AfsKt_<^SqFoGJ4*wy;~dfxRp-WLMc!S*bYVC9 z@|g!u-YSYR-Jx6YZr`E!xn6?l!mC*ytYnJuT#z1IzF9H&ks?JGhL0e?-SW{+7G|`P0w#=5Sx)D{8GO3#(RMAA5i9<6i;k>_v=Q z0!+4OA4)CqIp4>$WZPEZy1R?t|G%cM?}P|kG_U<+T7K^@`=eK!k-$i2@O1TaS?83{ F1OUR==|lhk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json new file mode 100644 index 00000000000..64c4a8da70f --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/be7a9f24f2bca68f07e4b0b086dc03a3eb9f971f/mojave/icons/structure/wall_decor.dmi. Wanted goose poster by maxxorion", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "clock", + "directions": 4 + }, + { + "name": "calendar" + }, + { + "name": "calendar_blank" + }, + { + "name": "notice_sign" + }, + { + "name": "danger_sign" + }, + { + "name": "wanted_poster" + }, + { + "name": "cross" + }, + { + "name": "exit", + "directions": 4 + }, + { + "name": "wallscreen", + "directions": 4 + }, + { + "name": "wanted_poster_goose" + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..2fca121f942c9a26d4a747db75c3ddf6c5c39471 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}&fBTBe1{Bp+$@9`2vO{r#!1BaxZSs&=!kr3{5#Bq^Wl^X-+g-_es zeSGx%ZdZjeJfCrCYt@8vSD$q}*0O|)a?_`ch-K1c9)U|$8$y9}PLelF{r5}E)tYkEom literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e18cc520dc22996b022d2cc256b5ea28cb1828df GIT binary patch literal 1312 zcmV+*1>gFKP)Px(+DSw~RCt{2n@wxmNF2r=8$k#-7(oMdDvb?h4+ifR_Gsq?=a4|Y!5#`Nlx06s zDGOcL?@;I-Hmq&=Sjg7kLowJRnjZv+XvAegwRHf}!6Wv}P z`P>HT^_s|!V-S1|IyyXX8DjvZ!U3RKDTDGk=U|NC?CcB9uWkSUFP=Zc%a=ckGPjQu<5S(-T^Y4GL2}FkOHZ^{pa1!*#?{Dz#{RiZ88vp=jG!}Wp$#G-ma})?UP>#7tG_s0XXN_ z-P;%G;CI9U1@Oc-YE=NhwS5cIv_xZ9Z75BQ`P>Gol`^)~O#r}YryGkPh&h0S1Awk; z&;ef{Y}*mzdl9znKvnZ%FQDrhFsaWpA>PLU5dab&OcUoedwsE$eoT~$ODnTe&|C_{i|5avs(I1aWxI43!CBt6 z9U=PS(u&3JfyhSe6f`%ON5PqgEK(*ef`im*ELMlK+pVi2MJeC+nJ3;f ztyzOa*o8^$3G>8LewGzWA{uf};GDxSIxtNukv-w)@W3@q3x?5|(M4KWvE-c$?e6X4 z-TM!4CT9ckA!(BFAIe(Lbxj=h{x&guiNjGk+w1oFK5r0lba>z zCprsw<7S?_lcJRrs8@$UPF9*L6xkIT1`UHnCh0gqy&72TYR%fV10a04Bk{VfC1Mjq z(2mbAI+3~n&(4ztfU~nNz5+^#t2B}ildh@^=pf+KTb@-Px3=P+C?6eq+~Ml=FPk$+w{+93A6-S0-H@> zczN;FGa_+5oy=$)e$vriM;go5`ko{HFCv4ku5Y#)5kPSy0xWkx6h4(EL(C%jy;lWF zBlvg@L~`FhlqLsB-_6FVqLKg-LSA%#es&;@$&aZlwl)DIw9O8ko;ZauJSL7E976$3 zBY^C|V?eieFQO}SDFcrPv7?bj1&|C#Z@-Xv4RpI}md7?GfUd9yY_GQ!W$bqUFiS{q zY}yTt2xKhyGgB1f;sEB2qKrBYs3gEZfu84(3g)kKviEI$1lWe-FkV8OTdt8Px$v`IukR9J=Wm9a|0P!xtgt-~Ec3#Ninu#^iG=_r`d-PK3%0elu8z(;U(cT{jJ zp+b-fV!)=5;&7LsLwnMsrs-9?i1{E(?#VfS&N+Vq6%`f#osF`?i}SM&R~Z1F1~2$w z!r^YMFjmew2Q2_1qqw}fF3k_HRd(nqLu3>H^|prau{2q|t%=P1SsO|P2$Nwzy{+-Q zZejAsD7IF1$bVU$uLOm_4ZEAZubu_sR)V9 zx?vTiBgk2B#*RZ;9GJ~}&UYNJQh*>cF2YqNCusCKTCV`HmMozkCTVA2zLZit9>)az z<$}L0K&*9ovJXt>FUux{g?Jp(*lv6o%Z~-P%6ze*A13L&#d%BNpdYO7Q@m&`&+Dei zU1gYLVx{$s?S@rxD*;8;%I-k63%aKny^d(^HL?8?TK$ZqNYD?KzFjIO($$6%~JiPc;(J$aLsQoB#j-07*qoM6N<$g45gNv;Y7A literal 0 HcmV?d00001 diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 87df8c1eec8..68b84c7fe2e 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -468,9 +468,6 @@ binds: - function: OpenDecalSpawnWindow type: State key: F8 -- function: OpenScoreboardWindow - type: State - key: F9 - function: OpenSandboxWindow type: State key: B From b4e9e44b0e2641fc5ea7936d9cdb5c156d3a2d39 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 22:46:23 +0000 Subject: [PATCH 131/182] Automatic Changelog Update (#1315) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 25ed44abaf0..efe7dccc2be 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8543,3 +8543,10 @@ Entries: id: 6569 time: '2024-12-10T19:13:47.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1331 +- author: VMSolidus + changes: + - type: Add + message: Added a large number of mapping assets from Nuclear14 + id: 6570 + time: '2024-12-11T22:45:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1315 From 0ed26cebf3e82c3aeb3d5d5096a3be6750cf1e77 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:52:53 -0400 Subject: [PATCH 132/182] Billions Must Flip (#1318) # Description Billions must flip. https://github.com/Goob-Station/Goob-Station/pull/828 https://github.com/Goob-Station/Goob-Station/pull/832 # Changelog :cl: - add: Spin, flip, and jump emotes have been added. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: username <113782077+whateverusername0@users.noreply.github.com> Co-authored-by: router --- .../Emoting/AnimatedEmotesSystem.cs | 121 ++++++++++++++++++ .../Chat/Systems/ChatSystem.Emote.cs | 2 +- .../Emoting/AnimatedEmotesSystem.cs | 28 ++++ .../Chat/Prototypes/EmotePrototype.cs | 4 + .../Emoting/AnimatedEmotesComponent.cs | 28 ++++ Content.Shared/Emoting/EmoteSystem.cs | 2 +- .../Emoting/SharedAnimatedEmotesSystem.cs | 18 +++ Resources/Locale/en-US/emotes.ftl | 7 + Resources/Prototypes/Actions/emotes.yml | 23 ++++ Resources/Prototypes/Entities/Mobs/base.yml | 8 ++ 10 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 Content.Client/Emoting/AnimatedEmotesSystem.cs create mode 100644 Content.Server/Emoting/AnimatedEmotesSystem.cs create mode 100644 Content.Shared/Emoting/AnimatedEmotesComponent.cs create mode 100644 Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs create mode 100644 Resources/Locale/en-US/emotes.ftl create mode 100644 Resources/Prototypes/Actions/emotes.yml diff --git a/Content.Client/Emoting/AnimatedEmotesSystem.cs b/Content.Client/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..40766b4e13e --- /dev/null +++ b/Content.Client/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,121 @@ +using Robust.Client.Animations; +using Robust.Shared.Animations; +using Robust.Shared.GameStates; +using Robust.Client.GameObjects; +using Content.Shared.Emoting; +using System.Numerics; +using Robust.Shared.Prototypes; +using Content.Shared.Chat.Prototypes; + +namespace Content.Client.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + [Dependency] private readonly AnimationPlayerSystem _anim = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHandleState); + + SubscribeLocalEvent(OnFlip); + SubscribeLocalEvent(OnSpin); + SubscribeLocalEvent(OnJump); + } + + public void PlayEmote(EntityUid uid, Animation anim, string animationKey = "emoteAnimKeyId") + { + if (_anim.HasRunningAnimation(uid, animationKey)) + return; + + _anim.Play(uid, anim, animationKey); + } + + private void OnHandleState(EntityUid uid, AnimatedEmotesComponent component, ref ComponentHandleState args) + { + if (args.Current is not AnimatedEmotesComponentState state + || !_prot.TryIndex(state.Emote, out var emote)) + return; + + if (emote.Event != null) + RaiseLocalEvent(uid, emote.Event); + } + + private void OnFlip(Entity ent, ref AnimationFlipEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(500), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.25f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(360), 0.25f), + } + } + } + }; + PlayEmote(ent, a); + } + private void OnSpin(Entity ent, ref AnimationSpinEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(600), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(TransformComponent), + Property = nameof(TransformComponent.LocalRotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + } + } + } + }; + PlayEmote(ent, a, "emoteAnimSpin"); + } + private void OnJump(Entity ent, ref AnimationJumpEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(250), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Offset), + InterpolationMode = AnimationInterpolationMode.Cubic, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0f), + new AnimationTrackProperty.KeyFrame(new Vector2(0, .35f), 0.125f), + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0.125f), + } + } + } + }; + PlayEmote(ent, a); + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index 724cf8f2bb1..3ee94072ca2 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -176,7 +176,7 @@ private void TryEmoteChatInput(EntityUid uid, string textInput) private void InvokeEmoteEvent(EntityUid uid, EmotePrototype proto) { var ev = new EmoteEvent(proto); - RaiseLocalEvent(uid, ref ev); + RaiseLocalEvent(uid, ref ev, true); // goob edit } } diff --git a/Content.Server/Emoting/AnimatedEmotesSystem.cs b/Content.Server/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..cc4863d31f7 --- /dev/null +++ b/Content.Server/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,28 @@ +using Robust.Shared.GameStates; +using Content.Server.Chat.Systems; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Emoting; +using Robust.Shared.Prototypes; + +namespace Content.Server.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmote); + } + + private void OnEmote(EntityUid uid, AnimatedEmotesComponent component, ref EmoteEvent args) + { + PlayEmoteAnimation(uid, component, args.Emote.ID); + } + + public void PlayEmoteAnimation(EntityUid uid, AnimatedEmotesComponent component, ProtoId prot) + { + component.Emote = prot; + Dirty(uid, component); + } +} diff --git a/Content.Shared/Chat/Prototypes/EmotePrototype.cs b/Content.Shared/Chat/Prototypes/EmotePrototype.cs index 7ee958ee6a7..34d54bc3600 100644 --- a/Content.Shared/Chat/Prototypes/EmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmotePrototype.cs @@ -68,6 +68,10 @@ public sealed partial class EmotePrototype : IPrototype ///

[DataField] public HashSet ChatTriggers = new(); + + // goob edit - animations + [DataField] + public object? Event = null; } /// diff --git a/Content.Shared/Emoting/AnimatedEmotesComponent.cs b/Content.Shared/Emoting/AnimatedEmotesComponent.cs new file mode 100644 index 00000000000..fc8121bbe5a --- /dev/null +++ b/Content.Shared/Emoting/AnimatedEmotesComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Emoting; + +// use as a template +//[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationNameEmoteEvent : EntityEventArgs { } + +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationFlipEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationSpinEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationJumpEmoteEvent : EntityEventArgs { } + +[RegisterComponent, NetworkedComponent] public sealed partial class AnimatedEmotesComponent : Component +{ + [DataField] public ProtoId? Emote; +} + +[Serializable, NetSerializable] public sealed partial class AnimatedEmotesComponentState : ComponentState +{ + public ProtoId? Emote; + + public AnimatedEmotesComponentState(ProtoId? emote) + { + Emote = emote; + } +} diff --git a/Content.Shared/Emoting/EmoteSystem.cs b/Content.Shared/Emoting/EmoteSystem.cs index 1e06d7e982b..fea322e950c 100644 --- a/Content.Shared/Emoting/EmoteSystem.cs +++ b/Content.Shared/Emoting/EmoteSystem.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.Emoting; +namespace Content.Shared.Emoting; public sealed class EmoteSystem : EntitySystem { diff --git a/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs new file mode 100644 index 00000000000..b19e8c26a1e --- /dev/null +++ b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Emoting; + +public abstract class SharedAnimatedEmotesSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetState); + } + + private void OnGetState(Entity ent, ref ComponentGetState args) + { + args.State = new AnimatedEmotesComponentState(ent.Comp.Emote); + } +} diff --git a/Resources/Locale/en-US/emotes.ftl b/Resources/Locale/en-US/emotes.ftl new file mode 100644 index 00000000000..8efe738c94a --- /dev/null +++ b/Resources/Locale/en-US/emotes.ftl @@ -0,0 +1,7 @@ +chat-emote-name-flip = Do a flip +chat-emote-name-spin = Spin +chat-emote-name-jump = Jump + +chat-emote-msg-flip = does a flip! +chat-emote-msg-spin = spins! +chat-emote-msg-jump = jumps! \ No newline at end of file diff --git a/Resources/Prototypes/Actions/emotes.yml b/Resources/Prototypes/Actions/emotes.yml new file mode 100644 index 00000000000..6f34a4dc94d --- /dev/null +++ b/Resources/Prototypes/Actions/emotes.yml @@ -0,0 +1,23 @@ +- type: emote + id: Flip + name: chat-emote-name-flip + chatMessages: ["chat-emote-msg-flip"] + chatTriggers: + - does a flip + event: !type:AnimationFlipEmoteEvent + +- type: emote + id: Spin + name: chat-emote-name-spin + chatMessages: ["chat-emote-msg-spin"] + chatTriggers: + - spins + event: !type:AnimationSpinEmoteEvent + +- type: emote + id: Jump + name: chat-emote-name-jump + chatMessages: ["chat-emote-msg-jump"] + chatTriggers: + - jumps + event: !type:AnimationJumpEmoteEvent diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index 5ab790feeef..da413c339d8 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -46,6 +46,14 @@ - type: LanguageSpeaker # Einstein Engines. This component is required to support speech, although it does not define known languages. - type: RequireProjectileTarget active: False + - type: AnimatedEmotes + +- type: entity + save: false + id: MobPolymorphable + abstract: true + components: + - type: Polymorphable - type: OwnInteractionVerbs allowedVerbs: [] # TODO: define something here, or don't. From 39d250fb74e5da7d87fae08c662cd88f914d2df6 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 22:53:19 +0000 Subject: [PATCH 133/182] Automatic Changelog Update (#1318) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index efe7dccc2be..4c89d1dd134 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8550,3 +8550,10 @@ Entries: id: 6570 time: '2024-12-11T22:45:57.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1315 +- author: sleepyyapril + changes: + - type: Add + message: Spin, flip, and jump emotes have been added. + id: 6571 + time: '2024-12-11T22:52:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1318 From 946b7664763b8b823215a710743d74b4b0dd6a79 Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 12 Dec 2024 07:12:43 +0800 Subject: [PATCH 134/182] Re-Enable Clown/Mime Hardsuit and Clown Snoring (#1324) # Description Reverses one of the countless content removals from the old codebase EE was based on by adding back the Clown hardsuit and Mime hardsuit as craftable items. Also re-enables the unique clown snoring sound. ## Media **Hardsuits (renamed to Vacsuit)**
**Honk Mimimimi** https://github.com/user-attachments/assets/2d8af9a6-d17d-4a94-9f59-7b3aafd987a2 ## Changelog :cl: Skubman - fix: Fixed an issue where players could not craft clown hardsuits and mime hardsuits on the crafting menu. - fix: Fixed an issue where clowns did not have their signature silly snore sound when sleeping. --------- Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Clothing/OuterClothing/hardsuits.yml | 12 +-- .../Graphs/clothing/mime_hardsuit.yml | 86 +++++++++---------- .../Recipes/Construction/clothing.yml | 40 ++++----- .../Prototypes/Roles/Jobs/Civilian/clown.yml | 8 +- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index d1976329900..a9bb8f1dc77 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -1043,9 +1043,9 @@ walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - #- type: Construction # DeltaV - Prevent clowns from making the hardsuit - # graph: ClownHardsuit - # node: clownHardsuit + - type: Construction + graph: ClownHardsuit + node: clownHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitClown @@ -1060,9 +1060,9 @@ sprite: Clothing/OuterClothing/Hardsuits/mime.rsi - type: Clothing sprite: Clothing/OuterClothing/Hardsuits/mime.rsi -# - type: Construction # DeltaV - Nuh uh -# graph: MimeHardsuit -# node: mimeHardsuit + - type: Construction + graph: MimeHardsuit + node: mimeHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitMime diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml index 4d9c55fbc63..a72a5ccc8c8 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml @@ -1,43 +1,43 @@ -#- type: constructionGraph # DeltaV - Nuh uh -# id: MimeHardsuit -# start: start -# graph: -# - node: start -# edges: -# - to: mimeHardsuit -# steps: -# - material: Cloth -# amount: 5 -# doAfter: 1 -# - tag: SuitEVA -# name: An EVA suit -# icon: -# sprite: Clothing/OuterClothing/Suits/eva.rsi -# state: icon -# doAfter: 1 -# - tag: HelmetEVA -# name: An EVA helmet -# icon: -# sprite: Clothing/Head/Helmets/eva.rsi -# state: icon -# doAfter: 1 -# - tag: CrayonRed -# name: red crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: red -# doAfter: 1 -# - tag: CrayonBlack -# name: black crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: black -# doAfter: 1 -# - tag: MimeBelt -# name: suspenders -# icon: -# sprite: Clothing/Belt/suspenders.rsi -# state: icon -# doAfter: 1 -# - node: mimeHardsuit -# entity: ClothingOuterHardsuitMime +- type: constructionGraph + id: MimeHardsuit + start: start + graph: + - node: start + edges: + - to: mimeHardsuit + steps: + - material: Cloth + amount: 5 + doAfter: 1 + - tag: SuitEVA + name: An EVA suit + icon: + sprite: Clothing/OuterClothing/Suits/eva.rsi + state: icon + doAfter: 1 + - tag: HelmetEVA + name: An EVA helmet + icon: + sprite: Clothing/Head/Helmets/eva.rsi + state: icon + doAfter: 1 + - tag: CrayonRed + name: red crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: red + doAfter: 1 + - tag: CrayonBlack + name: black crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: black + doAfter: 1 + - tag: MimeBelt + name: suspenders + icon: + sprite: Clothing/Belt/suspenders.rsi + state: icon + doAfter: 1 + - node: mimeHardsuit + entity: ClothingOuterHardsuitMime diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index ba0c0d6c59b..3036463fb03 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -1,24 +1,24 @@ -# - type: construction # DeltaV - Prevent clowns from making the hardsuit -# name: clown hardsuit -# id: ClownHardsuit -# graph: ClownHardsuit -# startNode: start -# targetNode: clownHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a clown. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } -# objectType: Item +- type: construction + name: clown vacsuit + id: ClownHardsuit + graph: ClownHardsuit + startNode: start + targetNode: clownHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a clown. + icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } + objectType: Item -#- type: construction # DeltaV - No mimes either -# name: mime hardsuit -# id: MimeHardsuit -# graph: MimeHardsuit -# startNode: start -# targetNode: mimeHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a mime. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } -# objectType: Item +- type: construction + name: mime vacsuit + id: MimeHardsuit + graph: MimeHardsuit + startNode: start + targetNode: mimeHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a mime. + icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } + objectType: Item - type: construction name: bone armor diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index 141f4d39b76..22b8cfd48ac 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -23,10 +23,10 @@ Piercing: 4 groups: Burn: 3 -# DeltaV - Commenting out the clown snore sound because I am not fond of it (it makes me itchy and feral). By "I", I mean Leonardo_DaBepis. -# - type: SleepEmitSound -# snore: /Audio/Voice/Misc/silly_snore.ogg -# interval: 10 + - type: SleepEmitSound + snore: /Audio/Voice/Misc/silly_snore.ogg + interval: 10 + - type: Snoring # Necessary so SleepEmitSound sound effects play - !type:AddImplantSpecial implants: [ SadTromboneImplant ] From 48d63bacf6bd665c8ff98e33d5da3a0e1e4ffb52 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 23:13:10 +0000 Subject: [PATCH 135/182] Automatic Changelog Update (#1324) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4c89d1dd134..81d1ee417a9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8557,3 +8557,16 @@ Entries: id: 6571 time: '2024-12-11T22:52:53.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1318 +- author: Skubman + changes: + - type: Fix + message: >- + Fixed an issue where players could not craft clown hardsuits and mime + hardsuits on the crafting menu. + - type: Fix + message: >- + Fixed an issue where clowns did not have their signature silly snore + sound when sleeping. + id: 6572 + time: '2024-12-11T23:12:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1324 From 975c673d41f7379975e3d9bed07d29a33371b39a Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Thu, 12 Dec 2024 06:19:30 +0700 Subject: [PATCH 136/182] Blood Cult DLC 1: Make It an Actually Playable Game (Mode) (#1276) # Description You don't actually have to pay for it, y'know? --- # TODO - [x] Fix bugs from discord thread. ---

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: - add: In-game guide book to kickstart your sinister activities. - add: Constructs now have abilities. - add: Rending rune and apocalypse rune now should only be placed in the specific spots on maps. Needs to be mapped. - add: Veil Shifter now displays how much charges it has when examining. - add: Cult runes now have descriptions. Also stating how much invokers required for each rune. - add: Blood rites can now be dropped&deleted. - add: Blood rites now suck... blood in 0.5 tiles radius. - remove: Non-cultists can no longer examine runes. - fix: Fixed Cult Objective Target selection. You can (and should) sacrifice your own people now. - fix: Non cultists can no longer use veil shifter. - fix: Teleport spell is no more a cheap rip-off and now actually teleports. - fix: Timed Factories can't no more produce infinite number of entities. - fix: Offering rune should now properly convert someone. - fix: Sacrificing body with mind now properly transfers their mind to soul shard. - fix: Shadow Shackles now cuffs the target instead of the caster (lmao). --------- Signed-off-by: Remuchi Signed-off-by: Remuchi <72476615+Remuchi@users.noreply.github.com> Co-authored-by: Raphael Bertoche Co-authored-by: VMSolidus --- .../ListViewSelector/ListViewSelectorBUI.cs | 2 +- .../BloodCult/PhaseShift/PhaseShiftSystem.cs | 5 + .../BloodCult/Runes/UI/RuneDrawerBUI.cs | 61 +++-- .../BloodRites/BloodRitesAuraComponent.cs | 3 + .../BloodCult/BloodRites/BloodRitesSystem.cs | 58 ++++- .../BloodCult/ConstructActionsSystem.cs | 67 ++++++ .../BloodCult/Constructs/ConstructSystem.cs | 31 ++- .../Constructs/PhaseShift/PhaseShiftSystem.cs | 34 +++ .../Constructs/SoulShard/SoulShardSystem.cs | 14 +- .../Gamerule/BloodCultRuleComponent.cs | 13 ++ .../BloodCult/Gamerule/BloodCultRuleSystem.cs | 220 +++++++++++++----- .../Items/VeilShifter/VeilShifterSystem.cs | 12 +- .../Objectives/KillTargetCultComponent.cs | 2 +- .../Objectives/KillTargetCultSystem.cs | 26 ++- .../RendingRunePlacementMarkerComponent.cs | 11 + .../Apocalypse/CultRuneApocalypseSystem.cs | 7 +- .../BloodCult/Runes/CultRuneBaseComponent.cs | 12 +- .../Runes/CultRuneBaseSystem.Helpers.cs | 6 +- .../BloodCult/Runes/CultRuneBaseSystem.cs | 101 +++++--- .../Offering/CultRuneOfferingComponent.cs | 9 +- .../Runes/Offering/CultRuneOfferingSystem.cs | 77 +++--- .../Runes/Rending/CultRuneRendingSystem.cs | 22 +- .../BloodCult/Spells/BloodCultSpellsSystem.cs | 16 +- .../Spells/BloodCultTeleportSpellSystem.cs | 25 +- .../TimedFactory/TimedFactorySystem.cs | 6 +- .../ListViewSelector/ListViewSelectorEntry.cs | 4 +- .../Magic/Events/ProjectileSpellEvent.cs | 3 + Content.Shared/Magic/SharedMagicSystem.cs | 2 +- .../PhaseShift/PhaseShiftedComponent.cs | 39 ++++ .../PhaseShift/SharedPhaseShiftSystem.cs | 95 ++++++++ .../BloodCult/Items/CultItemSystem.cs | 11 + .../BloodCult/Runes/RuneDrawerComponent.cs | 10 +- .../BloodCult/Runes/RuneSelectorPrototype.cs | 19 +- .../WhiteDream/BloodCult/Spells/Events.cs | 26 +++ .../WhiteDream/BloodCult/resonator_blast.ogg | Bin 0 -> 20713 bytes Resources/Locale/en-US/guidebook/guides.ftl | 1 + Resources/Locale/en-US/white-dream/alerts.ftl | 7 +- .../en-US/white-dream/cult/gamerule.ftl | 2 + .../en-US/white-dream/cult/items/general.ftl | 5 + .../Locale/en-US/white-dream/cult/runes.ftl | 5 +- .../Locale/en-US/white-dream/cult/spells.ftl | 2 +- .../Entities/Effects/emp_effects.yml | 32 +-- Resources/Prototypes/Guidebook/antagonist.yml | 6 + .../WhiteDream/Entities/Actions/cultists.yml | 187 ++++++++++++++- .../Entities/Objects/Cult/constructs.yml | 24 +- .../Entities/Objects/Cult/souls_shards.yml | 18 ++ .../Entities/Objects/Runes/cult.yml | 13 ++ .../Objects/Structures/Cult/barrier.yml | 17 +- .../Entities/Objects/Weapons/Melee/cult.yml | 5 +- .../Objects/Weapons/Projectiles/cult.yml | 20 ++ .../WhiteDream/Entities/markers.yml | 13 ++ .../{runeSelectors.yml => rune_selectors.yml} | 4 + Resources/Prototypes/status_effects.yml | 3 + .../Guidebook/Antagonist/BloodCult.xml | 184 +++++++++++++++ .../projectiles2.rsi/gauntlet_echo.png | Bin 0 -> 1852 bytes .../Projectiles/projectiles2.rsi/meta.json | 18 +- .../BloodCult/actions.rsi/gauntlet_echo.png | Bin 0 -> 974 bytes .../BloodCult/actions.rsi/meta.json | 3 + 58 files changed, 1326 insertions(+), 292 deletions(-) create mode 100644 Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs create mode 100644 Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/markers.yml rename Resources/Prototypes/WhiteDream/{runeSelectors.yml => rune_selectors.yml} (88%) create mode 100644 Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml create mode 100644 Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/gauntlet_echo.png diff --git a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs index f02bab512e8..dd1f2299427 100644 --- a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs +++ b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs @@ -84,7 +84,7 @@ private void PopulateWindow(List items) { var itemName = item.Name; var itemDesc = item.Description; - if (_prototypeManager.TryIndex(item.Id, out var itemPrototype)) + if (_prototypeManager.TryIndex(item.Id, out var itemPrototype, false)) { itemName = itemPrototype.Name; itemDesc = itemPrototype.Description; diff --git a/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..881d8cc023a --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +namespace Content.Client.WhiteDream.BloodCult.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem; diff --git a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs index ed0f27bc5da..c3476c41d22 100644 --- a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs +++ b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Numerics; +using System.Numerics; using Content.Client.UserInterface.Controls; using Content.Shared.WhiteDream.BloodCult.Runes; using JetBrains.Annotations; @@ -23,17 +22,22 @@ public sealed class RuneDrawerBUI : BoundUserInterface [Dependency] private readonly IInputManager _inputManager = default!; private readonly SpriteSystem _spriteSystem; - - private RadialMenu? _menu; + private readonly RadialMenu _menu; public RuneDrawerBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _spriteSystem = _entManager.System(); + _menu = new() + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; } protected override void Open() { - _menu = FormMenu(); _menu.OnClose += Close; _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); } @@ -41,53 +45,49 @@ protected override void Open() protected override void Dispose(bool disposing) { base.Dispose(disposing); - if (disposing) - _menu?.Dispose(); + _menu.Close(); } - private RadialMenu FormMenu() + protected override void UpdateState(BoundUserInterfaceState state) { - var menu = new RadialMenu - { - HorizontalExpand = true, - VerticalExpand = true, - BackButtonStyleClass = "RadialMenuBackButton", - CloseButtonStyleClass = "RadialMenuCloseButton" - }; - - if (!_entManager.HasComponent(Owner)) - return menu; + if (state is RuneDrawerMenuState runeDrawerState) + FillMenu(runeDrawerState.AvailalbeRunes); + } - var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + private void FillMenu(List>? runes = null) + { + if (runes is null) + return; - var mainContainer = new RadialContainer + var container = new RadialContainer { - Radius = 36f / (runeSelectorArray.Length == 1 - ? 1 - : MathF.Sin(MathF.PI / runeSelectorArray.Length)) + Radius = 48f + 24f * MathF.Log(runes.Count) }; - foreach (var runeSelector in runeSelectorArray) + _menu.AddChild(container); + + foreach (var runeSelector in runes) { - if (!_protoManager.TryIndex(runeSelector.Prototype, out var proto)) + if (!_protoManager.TryIndex(runeSelector, out var runeSelectorProto) || + !_protoManager.TryIndex(runeSelectorProto.Prototype, out var runeProto)) continue; var itemSize = new Vector2(64f, 64f); var button = new RadialMenuTextureButton { - ToolTip = Loc.GetString(proto.Name), + ToolTip = Loc.GetString(runeProto.Name), StyleClasses = { "RadialMenuButton" }, SetSize = itemSize }; - var runeIcon = _spriteSystem.Frame0(proto); + var runeIcon = _spriteSystem.Frame0(runeProto); var runeScale = itemSize / runeIcon.Size; var texture = new TextureRect { VerticalAlignment = Control.VAlignment.Center, HorizontalAlignment = Control.HAlignment.Center, - Texture = _spriteSystem.Frame0(proto), + Texture = _spriteSystem.Frame0(runeProto), TextureScale = runeScale }; @@ -99,10 +99,7 @@ private RadialMenu FormMenu() Close(); }; - mainContainer.AddChild(button); + container.AddChild(button); } - - menu.AddChild(mainContainer); - return menu; } } diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs index 09e92b31c5a..081e0e04c6e 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs @@ -51,6 +51,9 @@ public sealed partial class BloodRitesAuraComponent : Component [DataField] public FixedPoint2 TotalHealing = 20; + [DataField] + public float PuddleConsumeRadius = 0.5f; + [DataField] public SoundSpecifier BloodRitesAudio = new SoundPathSpecifier( new ResPath("/Audio/WhiteDream/BloodCult/rites.ogg"), diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs index 76adc9bde89..63b1c08aaca 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs @@ -10,7 +10,9 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.DoAfter; using Content.Shared.Examine; +using Content.Shared.Fluids.Components; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.UserInterface; @@ -34,6 +36,7 @@ public sealed class BloodRitesSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; @@ -52,6 +55,8 @@ public override void Initialize() SubscribeLocalEvent(BeforeUiOpen); SubscribeLocalEvent(OnRitesMessage); + + SubscribeLocalEvent(OnDropped); } private void OnExamining(Entity rites, ref ExaminedEvent args) => @@ -83,19 +88,16 @@ private void OnAfterInteract(Entity rites, ref AfterInt return; } - if (!TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) // please send help - return; - - foreach (var (_, solution) in _solutionContainer.EnumerateSolutions((args.Target.Value, solutionContainer))) + if (HasComp(args.Target)) { - // I don't think something will ever have more than 1000 blood units in it's solution... - rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); - _solutionContainer.UpdateChemicals(solution); - break; + ConsumePuddles(args.Target.Value, rites); + args.Handled = true; + } + else if (TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) + { + ConsumeBloodFromSolution((args.Target.Value, solutionContainer), rites); + args.Handled = true; } - - _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); - args.Handled = true; } private void OnDoAfter(Entity rites, ref BloodRitesExtractDoAfterEvent args) @@ -154,6 +156,8 @@ private void OnRitesMessage(Entity rites, ref BloodRite _handsSystem.TryPickup(args.Actor, ent); } + private void OnDropped(Entity rites, ref DroppedEvent args) => QueueDel(rites); + private bool Heal(Entity rites, EntityUid user, Entity target) { if (target.Comp.TotalDamage == 0) @@ -234,4 +238,36 @@ Entity target rites.Comp.StoredBlood -= bloodCost; return true; } + + private void ConsumePuddles(EntityUid origin, Entity rites) + { + var coords = Transform(origin).Coordinates; + + var lookup = _lookup.GetEntitiesInRange( + coords, + rites.Comp.PuddleConsumeRadius, + LookupFlags.Uncontained); + + foreach (var puddle in lookup) + { + if (!TryComp(puddle, out SolutionContainerManagerComponent? solutionContainer)) + continue; + ConsumeBloodFromSolution((puddle, solutionContainer), rites); + } + + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + } + + private void ConsumeBloodFromSolution( + Entity ent, + Entity rites + ) + { + foreach (var (_, solution) in _solutionContainer.EnumerateSolutions(ent)) + { + rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); + _solutionContainer.UpdateChemicals(solution); + break; + } + } } diff --git a/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs new file mode 100644 index 00000000000..3d5e4ae44cb --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs @@ -0,0 +1,67 @@ +using Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; +using Content.Shared.StatusEffect; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using PhaseShiftedComponent = Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift.PhaseShiftedComponent; + +namespace Content.Server.WhiteDream.BloodCult; + +public sealed class ConstructActionsSystem : EntitySystem +{ + [Dependency] private readonly ITileDefinitionManager _tileDef = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + private const string CultTileSpawnEffect = "CultTileSpawnEffect"; + + public override void Initialize() + { + SubscribeLocalEvent(OnPlaceTileEntityEvent); + SubscribeLocalEvent(OnPhaseShift); + } + + private void OnPlaceTileEntityEvent(PlaceTileEntityEvent args) + { + if (args.Handled) + return; + + if (args.Entity is { } entProtoId) + Spawn(entProtoId, args.Target); + + if (args.TileId is { } tileId) + { + if (_transform.GetGrid(args.Target) is not { } grid || !TryComp(grid, out MapGridComponent? mapGrid)) + return; + + var tileDef = _tileDef[tileId]; + var tile = new Tile(tileDef.TileId); + + _mapSystem.SetTile(grid, mapGrid, args.Target, tile); + Spawn(CultTileSpawnEffect, args.Target); + } + + if (args.Audio is { } audio) + _audio.PlayPvs(audio, args.Target); + + args.Handled = true; + } + + private void OnPhaseShift(PhaseShiftEvent args) + { + if (args.Handled) + return; + + if (_statusEffects.TryAddStatusEffect( + args.Performer, + args.StatusEffectId, + args.Duration, + false)) + args.Handled = true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs index fbb800eb0ba..c07f56a585b 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs @@ -1,4 +1,5 @@ -using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Server.Actions; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.WhiteDream.BloodCult; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Server.GameObjects; @@ -7,13 +8,14 @@ namespace Content.Server.WhiteDream.BloodCult.Constructs; public sealed class ConstructSystem : EntitySystem { + [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnComponentShutdown); } @@ -37,23 +39,28 @@ public override void Update(float frameTime) } } - private void OnComponentStartup(Entity ent, ref ComponentStartup args) + private void OnMapInit(Entity construct, ref MapInitEvent args) { - _appearanceSystem.SetData(ent, ConstructVisualsState.Transforming, true); - ent.Comp.Transforming = true; - var cultistRule = EntityManager.EntityQueryEnumerator(); - while (cultistRule.MoveNext(out _, out var rule)) + foreach (var actionId in construct.Comp.Actions) { - rule.Constructs.Add(ent); + var action = _actions.AddAction(construct, actionId); + construct.Comp.ActionEntities.Add(action); } + + _appearanceSystem.SetData(construct, ConstructVisualsState.Transforming, true); + construct.Comp.Transforming = true; + var cultistRule = EntityManager.EntityQueryEnumerator(); + while (cultistRule.MoveNext(out _, out var rule)) + rule.Constructs.Add(construct); } - private void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + private void OnComponentShutdown(Entity construct, ref ComponentShutdown args) { + foreach (var actionEntity in construct.Comp.ActionEntities) + _actions.RemoveAction(actionEntity); + var cultistRule = EntityManager.EntityQueryEnumerator(); while (cultistRule.MoveNext(out _, out var rule)) - { - rule.Constructs.Remove(ent); - } + rule.Constructs.Remove(construct); } } diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..1885b42d222 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Eye; +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem +{ + [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; + + protected override void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + base.OnComponentStartup(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } + + protected override void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + base.OnComponentShutdown(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs index 50e92bf2770..7a8578b665f 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs @@ -27,12 +27,22 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnShardMindAdded); SubscribeLocalEvent(OnShardMindRemoved); } + private void OnMapInit(Entity shard, ref MapInitEvent args) + { + if (!shard.Comp.IsBlessed) + return; + + _appearanceSystem.SetData(shard, SoulShardVisualState.Blessed, true); + _lightSystem.SetColor(shard, shard.Comp.BlessedLightColor); + } + private void OnActivate(Entity shard, ref ActivateInWorldEvent args) { if (!_mind.TryGetMind(shard, out var mindId, out _)) @@ -76,10 +86,8 @@ private void OnShardMindAdded(Entity shard, ref MindAddedMes UpdateGlowVisuals(shard, true); } - private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) - { + private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) => UpdateGlowVisuals(shard, false); - } private void SpawnShade(Entity shard, EntProtoId proto, EntityUid mindId) { diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs index 09dc2b542fb..d0a1991a9fd 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Server.NPC.Components; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Shared.Prototypes; @@ -26,9 +27,21 @@ public sealed partial class BloodCultRuleComponent : Component [DataField] public int PentagramThreshold = 8; + [DataField] + public int RendingRunePlacementsAmount = 3; + [ViewVariables(VVAccess.ReadOnly)] public bool LeaderSelected; + /// + /// If no rending rune markers were placed on the map, players will be able to place these runes anywhere on the map + /// but no more than total available. + /// + [DataField] + public bool EmergencyMarkersMode; + + public int EmergencyMarkersCount; + /// /// The entityUid of body which should be sacrificed. /// diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs index c753d929134..bfb06c85ccf 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs @@ -3,36 +3,39 @@ using Content.Server.Actions; using Content.Server.Antag; using Content.Server.Antag.Components; +using Content.Server.Body.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; using Content.Server.Hands.Systems; using Content.Server.Language; +using Content.Server.Mind; using Content.Server.NPC.Systems; +using Content.Server.Pinpointer; using Content.Server.Roles; using Content.Server.RoundEnd; -using Content.Server.StationEvents.Components; using Content.Server.WhiteDream.BloodCult.Items.BloodSpear; using Content.Server.WhiteDream.BloodCult.Objectives; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Server.WhiteDream.BloodCult.Spells; -using Content.Shared.Body.Systems; using Content.Shared.Cloning; using Content.Shared.Cuffs.Components; using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.Inventory; -using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Mood; using Content.Shared.Movement.Pulling.Components; -using Content.Shared.Roles; using Content.Shared.WhiteDream.BloodCult.Components; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Items; using Robust.Server.Containers; +using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Random; +using Robust.Shared.Utility; namespace Content.Server.WhiteDream.BloodCult.Gamerule; @@ -43,16 +46,18 @@ public sealed class BloodCultRuleSystem : GameRuleSystem [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AntagSelectionSystem _antagSelection = default!; [Dependency] private readonly BloodSpearSystem _bloodSpear = default!; + [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly HandsSystem _hands = default!; - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly LanguageSystem _languageSystem = default!; - [Dependency] private readonly NpcFactionSystem _factionSystem = default!; - [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; - [Dependency] private readonly SharedBodySystem _bodySystem = default!; - [Dependency] private readonly SharedRoleSystem _roleSystem = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly LanguageSystem _language = default!; + [Dependency] private readonly NavMapSystem _navMap = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly RoleSystem _role = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; + [Dependency] private readonly TransformSystem _transform = default!; public override void Initialize() { @@ -79,7 +84,7 @@ GameRuleStartedEvent args { base.Started(uid, component, gameRule, args); - component.OfferingTarget = FindTarget(); + GetRandomRunePlacements(component); } protected override void AppendRoundEndText( @@ -103,6 +108,8 @@ ref RoundEndTextAppendEvent args } } + #region EventHandlers + private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) => MakeCultist(args.EntityUid, ent); @@ -112,7 +119,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) while (rulesQuery.MoveNext(out _, out var cult, out _)) { cult.WinCondition = CultWinCondition.Win; - _roundEndSystem.EndRound(); + _roundEnd.EndRound(); foreach (var ent in cult.Cultists) { @@ -121,8 +128,8 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) continue; var harvester = Spawn(cult.HarvesterPrototype, Transform(ent.Owner).Coordinates); - _mindSystem.TransferTo(mindContainer.Mind.Value, harvester); - _bodySystem.GibBody(ent); + _mind.TransferTo(mindContainer.Mind.Value, harvester); + _body.GibBody(ent); } return; @@ -132,7 +139,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) private void OnCultistComponentInit(Entity cultist, ref ComponentInit args) { RaiseLocalEvent(cultist, new MoodEffectEvent("CultFocused")); - _languageSystem.AddLanguage(cultist, cultist.Comp.CultLanguageId); + _language.AddLanguage(cultist, cultist.Comp.CultLanguageId); var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) @@ -148,7 +155,7 @@ private void OnCultistComponentRemoved(Entity cultist, re while (query.MoveNext(out _, out var cult, out _)) cult.Cultists.Remove(cultist); - CheckRoundShouldEnd(); + CheckWinCondition(); if (TerminatingOrDeleted(cultist.Owner)) return; @@ -157,7 +164,7 @@ private void OnCultistComponentRemoved(Entity cultist, re RemoveCultistAppearance(cultist); RemoveObjectiveAndRole(cultist.Owner); RaiseLocalEvent(cultist.Owner, new MoodRemoveEffectEvent("CultFocused")); - _languageSystem.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); + _language.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); if (!TryComp(cultist, out BloodCultSpellsHolderComponent? powersHolder)) return; @@ -166,16 +173,46 @@ private void OnCultistComponentRemoved(Entity cultist, re _actions.RemoveAction(cultist.Owner, power); } - private void OnCultistsStateChanged(Entity ent, ref MobStateChangedEvent args) + private void OnCultistsStateChanged(Entity cultist, ref MobStateChangedEvent args) { if (args.NewMobState == MobState.Dead) - CheckRoundShouldEnd(); + CheckWinCondition(); } - private void OnClone(Entity ent, ref CloningEvent args) => RemoveObjectiveAndRole(ent); + private void OnClone(Entity cultist, ref CloningEvent args) => + RemoveObjectiveAndRole(cultist); - private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) => + private void OnGetBriefing(Entity cultist, ref GetBriefingEvent args) + { args.Append(Loc.GetString("blood-cult-role-briefing-short")); + var rulesQuery = QueryActiveRules(); + while (rulesQuery.MoveNext(out _, out var rule, out _)) + { + if (!rule.EmergencyMarkersMode) + continue; + + args.Append( + Loc.GetString("blood-cult-role-briefing-emergency-rending", ("amount", rule.EmergencyMarkersCount))); + return; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var navMapLocation = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(uid)); + var coordinates = Transform(uid).Coordinates; + var msg = Loc.GetString( + "blood-cult-role-briefing-rending-locations", + ("location", navMapLocation), + ("coordinates", coordinates.Position)); + args.Append(Loc.GetString(msg)); + } + } + + #endregion public void Convert(EntityUid target) { @@ -190,12 +227,15 @@ public void Convert(EntityUid target) var antagSelectionEnt = (ruleUid, antagSelection); if (!_antagSelection.TryGetNextAvailableDefinition(antagSelectionEnt, out var def)) - continue; + def = antagSelection.Definitions.Last(); _antagSelection.MakeAntag(antagSelectionEnt, actor.PlayerSession, def.Value); } } + public bool IsObjectiveFinished() => + !TryGetTarget(out var target) || !HasComp(target) || _mobState.IsDead(target.Value); + public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) { target = GetTarget(); @@ -215,77 +255,151 @@ public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) public bool IsTarget(EntityUid entityUid) { var query = QueryActiveRules(); - while (query.MoveNext(out _, out var bloodCultRule, out _)) - return entityUid == bloodCultRule.OfferingTarget; + while (query.MoveNext(out _, out var rule, out _)) + return entityUid == rule.OfferingTarget; return false; } + public int GetTotalCultists() + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var rule, out _)) + return rule.Cultists.Count + rule.Constructs.Count; + + return 0; + } + public void RemoveObjectiveAndRole(EntityUid uid) { - if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) + if (!_mind.TryGetMind(uid, out var mindId, out var mind)) return; var objectives = mind.Objectives.FindAll(HasComp); foreach (var obj in objectives) - _mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + _mind.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + + if (_role.MindHasRole(mindId)) + _role.MindRemoveRole(mindId); + } + + public bool CanDrawRendingRune(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var userLocation = Transform(user).Coordinates; + var placementCoordinates = Transform(uid).Coordinates; + if (_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + return true; + } + + return false; + } + + public void SetRandomCultTarget(BloodCultRuleComponent rule) + { + var querry = EntityManager + .EntityQueryEnumerator(); + + var potentialTargets = new List(); + + // Cultists not being excluded from target selection is fully intended. + while (querry.MoveNext(out var uid, out _, out _, out _)) + potentialTargets.Add(uid); - if (_roleSystem.MindHasRole(mindId)) - _roleSystem.MindRemoveRole(mindId); + rule.OfferingTarget = potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } - private void CheckRoundShouldEnd() + public bool TryConsumeNearestMarker(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var userLocation = Transform(user).Coordinates; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var markerUid, out var marker)) + { + if (!marker.IsActive) + continue; + + var placementCoordinates = Transform(markerUid).Coordinates; + if (!_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + continue; + + marker.IsActive = false; + break; + } + + return false; + } + + private void CheckWinCondition() { var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) { - var aliveCultists = cult.Cultists.Count(cultist => !_mobStateSystem.IsDead(cultist)); + var aliveCultists = cult.Cultists.Count(cultist => !_mobState.IsDead(cultist)); if (aliveCultists != 0) return; cult.WinCondition = CultWinCondition.Failure; - - // Check for all at once gamemode - if (!GameTicker.GetActiveGameRules().Where(HasComp).Any()) - _roundEndSystem.EndRound(); } } private void MakeCultist(EntityUid cultist, Entity rule) { - if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind)) + if (!_mind.TryGetMind(cultist, out var mindId, out var mind)) return; EnsureComp(cultist); - _factionSystem.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); - _factionSystem.AddFaction(cultist, rule.Comp.BloodCultFaction); + _faction.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); + _faction.AddFaction(cultist, rule.Comp.BloodCultFaction); - _mindSystem.TryAddObjective(mindId, mind, "KillTargetCultObjective"); + _mind.TryAddObjective(mindId, mind, "KillTargetCultObjective"); } - private EntityUid? FindTarget(ICollection exclude = null!) + private void GetRandomRunePlacements(BloodCultRuleComponent component) { - var querry = EntityManager - .EntityQueryEnumerator(); + var allMarkers = EntityQuery().ToList(); + if (allMarkers.Count == 0) + { + component.EmergencyMarkersMode = true; + component.EmergencyMarkersCount = component.RendingRunePlacementsAmount; + return; + } - var potentialTargets = new List(); + var maxRunes = component.RendingRunePlacementsAmount; + if (allMarkers.Count < component.RendingRunePlacementsAmount) + maxRunes = allMarkers.Count; - while (querry.MoveNext(out var uid, out var mind, out _, out _)) + for (var i = maxRunes; i > 0; i--) { - var entity = mind.Mind; - if (entity == default || exclude?.Contains(uid) is true || HasComp(uid)) - continue; - - potentialTargets.Add(uid); + var marker = _random.PickAndTake(allMarkers); + marker.IsActive = true; } - - return potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } private void RemoveAllCultItems(Entity cultist) { - if (!_inventorySystem.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) + if (!_inventory.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) return; _bloodSpear.DetachSpearFromMaster(cultist); diff --git a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs index 188006e2196..876cccf9ecc 100644 --- a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Popups; using Content.Shared.Coordinates.Helpers; +using Content.Shared.Examine; using Content.Shared.Interaction.Events; using Content.Shared.Maps; using Content.Shared.Movement.Pulling.Systems; @@ -27,20 +28,23 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnUseInHand); } + private void OnExamined(Entity veil, ref ExaminedEvent args) => + args.PushMarkup(Loc.GetString("veil-shifter-description", ("charges", veil.Comp.Charges))); + private void OnUseInHand(Entity veil, ref UseInHandEvent args) { - if (veil.Comp.Charges == 0) - return; - - if (!Teleport(veil, args.User)) + if (args.Handled || veil.Comp.Charges == 0 || !Teleport(veil, args.User)) return; veil.Comp.Charges--; if (veil.Comp.Charges == 0) _appearance.SetData(veil, GenericCultVisuals.State, false); + + args.Handled = true; } private bool Teleport(Entity veil, EntityUid user) diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs index 8c500a04328..423252b6e3c 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs @@ -7,5 +7,5 @@ public sealed partial class KillTargetCultComponent : Component public string Title = string.Empty; [DataField, ViewVariables(VVAccess.ReadWrite)] - public EntityUid Target; + public EntityUid? Target; } diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs index b2ef487790e..75e21d68003 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs @@ -9,6 +9,7 @@ namespace Content.Server.WhiteDream.BloodCult.Objectives; public sealed class KillTargetCultSystem : EntitySystem { + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly JobSystem _job = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -23,22 +24,35 @@ public override void Initialize() private void OnObjectiveAssigned(Entity ent, ref ObjectiveAssignedEvent args) { var cultistRule = EntityManager.EntityQuery().FirstOrDefault(); - if (cultistRule?.OfferingTarget is { } target) - ent.Comp.Target = target; + if (cultistRule is null) + return; + + if (cultistRule.OfferingTarget is null) + _cultRule.SetRandomCultTarget(cultistRule); + + ent.Comp.Target = cultistRule.OfferingTarget; } private void OnAfterAssign(Entity ent, ref ObjectiveAfterAssignEvent args) { - _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target, ent.Comp.Title), args.Meta); + if (!ent.Comp.Target.HasValue || !ent.Owner.IsValid() || !HasComp(ent)) + return; + + _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target.Value, ent.Comp.Title), args.Meta); } private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) { var target = ent.Comp.Target; + if (!target.HasValue) + { + args.Progress = 1f; + return; + } - args.Progress = !HasComp(target) || _mobState.IsDead(target) - ? args.Progress = 1f - : args.Progress = 0f; + args.Progress = !HasComp(target) || _mobState.IsDead(target.Value) + ? 1f + : 0f; } private string GetTitle(EntityUid target, string title) diff --git a/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs new file mode 100644 index 00000000000..44d15e88521 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.RendingRunePlacement; + +[RegisterComponent] +public sealed partial class RendingRunePlacementMarkerComponent : Component +{ + [DataField] + public bool IsActive; + + [DataField] + public float DrawingRange = 10; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs index 60b889e7496..745ea042caf 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs @@ -54,15 +54,14 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu ent.Comp.Used = true; _appearance.SetData(ent, ApocalypseRuneVisuals.Used, true); - _emp.EmpPulse(_transform.GetMapCoordinates(ent), + _emp.EmpPulse( + _transform.GetMapCoordinates(ent), ent.Comp.EmpRange, ent.Comp.EmpEnergyConsumption, ent.Comp.EmpDuration); foreach (var guaranteedEvent in ent.Comp.GuaranteedEvents) - { _gameTicker.StartGameRule(guaranteedEvent); - } var requiredCultistsThreshold = MathF.Floor(_playerManager.PlayerCount * ent.Comp.CultistsThreshold); var totalCultists = cultRule.Cultists.Count + cultRule.Constructs.Count; @@ -71,8 +70,6 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu var (randomEvent, repeatTimes) = _random.Pick(ent.Comp.PossibleEvents); for (var i = 0; i < repeatTimes; i++) - { _gameTicker.StartGameRule(randomEvent); - } } } diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs index 023112a6ef4..fcfe7a65a02 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Chat; +using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; using Content.Shared.Humanoid; using Robust.Shared.Prototypes; @@ -26,7 +27,16 @@ public sealed partial class CultRuneBaseComponent : Component [DataField] public DamageSpecifier? ActivationDamage; - public EntProtoId HolyWaterPrototype = "HolyWater"; + /// + /// Will the rune upon activation set nearest Rending Rune Placement Marker to disabled. + /// + [DataField] + public bool TriggerRendingMarkers; + + [DataField] + public bool CanBeErased = true; + + public ProtoId HolyWaterPrototype = "HolyWater"; } public sealed class TryInvokeCultRuneEvent(EntityUid user, HashSet invokers) : CancellableEntityEventArgs diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs index ec81af67761..3e03ec1b0df 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs @@ -27,9 +27,11 @@ public HashSet GatherCultists(EntityUid rune, float range) /// The rune itself. /// Radius for a lookup. /// Filter to exlude from return. - public HashSet> GetTargetsNearRune(EntityUid rune, + public HashSet> GetTargetsNearRune( + EntityUid rune, float range, - Predicate>? exlude = null) + Predicate>? exlude = null + ) { var runeTransform = Transform(rune); var possibleTargets = _lookup.GetEntitiesInRange(runeTransform.Coordinates, range); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs index 0ad21e63693..013b8df6cdd 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs @@ -7,13 +7,18 @@ using Content.Server.Fluids.Components; using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Empower; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Ghost; using Content.Shared.Interaction; using Content.Shared.Maps; +using Content.Shared.UserInterface; using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -28,18 +33,19 @@ public sealed partial class CultRuneBaseSystem : EntitySystem [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; public override void Initialize() { - base.Initialize(); - // Drawing rune + SubscribeLocalEvent(BeforeOpenUi); SubscribeLocalEvent(OnRuneSelected); SubscribeLocalEvent(OnDrawRune); @@ -50,6 +56,26 @@ public override void Initialize() // Rune invoking SubscribeLocalEvent(OnRuneActivate); + + SubscribeLocalEvent(OnRuneExaminaAttempt); + } + + #region EventHandlers + + private void BeforeOpenUi(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + var availableRunes = new List>(); + var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + foreach (var runeSelector in runeSelectorArray) + { + if (runeSelector.RequireTargetDead && !_cultRule.IsObjectiveFinished() || + runeSelector.RequiredTotalCultists > _cultRule.GetTotalCultists()) + continue; + + availableRunes.Add(runeSelector.ID); + } + + _ui.SetUiState(ent.Owner, RuneDrawerBuiKey.Key, new RuneDrawerMenuState(availableRunes)); } private void OnRuneSelected(Entity ent, ref RuneDrawerSelectedMessage args) @@ -57,6 +83,12 @@ private void OnRuneSelected(Entity ent, ref RuneDrawerSelec if (!_protoManager.TryIndex(args.SelectedRune, out var runeSelector) || !CanDrawRune(args.Actor)) return; + if (runeSelector.RequireTargetDead && !_cultRule.CanDrawRendingRune(args.Actor)) + { + _popup.PopupEntity(Loc.GetString("cult-rune-cant-draw-rending"), args.Actor, args.Actor); + return; + } + var timeToDraw = runeSelector.DrawTime; if (TryComp(args.Actor, out BloodCultEmpoweredComponent? empowered)) timeToDraw *= empowered.RuneTimeMultiplier; @@ -85,18 +117,25 @@ private void OnDrawRune(Entity ent, ref DrawRuneDoAfter a DealDamage(args.User, runeSelector.DrawDamage); _audio.PlayPvs(args.EndDrawingSound, args.User, AudioParams.Default.WithMaxDistance(2f)); - var rune = SpawnRune(args.User, runeSelector.Prototype); + var runeEnt = SpawnRune(args.User, runeSelector.Prototype); + if (TryComp(runeEnt, out CultRuneBaseComponent? rune) + && rune.TriggerRendingMarkers + && !_cultRule.TryConsumeNearestMarker(ent)) + return; var ev = new AfterRunePlaced(args.User); - RaiseLocalEvent(rune, ev); + RaiseLocalEvent(runeEnt, ev); } - private void EraseOnInteractUsing(Entity ent, ref InteractUsingEvent args) + private void EraseOnInteractUsing(Entity rune, ref InteractUsingEvent args) { + if (!rune.Comp.CanBeErased) + return; + // Logic for bible erasing if (TryComp(args.Used, out var bible) && HasComp(args.User)) { - _popup.PopupEntity(Loc.GetString("cult-rune-erased"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-erased"), rune, args.User); _audio.PlayPvs(bible.HealSoundPath, args.User); EntityManager.DeleteEntity(args.Target); return; @@ -106,7 +145,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac return; var argsDoAfterEvent = - new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), ent) + new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), rune) { BreakOnUserMove = true, BreakOnDamage = true, @@ -114,7 +153,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac }; if (_doAfter.TryStartDoAfter(argsDoAfterEvent)) - _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), rune, args.User); } private void OnRuneErase(Entity ent, ref RuneEraseDoAfterEvent args) @@ -126,55 +165,67 @@ private void OnRuneErase(Entity ent, ref RuneEraseDoAfter EntityManager.DeleteEntity(ent); } - private void EraseOnCollding(Entity ent, ref StartCollideEvent args) + private void EraseOnCollding(Entity rune, ref StartCollideEvent args) { - if (!TryComp(args.OtherEntity, out var solutionContainer) || + if (!rune.Comp.CanBeErased || + !TryComp(args.OtherEntity, out var solutionContainer) || !HasComp(args.OtherEntity) && !HasComp(args.OtherEntity)) return; if (_solutionContainer.EnumerateSolutions((args.OtherEntity, solutionContainer)) - .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(ent.Comp.HolyWaterPrototype))) - EntityManager.DeleteEntity(ent); + .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(rune.Comp.HolyWaterPrototype))) + EntityManager.DeleteEntity(rune); } - private void OnRuneActivate(Entity ent, ref ActivateInWorldEvent args) + private void OnRuneActivate(Entity rune, ref ActivateInWorldEvent args) { - var runeCoordinates = Transform(ent).Coordinates; + var runeCoordinates = Transform(rune).Coordinates; var userCoordinates = Transform(args.User).Coordinates; if (args.Handled || !HasComp(args.User) || !userCoordinates.TryDistance(EntityManager, runeCoordinates, out var distance) || - distance > ent.Comp.RuneActivationRange) + distance > rune.Comp.RuneActivationRange) return; args.Handled = true; - var cultists = GatherCultists(ent, ent.Comp.RuneActivationRange); - if (cultists.Count < ent.Comp.RequiredInvokers) + var cultists = GatherCultists(rune, rune.Comp.RuneActivationRange); + if (cultists.Count < rune.Comp.RequiredInvokers) { - _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), rune, args.User); return; } var tryInvokeEv = new TryInvokeCultRuneEvent(args.User, cultists); - RaiseLocalEvent(ent, tryInvokeEv); + RaiseLocalEvent(rune, tryInvokeEv); if (tryInvokeEv.Cancelled) return; foreach (var cultist in cultists) { - DealDamage(cultist, ent.Comp.ActivationDamage); - _chat.TrySendInGameICMessage(cultist, - ent.Comp.InvokePhrase, - ent.Comp.InvokeChatType, + DealDamage(cultist, rune.Comp.ActivationDamage); + _chat.TrySendInGameICMessage( + cultist, + rune.Comp.InvokePhrase, + rune.Comp.InvokeChatType, false, checkRadioPrefix: false); } } + private void OnRuneExaminaAttempt(Entity rune, ref ExamineAttemptEvent args) + { + if (!HasComp(args.Examiner) && !HasComp(args.Examiner) && + !HasComp(args.Examiner)) + args.Cancel(); + } + + #endregion + private EntityUid SpawnRune(EntityUid user, EntProtoId rune) { var transform = Transform(user); - var snappedLocalPosition = new Vector2(MathF.Floor(transform.LocalPosition.X) + 0.5f, + var snappedLocalPosition = new Vector2( + MathF.Floor(transform.LocalPosition.X) + 0.5f, MathF.Floor(transform.LocalPosition.Y) + 0.5f); var spawnPosition = _transform.GetMapCoordinates(user); var runeEntity = EntityManager.Spawn(rune, spawnPosition); @@ -211,9 +262,7 @@ private void DealDamage(EntityUid user, DamageSpecifier? damage = null) if (TryComp(user, out BloodCultEmpoweredComponent? empowered)) { foreach (var (key, value) in damage.DamageDict) - { damage.DamageDict[key] = value * empowered.RuneDamageMultiplier; - } } _damageable.TryChangeDamage(user, newDamage, true); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs index 06d750bfc82..5e594808d98 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Damage; using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; namespace Content.Server.WhiteDream.BloodCult.Runes.Offering; @@ -30,10 +31,16 @@ public sealed partial class CultRuneOfferingComponent : Component [DataField] public int ReviveChargesPerOffering = 1; + [DataField] + public EntProtoId SoulShardProto = "SoulShard"; + + [DataField] + public EntProtoId SoulShardGhostProto = "SoulShardGhost"; + [DataField] public DamageSpecifier ConvertHealing = new() { - DamageDict = new Dictionary + DamageDict = new() { ["Brute"] = -40, ["Burn"] = -40 diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs index 19614e20bd9..3556fd9b23e 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs @@ -8,7 +8,6 @@ using Content.Server.WhiteDream.BloodCult.Runes.Revive; using Content.Shared.Cuffs.Components; using Content.Shared.Damage; -using Content.Shared.Humanoid; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs.Systems; using Content.Shared.StatusEffect; @@ -35,10 +34,11 @@ public override void Initialize() SubscribeLocalEvent(OnOfferingRuneInvoked); } - private void OnOfferingRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + private void OnOfferingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - var possibleTargets = _cultRune.GetTargetsNearRune(ent, - ent.Comp.OfferingRange, + var possibleTargets = _cultRune.GetTargetsNearRune( + rune, + rune.Comp.OfferingRange, entity => HasComp(entity)); if (possibleTargets.Count == 0) @@ -48,60 +48,38 @@ private void OnOfferingRuneInvoked(Entity ent, ref Tr } var target = possibleTargets.First(); + if (!TryOffer(rune, target, args.User, args.Invokers.Count)) + args.Cancel(); + } + private bool TryOffer(Entity rune, EntityUid target, EntityUid user, int invokersTotal) + { // if the target is dead we should always sacrifice it. if (_mobState.IsDead(target)) { - Sacrifice(target); - return; + Sacrifice(rune, target); + return true; } - if (!_mind.TryGetMind(target, out _, out _) || - _bloodCultRule.IsTarget(target) || - HasComp(target) || - HasComp(target)) - { - if (!TrySacrifice(target, ent, args.Invokers.Count)) - args.Cancel(); - - return; - } + if (!_mind.TryGetMind(target, out _, out _) || _bloodCultRule.IsTarget(target) || + HasComp(target) || HasComp(target)) + return TrySacrifice(rune, target, invokersTotal); - if (!TryConvert(target, ent, args.User, args.Invokers.Count)) - args.Cancel(); + return TryConvert(rune, target, user, invokersTotal); } - private bool TrySacrifice(Entity target, - Entity rune, - int invokersAmount) + private bool TrySacrifice(Entity rune, EntityUid target, int invokersAmount) { if (invokersAmount < rune.Comp.AliveSacrificeInvokersAmount) return false; - _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); - Sacrifice(target); + Sacrifice(rune, target); return true; } - private void Sacrifice(EntityUid target) - { - var transform = Transform(target); - var shard = Spawn("SoulShard", transform.Coordinates); - _body.GibBody(target); - - if (!_mind.TryGetMind(target, out var mindId, out _)) - return; - - _mind.TransferTo(mindId, shard); - _mind.UnVisit(mindId); - } - - private bool TryConvert(EntityUid target, - Entity rune, - EntityUid user, - int invokersAmount) + private bool TryConvert(Entity rune, EntityUid target, EntityUid user, int invokersTotal) { - if (invokersAmount < rune.Comp.ConvertInvokersAmount) + if (invokersTotal < rune.Comp.ConvertInvokersAmount) return false; _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); @@ -109,6 +87,23 @@ private bool TryConvert(EntityUid target, return true; } + private void Sacrifice(Entity rune, EntityUid target) + { + _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); + var transform = Transform(target); + + if (!_mind.TryGetMind(target, out var mindId, out _)) + Spawn(rune.Comp.SoulShardGhostProto, transform.Coordinates); + else + { + var shard = Spawn(rune.Comp.SoulShardProto, transform.Coordinates); + _mind.TransferTo(mindId, shard); + _mind.UnVisit(mindId); + } + + _body.GibBody(target); + } + private void Convert(Entity rune, EntityUid target, EntityUid user) { _bloodCultRule.Convert(target); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs index d051d07528f..91347bcdd95 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs @@ -4,8 +4,6 @@ using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.DoAfter; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -22,7 +20,6 @@ public sealed class CultRuneRendingSystem : EntitySystem [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly TransformSystem _transform = default!; @@ -38,10 +35,12 @@ public override void Initialize() private void OnRendingRunePlaced(Entity rune, ref AfterRunePlaced args) { var position = _transform.GetMapCoordinates(rune); - var message = Loc.GetString("cult-rending-drawing-finished", + var message = Loc.GetString( + "cult-rending-drawing-finished", ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(position)))); - _chat.DispatchGlobalAnnouncement(message, + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), true, rune.Comp.FinishedDrawingAudio, @@ -50,9 +49,7 @@ private void OnRendingRunePlaced(Entity rune, ref Afte private void OnRendingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - if (!_cultRule.TryGetTarget(out var target) || - !TryComp(target.Value, out MobStateComponent? _) || - _mobState.IsAlive(target.Value)) + if (!_cultRule.IsObjectiveFinished()) { _popup.PopupEntity(Loc.GetString("cult-rending-target-alive"), rune, args.User); args.Cancel(); @@ -78,7 +75,11 @@ private void OnRendingRuneInvoked(Entity rune, ref Try return; } - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-started"), + var message = Loc.GetString( + "cult-rending-started", + ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(rune.Owner)))); + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); @@ -95,7 +96,8 @@ private void SpawnNarSie(Entity rune, ref RendingRuneD _appearance.SetData(rune, RendingRuneVisuals.Active, false); if (args.Cancelled) { - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-prevented"), + _chat.DispatchGlobalAnnouncement( + Loc.GetString("cult-rending-prevented"), Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs index 76697c252a8..c69bf6abd4e 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs @@ -44,6 +44,7 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnSpellStartup); SubscribeLocalEvent(OnCultTargetEvent); SubscribeLocalEvent(OnActionGettingDisabled); @@ -60,6 +61,12 @@ public override void Initialize() #region BaseHandlers + private void OnSpellStartup(Entity action, ref ComponentStartup args) + { + if (_actions.TryGetActionData(action, out var actionData, false) && actionData is { UseDelay: not null }) + _actions.StartUseDelay(action); + } + private void OnCultTargetEvent(Entity spell, ref EntityTargetActionEvent args) { if (_statusEffects.HasStatusEffect(args.Performer, "Muted")) @@ -83,10 +90,8 @@ private void OnActionGettingDisabled(Entity spell, ref A _actions.RemoveAction(args.Performer, spell); } - private void OnComponentStartup(Entity cultist, ref ComponentStartup args) - { + private void OnComponentStartup(Entity cultist, ref ComponentStartup args) => cultist.Comp.MaxSpells = cultist.Comp.DefaultMaxSpells; - } private void OnGetVerbs(Entity cultist, ref GetVerbsEvent args) { @@ -136,7 +141,8 @@ private void OnSpellSelected(Entity cultist, ref ActionProtoId = args.SelectedItem }; - var doAfter = new DoAfterArgs(EntityManager, + var doAfter = new DoAfterArgs( + EntityManager, cultist.Owner, cultist.Comp.SpellCreationTime, createSpellEvent, @@ -189,7 +195,7 @@ private void OnShackles(BloodCultShacklesEvent ev) return; var shuckles = Spawn(ev.ShacklesProto); - if (!_cuffable.TryAddNewCuffs(ev.Performer, ev.Target, shuckles)) + if (!_cuffable.TryAddNewCuffs(ev.Target, ev.Performer, shuckles)) return; _stun.TryKnockdown(ev.Target, ev.KnockdownDuration, true); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs index bd605475ede..b0906bc13be 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs @@ -22,7 +22,7 @@ public override void Initialize() { SubscribeLocalEvent(OnTeleport); SubscribeLocalEvent(OnTeleportRuneSelected); - SubscribeLocalEvent(OnTeleportDoAfter); + SubscribeLocalEvent(OnTeleportDoAfter); } private void OnTeleport(BloodCultTeleportEvent ev) @@ -30,28 +30,37 @@ private void OnTeleport(BloodCultTeleportEvent ev) if (ev.Handled || !_runeTeleport.TryGetTeleportRunes(ev.Performer, out var runes)) return; - _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes)); + var metaData = new Dictionary + { + ["target"] = GetNetEntity(ev.Target), + ["duration"] = ev.DoAfterDuration + }; + + _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes, metaData)); _ui.TryToggleUi(ev.Performer, ListViewSelectorUiKey.Key, ev.Performer); ev.Handled = true; } - private void OnTeleportRuneSelected(Entity ent, - ref ListViewItemSelectedMessage args) + private void OnTeleportRuneSelected( + Entity ent, + ref ListViewItemSelectedMessage args + ) { - if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not EntityUid target || + if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not NetEntity netTarget || !args.MetaData.TryGetValue("duration", out var rawDuration) || rawDuration is not TimeSpan duration) return; + var target = GetEntity(netTarget); var teleportDoAfter = new TeleportActionDoAfterEvent { - Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)), + Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)) }; - var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target); + var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target, target); _doAfter.TryStartDoAfter(doAfterArgs); } - private void OnTeleportDoAfter(TeleportActionDoAfterEvent ev) + private void OnTeleportDoAfter(Entity user, ref TeleportActionDoAfterEvent ev) { if (ev.Target is not { } target) return; diff --git a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs index 5dc4ff3d653..b1aa9421140 100644 --- a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs +++ b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs @@ -28,12 +28,10 @@ public override void Update(float frameTime) var factoryQuery = EntityQueryEnumerator(); while (factoryQuery.MoveNext(out var uid, out var factory)) - { if (factory.CooldownRemaining > 0) factory.CooldownRemaining -= frameTime; else _appearance.SetData(uid, GenericCultVisuals.State, true); - } } private void OnTryOpenMenu(Entity factory, ref ActivatableUIOpenAttemptEvent args) @@ -53,9 +51,13 @@ private void OnTryOpenMenu(Entity factory, ref Activatabl private void OnPrototypeSelected(Entity factory, ref RadialSelectorSelectedMessage args) { + if (factory.Comp.CooldownRemaining > 0) + return; + var product = Spawn(args.SelectedItem, Transform(args.Actor).Coordinates); _hands.TryPickupAnyHand(args.Actor, product); factory.Comp.CooldownRemaining = factory.Comp.Cooldown; _appearance.SetData(factory, GenericCultVisuals.State, false); + _ui.CloseUi(args.Actor, RadialSelectorUiKey.Key); } } diff --git a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs index 1c97108277c..f34e9e3924d 100644 --- a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs +++ b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs @@ -14,10 +14,10 @@ public enum ListViewSelectorUiKey [Serializable, NetSerializable] public sealed class ListViewSelectorState( List items, - Dictionary metaData = default!) : BoundUserInterfaceState + Dictionary? metaData = null) : BoundUserInterfaceState { public List Items { get; } = items; - public Dictionary MetaData = metaData; + public Dictionary MetaData = metaData ?? new(); } [Serializable, NetSerializable] diff --git a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs index cf338a6bb43..439b09e7afb 100644 --- a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs +++ b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs @@ -12,6 +12,9 @@ public sealed partial class ProjectileSpellEvent : WorldTargetActionEvent, ISpea [DataField(required: true)] public EntProtoId Prototype; + [DataField] + public float ProjectileSpeed = 20; + [DataField] public string? Speech { get; private set; } diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index b0a9fef75d0..cae581298a6 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -344,7 +344,7 @@ private void OnProjectileSpell(ProjectileSpellEvent ev) var ent = Spawn(ev.Prototype, spawnCoords); var direction = toCoords.ToMapPos(EntityManager, _transform) - spawnCoords.ToMapPos(EntityManager, _transform); - _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer); + _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer, ev.ProjectileSpeed); } // End Projectile Spells #endregion diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs new file mode 100644 index 00000000000..15b026b5144 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs @@ -0,0 +1,39 @@ +using Content.Shared.Physics; +using Content.Shared.StatusEffect; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +[RegisterComponent] +public sealed partial class PhaseShiftedComponent : Component +{ + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; + + [DataField] + public float MovementSpeedBuff = 1.5f; + + [DataField] + public int CollisionMask = (int) CollisionGroup.GhostImpassable; + + [DataField] + public int CollisionLayer; + + [DataField] + public EntProtoId PhaseInEffect = "EffectEmpPulseNoSound"; + + [DataField] + public EntProtoId PhaseOutEffect = "EffectEmpPulseNoSound"; + + [DataField] + public SoundSpecifier PhaseInSound = new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilin.ogg")); + + [DataField] + public SoundSpecifier PhaseOutSound = + new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilout.ogg")); + + public int StoredMask; + public int StoredLayer; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs new file mode 100644 index 00000000000..6caf723a8c6 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs @@ -0,0 +1,95 @@ +using System.Linq; +using Content.Shared.Interaction.Events; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffect; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; +using Content.Shared.Throwing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +public abstract class SharedPhaseShiftSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly PullingSystem _pulling = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnComponentStartup); + + SubscribeLocalEvent(OnRefresh); + SubscribeLocalEvent(OnAttackAttempt); + SubscribeLocalEvent(OnThrowAttempt); + + SubscribeLocalEvent(OnComponentShutdown); + } + + protected virtual void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + var pos = _transform.GetMapCoordinates(ent); + Spawn(ent.Comp.PhaseInEffect, pos); + _audio.PlayPvs(ent.Comp.PhaseInSound, Transform(ent).Coordinates); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + ent.Comp.StoredMask = fixture.Value.CollisionMask; + ent.Comp.StoredLayer = fixture.Value.CollisionLayer; + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.CollisionMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.CollisionLayer, fixtures); + } + + var stealth = EnsureComp(ent); + _stealth.SetVisibility(ent, -1, stealth); + + if (TryComp(ent, out PullableComponent? pullable)) + _pulling.TryStopPull(ent, pullable); + + _movement.RefreshMovementSpeedModifiers(ent); + } + + private void OnRefresh(Entity ent, ref RefreshMovementSpeedModifiersEvent args) => + args.ModifySpeed(ent.Comp.MovementSpeedBuff, ent.Comp.MovementSpeedBuff); + + private void OnAttackAttempt(Entity ent, ref AttackAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + private void OnThrowAttempt(Entity ent, ref ThrowAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + protected virtual void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + Spawn(ent.Comp.PhaseOutEffect, _transform.GetMapCoordinates(ent)); + _audio.PlayPvs(ent.Comp.PhaseOutSound, ent); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.StoredMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.StoredLayer, fixtures); + } + + _stealth.SetVisibility(ent, 1); + RemComp(ent); + + ent.Comp.MovementSpeedBuff = 1; + _movement.RefreshMovementSpeedModifiers(ent); + } +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs index a16d8dc9326..13e51214e0a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Ghost; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Inventory.Events; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -23,6 +24,7 @@ public sealed class CultItemSystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnBeforeGettingThrown); SubscribeLocalEvent(OnEquipAttempt); SubscribeLocalEvent(OnMeleeAttempt); @@ -30,6 +32,15 @@ public override void Initialize() } private void OnActivate(Entity item, ref ActivateInWorldEvent args) + { + if (CanUse(args.User)) + return; + + args.Handled = true; + KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-generic")); + } + + private void OnUseInHand(Entity item, ref UseInHandEvent args) { if (CanUse(args.User) || // Allow non-cultists to remove embedded cultist weapons and getting knocked down afterwards on pickup diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs index b6dec321e4e..c1388994a4a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs @@ -25,9 +25,15 @@ public enum RuneDrawerBuiKey } [Serializable, NetSerializable] -public sealed class RuneDrawerSelectedMessage(RuneSelectorPrototype selectedRune) : BoundUserInterfaceMessage +public sealed class RuneDrawerMenuState(List> availalbeRunes) : BoundUserInterfaceState { - public ProtoId SelectedRune { get; private set; } = selectedRune.ID; + public List> AvailalbeRunes { get; private set; } = availalbeRunes; +} + +[Serializable, NetSerializable] +public sealed class RuneDrawerSelectedMessage(ProtoId selectedRune) : BoundUserInterfaceMessage +{ + public ProtoId SelectedRune { get; private set; } = selectedRune; } [Serializable, NetSerializable] diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs index 372ab866f07..12350917d00 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs @@ -1,5 +1,4 @@ using Content.Shared.Damage; -using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; namespace Content.Shared.WhiteDream.BloodCult.Runes; @@ -11,20 +10,20 @@ public sealed class RuneSelectorPrototype : IPrototype public string ID { get; } = default!; [DataField(required: true)] - public EntProtoId Prototype { get; } + public EntProtoId Prototype; [DataField] - public float DrawTime { get; } = 4f; + public float DrawTime = 4f; + + [DataField] + public bool RequireTargetDead; + + [DataField] + public int RequiredTotalCultists = 1; /// /// Damage dealt on the rune drawing. /// [DataField] - public DamageSpecifier DrawDamage = new() - { - DamageDict = new Dictionary - { - ["Slash"] = 15, - } - }; + public DamageSpecifier DrawDamage = new() { DamageDict = new() { ["Slash"] = 15 } }; } diff --git a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs index 293a32691dc..6b98514d44b 100644 --- a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs +++ b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs @@ -2,6 +2,7 @@ using Content.Shared.Chat; using Content.Shared.DoAfter; using Content.Shared.Magic; +using Content.Shared.StatusEffect; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -27,6 +28,9 @@ public sealed partial class BloodCultTeleportEvent : EntityTargetActionEvent, IS [DataField] public float Range = 5; + [DataField] + public TimeSpan DoAfterDuration = TimeSpan.FromSeconds(2); + [DataField] public string? Speech { get; set; } @@ -91,6 +95,28 @@ public sealed partial class SummonEquipmentEvent : InstantActionEvent, ISpeakSpe public sealed partial class BloodSpearRecalledEvent : InstantActionEvent; +public sealed partial class PlaceTileEntityEvent : WorldTargetActionEvent +{ + [DataField] + public EntProtoId? Entity; + + [DataField] + public string? TileId; + + [DataField] + public SoundSpecifier? Audio; + +} + +public sealed partial class PhaseShiftEvent : InstantActionEvent +{ + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(5); + + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; +} + [Serializable, NetSerializable] public sealed partial class TwistedConstructionDoAfterEvent : SimpleDoAfterEvent; diff --git a/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg b/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c37c9e903deb8022fa88f5e4742e804412df8f8f GIT binary patch literal 20713 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 XhX>toY!#r$Wok->?DoHaG91?j`v|+) literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index ff812155f69..aefe59920af 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -71,6 +71,7 @@ guide-entry-zombies = Zombies guide-entry-revolutionaries = Revolutionaries guide-entry-minor-antagonists = Minor Antagonists guide-entry-space-ninja = Space Ninja +guide-entry-blood-cult = Blood Cult guide-entry-rules = Server Rules guide-entry-rules-core-only = Core Only Ruleset diff --git a/Resources/Locale/en-US/white-dream/alerts.ftl b/Resources/Locale/en-US/white-dream/alerts.ftl index 5156b31ddb0..b7dac60bfed 100644 --- a/Resources/Locale/en-US/white-dream/alerts.ftl +++ b/Resources/Locale/en-US/white-dream/alerts.ftl @@ -1,5 +1,2 @@ -alerts-blood-spells-name = Blood spells -alerts-blood-spells-desc = Click to create or remove blood spells. - -alerts-blood-cult-buff-name = Empowered -alerts-blood-cult-buff-desc = Blood magic requires much less time to cast and you lose less blood from it. You're also immune to pressure damage. +alerts-blood-cult-empowered-name = Empowered +alerts-blood-cult-empowered-desc = Blood magic and rune scribing requires much less time to cast and you lose less blood from it. diff --git a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl index 0f7872985f0..92fbab3f993 100644 --- a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl +++ b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl @@ -9,6 +9,8 @@ blood-cult-role-greeting = The Geometer of Blood, Nar-Sie, has sent a number of You must work with your brethren to summon an avatar of your eldritch goddess! blood-cult-role-briefing-short = Use '^' to contact other members of your brethren. +blood-cult-role-briefing-rending-locations = The veil can be thorn {$location}, {$coordinates} +blood-cult-role-briefing-emergency-rending = We can draw {$amount} more rending or apocalypse runes! blood-cult-condition-win = The Geometer of Blood has successfully summoned their Eldritch Goddess! blood-cult-condition-draw = Both parties were destroyed. diff --git a/Resources/Locale/en-US/white-dream/cult/items/general.ftl b/Resources/Locale/en-US/white-dream/cult/items/general.ftl index 6ad4938adea..f3702bb66a1 100644 --- a/Resources/Locale/en-US/white-dream/cult/items/general.ftl +++ b/Resources/Locale/en-US/white-dream/cult/items/general.ftl @@ -11,6 +11,10 @@ ghost-role-information-soul-shard-name = Soul Shard ghost-role-information-soul-shard-description = Become the servant of The Blood Cult. ghost-role-information-soul-shard-rules = Take the form of one of the constructs and help your Masters bring their Old Goddess back to the world! +ghost-role-information-soul-shard-holy-name = Blessed Soul Shard +ghost-role-information-soul-shard-holy-description = Become the servant of crew and help them defeat the cult. +ghost-role-information-soul-shard-holy-rules = Take the form of one of the converted constructs and help the crew stop Geometer of Blood from bringing their Old Goddess back to the world! + shuttle-curse-cant-activate = Nar'Sien power doesn't seem to work. shuttle-curse-max-charges = You try to shatter the orb, but it remains as solid as a rock! shuttle-curse-shuttle-arrived = The shuttle has already arived! You can't delay it anymore. @@ -19,4 +23,5 @@ shuttle-curse-shuttle-not-called = The shuttle has not yet been called. shuttle-curse-system-failure = SYSTEM FAILURE shuttle-curse-success-global = The shuttle will be delayed by {$time} minutes. +veil-shifter-description = It has {$charges} charges left. veil-shifter-cant-teleport = Couldn't find a place to teleport you. Try again! diff --git a/Resources/Locale/en-US/white-dream/cult/runes.ftl b/Resources/Locale/en-US/white-dream/cult/runes.ftl index f13e72a3726..7e166e2b689 100644 --- a/Resources/Locale/en-US/white-dream/cult/runes.ftl +++ b/Resources/Locale/en-US/white-dream/cult/runes.ftl @@ -1,4 +1,5 @@ cult-rune-cant-draw = You can not draw rune here! +cult-rune-cant-draw-rending = You have to be near the area where the veil between our Worlds is the thinnest. cult-rune-started-erasing = Started erasing... cult-rune-erased = Rune has been erased. cult-rune-not-enough-cultists = Not enough cultists to perform the ritual! @@ -11,8 +12,8 @@ cult-revive-rune-already-alive = The target is already alive. cult-buff-already-buffed = You are already empowered. -cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end! Nearby location: {$location}. +cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end {$location}! cult-rending-target-alive = Can not start the ritual: the target is alive. cult-rending-already-summoning = Can not start the ritual: it's already in progress. -cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending! +cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending {$location}! cult-rending-prevented = Someone has stopped the ritual. diff --git a/Resources/Locale/en-US/white-dream/cult/spells.ftl b/Resources/Locale/en-US/white-dream/cult/spells.ftl index f0934d74cb9..52fa5939fba 100644 --- a/Resources/Locale/en-US/white-dream/cult/spells.ftl +++ b/Resources/Locale/en-US/white-dream/cult/spells.ftl @@ -1,5 +1,5 @@ blood-cult-spells-too-many = Too many spells already selected. blood-cult-no-spells = You have no spells selected. -blood-cult-select-spells-verb = Select blood spells +blood-cult-select-spells-verb = Prepare blood spells blood-cult-remove-spells-verb = Remove blood spells diff --git a/Resources/Prototypes/Entities/Effects/emp_effects.yml b/Resources/Prototypes/Entities/Effects/emp_effects.yml index d1096b85f5e..e386f902a5d 100644 --- a/Resources/Prototypes/Entities/Effects/emp_effects.yml +++ b/Resources/Prototypes/Entities/Effects/emp_effects.yml @@ -1,5 +1,5 @@ - type: entity - id: EffectEmpPulse + id: EffectEmpPulseNoSound categories: [ HideSpawnMenu ] components: - type: TimedDespawn @@ -8,18 +8,24 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_pulse + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_pulse - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu + - type: AnimationPlayer + +- type: entity + parent: EffectEmpPulseNoSound + id: EffectEmpPulse + categories: [ HideSpawnMenu ] + components: - type: EmitSoundOnSpawn - sound: + sound: path: /Audio/Effects/Lightning/lightningbolt.ogg - - type: AnimationPlayer - type: entity id: EffectEmpDisabled @@ -31,12 +37,12 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_disable + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_disable - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu - type: AnimationPlayer diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index 081ff7ef0ab..4b275446800 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -9,6 +9,7 @@ - Revolutionaries - MinorAntagonists - SpaceNinja + - BloodCult - type: guideEntry id: Traitors @@ -39,3 +40,8 @@ id: SpaceNinja name: guide-entry-space-ninja text: "/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml" + +- type: guideEntry + id: BloodCult + name: guide-entry-blood-cult + text: "/ServerInfo/Guidebook/Antagonist/BloodCult.xml" diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml index 814b950ead1..45e6217c602 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml @@ -73,7 +73,7 @@ - type: entity id: ActionBloodCultShadowShackles - name: shadow shackles + name: Shadow Shackles description: Empowers your hand to handcuff a victim on contact, and mute them if successful. categories: [ HideSpawnMenu ] components: @@ -100,7 +100,7 @@ - type: entity id: ActionBloodCultTwistedConstruction - name: twisted construction + name: Twisted Construction description: Empowers your hand to corrupt certain metallic objects. categories: [ HideSpawnMenu ] components: @@ -127,7 +127,7 @@ - type: entity id: ActionBloodCultSummonCombatEquipment - name: summon combat equipment + name: Summon Combat Equipment description: Allows you to summon combat cult gear, including cult armor, a cult bola and a cult sword. categories: [ HideSpawnMenu ] components: @@ -151,7 +151,7 @@ - type: entity id: ActionBloodCultSummonRitualDagger - name: summon ritual dagger + name: Summon Ritual Dagger description: Allows you to summon a ritual dagger, in case you've lost the dagger that was given to you. categories: [ HideSpawnMenu ] components: @@ -173,7 +173,7 @@ - type: entity id: ActionBloodCultBloodRites - name: blood rites + name: Blood Rites description: Empowers your hand to absorb blood to be used for advanced rites, or heal a cultist on contact. Use the spell in-hand to cast advanced rites categories: [ HideSpawnMenu ] components: @@ -193,3 +193,180 @@ prototypes: hand1: BloodRitesAura - type: BaseCultSpell + +- type: entity + id: ActionSummonCultFloor + name: Summon Cult Floor + description: This spell constructs a cult floor. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + - type: WorldTargetAction + useDelay: 10 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + event: !type:PlaceTileEntityEvent + tileId: CultFloor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionLesserConstruction + name: Lesser Construction + description: This spell constructs a cult wall. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 20 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: WallCult + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonCultDoor + name: Summon Cult Door + description: This spell constructs a cult door. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: CultDoor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStone + name: Summon Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStoneHoly + name: Summon Holy Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardHolyGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionForceWallCult + name: Shield + description: This spell creates a temporary forcefield to shield yourself and allies from incoming fire. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + - type: InstantAction + useDelay: 40 + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/forcewall.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + event: !type:InstantSpawnSpellEvent + prototype: WallForceCult + posData: !type:TargetInFront + - type: BaseCultSpell + +- type: entity + id: ActionPhaseShift + name: Phase Shift + description: This spell allows you to pass through walls. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + - type: InstantAction + itemIconStyle: BigAction + useDelay: 30 + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + event: !type:PhaseShiftEvent + - type: BaseCultSpell + +- type: entity + id: ActionGauntletEcho + name: Gauntlet Echo + description: Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack + categories: [ HideSpawnMenu ] + components: + - type: WorldTargetAction + useDelay: 30 + itemIconStyle: BigAction + checkCanAccess: false + raiseOnUser: true + range: 15 + sound: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/resonator_blast.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: gauntlet_echo + event: !type:ProjectileSpellEvent + prototype: ProjectileGauntlet + projectileSpeed: 5 + - type: BaseCultSpell diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml index d16f12d5c88..b6bc17a2239 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml @@ -81,13 +81,8 @@ - type: Speech - type: TypingIndicator proto: guardian - - type: Pullable - type: Puller needsHands: false - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - type: Visibility - type: ContentEye - type: Actions @@ -130,6 +125,9 @@ 0: Alive 100: Dead - type: Construct + actions: + - ActionForceWallCult + - ActionGauntletEcho - type: MeleeWeapon hidden: true angle: 30 @@ -164,6 +162,11 @@ - state: glow_artificer_cult map: [ "enum.ConstructVisualsState.Glow" ] - type: Construct + actions: + - ActionSummonCultFloor + - ActionLesserConstruction + - ActionSummonCultDoor + - ActionSummonSoulStone - type: MovementIgnoreGravity - type: MeleeWeapon hidden: true @@ -183,6 +186,7 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: Pullable - type: entity parent: ConstructBase @@ -201,6 +205,9 @@ 0: Alive 65: Dead - type: Construct + actions: + - ActionPhaseShift + - type: MovementIgnoreGravity - type: MovementSpeedModifier baseWalkSpeed: 4 baseSprintSpeed: 4 @@ -222,6 +229,10 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: StatusEffects + allowed: + - PhaseShifted + - type: Pullable - type: entity id: ConstructHarvester @@ -310,6 +321,9 @@ map: [ "enum.ConstructVisualsState.Sprite" ] - state: glow_artificer_holy map: [ "enum.ConstructVisualsState.Glow" ] + - type: Construct + actions: + - ActionSummonSoulStoneHoly - type: GenericVisualizer visuals: enum.ConstructVisualsState.Transforming: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml index e410a81c753..ad3b2a84728 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml @@ -54,3 +54,21 @@ description: ghost-role-information-soul-shard-description rules: ghost-role-information-soul-shard-rules - type: GhostTakeoverAvailable + +- type: entity + parent: SoulShard + id: SoulShardHoly + components: + - type: SoulShard + isBlessed: true + +- type: entity + parent: SoulShardHoly + id: SoulShardHolyGhost + components: + - type: GhostRole + allowMovement: true + name: ghost-role-information-soul-shard-holy-name + description: ghost-role-information-soul-shard-holy-description + rules: ghost-role-information-soul-shard-holy-rules + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml index 8195f4773fd..9580d2b224d 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml @@ -28,6 +28,7 @@ parent: CultRuneBase id: CultRuneOffering name: rune of offering + description: Offers a noncultist above it to Nar'Sie, either converting them or sacrificing them. One cultists required for dead sacrifice, two for conversion and three for living sacrifices and sacrifice targets. components: - type: Sprite state: "offering" @@ -39,6 +40,7 @@ parent: CultRuneBase id: CultRuneEmpower name: rune of empower + description: Allows cultists to prepare greater amounts of blood magic at far less of a cost. components: - type: Sprite state: strength @@ -50,6 +52,7 @@ parent: CultRuneBase id: CultRuneTeleport name: rune of teleportation + description: Warps everything above it to another chosen teleport rune components: - type: Sprite state: teleport @@ -67,6 +70,7 @@ parent: CultRuneBase id: CultRuneRevive name: rune of rejuvenation + description: Requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life. components: - type: Sprite state: revive @@ -78,6 +82,7 @@ parent: CultRuneBase id: CultRuneBarrier name: rune of barrier + description: When invoked, makes a temporary invisible wall to block passage. components: - type: Sprite state: barrier @@ -93,6 +98,7 @@ parent: CultRuneBase id: CultRuneSummoning name: rune of summoning + description: Summons a single cultist to the rune. Requires 2 invokers. components: - type: Sprite state: summon @@ -109,6 +115,7 @@ parent: CultRuneBase id: CultRuneBloodBoil name: rune of boiling blood + description: Boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers. components: - type: Sprite state: blood_boil @@ -124,6 +131,7 @@ parent: CultRuneBase id: CultRuneApocalypse name: rune of apocalypse + description: Harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects. Requires 3 invokers. components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi @@ -133,6 +141,8 @@ - type: CultRuneBase requiredInvokers: 3 invokePhrase: "Ta'gh fara'qha fel d'amar det!" + triggerRendingMarkers: true + canBeErased: false activationDamage: types: Slash: 35 @@ -147,6 +157,7 @@ parent: CultRuneBase id: CultRuneDimensionalRending name: rune of dimensional rending + description: Tears apart dimensional barriers, calling forth the Geometer. Requires 10 invokers components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi @@ -157,6 +168,8 @@ requiredInvokers: 10 invokeChatType: Speak invokePhrase: "TOK-LYR RQA-NAP G'OLT-ULOFT!!!" + triggerRendingMarkers: true + canBeErased: false - type: CultRuneRending - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml index c8ae0d6b3a3..0fb137a40dc 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml @@ -31,24 +31,10 @@ thresholds: - trigger: !type:DamageTrigger - damage: 600 + damage: 200 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 300 - behaviors: - - !type:SpawnEntitiesBehavior - spawn: - RunedMetal: - min: 5 - max: 5 - - !type:PlaySoundBehavior - sound: - collection: MetalBreak - - !type:DoActsBehavior - acts: [ "Destruction" ] - type: PointLight enabled: false radius: 3 @@ -69,3 +55,4 @@ - type: Icon sprite: WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi state: icon + - type: Dispellable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml index 23ff76bbc58..b27e3454213 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -113,7 +113,7 @@ wideAnimationRotation: -135 damage: types: - Piercing: 36 + Piercing: 26 angle: 0 animation: WeaponArcThrust soundHit: @@ -139,7 +139,7 @@ - type: IncreaseDamageOnWield damage: types: - Piercing: 8 + Piercing: 10 - type: UseDelay - type: DisarmMalus - type: CultItem @@ -160,7 +160,6 @@ Blunt: 0 heavyStaminaCost: 0 maxTargets: 1 - - type: Unremoveable - type: BloodRitesAura - type: UserInterface interfaces: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml new file mode 100644 index 00000000000..69a007b90e3 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml @@ -0,0 +1,20 @@ +- type: entity + id: ProjectileGauntlet + name: gauntlet + description: Oh no. + parent: BaseBulletTrigger + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: Red + radius: 2.0 + energy: 5.0 + - type: Projectile + ignoreResistances: true + damage: + types: + Blunt: 50 + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi + layers: + - state: gauntlet_echo diff --git a/Resources/Prototypes/WhiteDream/Entities/markers.yml b/Resources/Prototypes/WhiteDream/Entities/markers.yml new file mode 100644 index 00000000000..fce2225bc78 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/markers.yml @@ -0,0 +1,13 @@ +- type: entity + id: RendingRunePlacementMarker + name: rending rune placement marker + description: Marker for rending rune placement. 5 should be enough for each map. + parent: MarkerBase + components: + - type: RendingRunePlacementMarker + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: WhiteDream/BloodCult/Entities/Runes/regular.rsi + state: revive diff --git a/Resources/Prototypes/WhiteDream/runeSelectors.yml b/Resources/Prototypes/WhiteDream/rune_selectors.yml similarity index 88% rename from Resources/Prototypes/WhiteDream/runeSelectors.yml rename to Resources/Prototypes/WhiteDream/rune_selectors.yml index d63c81aa8da..5eb0dfc16a6 100644 --- a/Resources/Prototypes/WhiteDream/runeSelectors.yml +++ b/Resources/Prototypes/WhiteDream/rune_selectors.yml @@ -29,6 +29,8 @@ - type: runeSelector id: CultRuneApocalypse prototype: CultRuneApocalypse + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: @@ -37,6 +39,8 @@ - type: runeSelector id: CultRuneDimensionalRending prototype: CultRuneDimensionalRending + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index a991bf4035f..bed635c7026 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -59,3 +59,6 @@ - type: statusEffect id: StaminaModifier + +- type: statusEffect + id: PhaseShifted diff --git a/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml new file mode 100644 index 00000000000..a0e8dcb5d87 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml @@ -0,0 +1,184 @@ + + Be ware - this document is just almost a full copy of /tg/ station blood cult guide. + + # Blood Cult + + Even in the far future, some things are never quite understood. There are things that lurk in the darkness of space, + unspeakable horrors of ancient power that wish to bring ruin to the universe and to shape it into their image. They + reach out from the void, and turn the minds of mortal men and women in their favor in hopes that one day they shall be + brought once more into this plane of existence. + + The Geometer of Blood, Nar-Sie, has sent a number of her followers to Space Station 14. As a cultist, you have an + abundance of cult magics at your disposal, something for all situations. You must work with your brethren to summon an + avatar of your eldritch goddess! + + ## Objectives + + Your objective requires you to sacrifice a certain crewmember and summon Nar-Sie. + + The general path of action of the cult and those in it: + + - 1. From a discrete location, contact your allies. You can do it by speaking Eldritch language - everyone in the cult + can hear you when you speak it. + - 2. Find an area to convert into a base, usually accessible by one or more members of the cult, but well-hidden + enough that security or crew won't find it easily. + - 3. Setup a teleport rune, so all cultists can access it. + - 4. Setup an empowering rune and then prepare up to 4 blood spells. Stun spells are your bread and butter - but + diversifying with spells like EMP, Teleport, Blood Rites, etc. will ensure you're ready for anything. + - 5. Convert new members, or sacrifice implanted crew, on the offering rune. Combine the filled soul shard from + sacrificed humans to create powerful cult constructs! + - 6. Use teamwork to find your sacrifice target. + - 7. Kill the sacrifice target and place them on an offer rune with 3 cultists nearby. + - 8. Prepare to summon Nar-Sie. She can only be summoned in a few locations and the crew will fight desperately to + stop you! Make sure you have enough cultists and equipment to withstand their assault. + - 9. Gather 10 cultists on the final rune to summon Nar-Sie! + + ## Ritual Dagger + + + + + + Your dagger is your most important tool and has several functions: + + - You can draw runes with it. + - Hitting a non-cultist with it will result in you stabbing them (huh), dealing 15 piercing damage. + - Using it on the rune with erase it. + - Using it on the cult barrier will remove it. + + ## Minor Runes + + These are minor runes cultists can draw anywhere on the station. + + + + + + Can be used to convert or sacrifice targets on it. It takes two cultists to convert someone. + + [bold]REMINDER: One cultist is required to sacrifice a dead body and three for a live one, + standing adjacent to the rune. Each sacrifice will add to the Cult's total number of sacrifices, which are used + to revive deceased bretheren instantly over a Revival Rune.[/bold] + + + + + Grants a buff allowing cultists to prepare greater amounts of blood magic at far less of a cost. While you have + it, the spell count is capped at 4 instead of 1. Additionally, drawing runes takes far less time and you don't + lose as much blood while doing it. + + + + + This rune warps everything above it to another teleport rune when used. Creating a teleport rune will allow you to + set a tag for it. + + + + + Placing a cultist corpse on the rune and activating it will bring them back to life. Consumes one charge on use + and starts with three freebie revivals, so use it sparingly. . + + + + + When invoked, makes a temporary barrier to block passage. + + + + + This rune allows you to instantly summon any living cultist to the rune, consuming it afterward. Does not work on + restrained cultists who are buckled or being pulled. + + + + + When invoked, it saps some health from the invokers to send three damaging pulses to anyone who can see the + rune and ignites them. + + + ## Major runes + + These are the major runes cultists can draw once they meet certain conditions. They need a free 3x3 space, and can only + be summoned in 3 areas around the station (or have 3 global charges). Depleting all of them makes you unable to draw + them anymore. So be careful not to consume all of them with apocalypse runes or you'll never be able to summon + Nar'Sie! + + + + + + A harbinger of the end times. It scales depending on the crew's strength relative to the cult. Effect includes a + massive EMP, total blackout, solar flare and if the cult is doing poorly, certain events. If the cult makes up to + less than 15% of current players, and an apocalypse rune is activated, a random event will + occur: + - Immovable Rod x3 + - Mouse Migration x2 + - Meteor Swarm x2 + - Vent Crickets x3 + - Four Random Anomalies + - Kudzu Growth x2 + - Vendor Mimics x2 + + + + + This rune tears apart dimensional barriers, calling forth the Geometer. To start drawing it the requested target + must have already been sacrificed. Starting to draw this rune alarms the entire station of its location. The caster + must be defended for 45 seconds before it's complete. + After it's drawn, 10 cultists, constructs, or summoned ghosts must stand on the rune, which can then be invoked to + manifest Nar'Sie itself. + + ## Blood Spells + + Blood Spells are limited-use blood magic spells that dissipate after they're spent, and they're your bread and butter + when fighting the crew. Blood Spells can be created at any time via a menu when right clicking your character. + However, blood spells created without an Empowering Rune will take longer, cause significant blood loss, and + will cap your spell count at a measly one + + A good tip is to make sure to try and have a stun spell and a teleport spell with you to escape risky situations. This + will leave only two other options for spells though, so carefully choose what you think might help best for a + particular situation. + + + ## Constructs + + Shades and constructs are slaved to their masters will. They must follow the orders of their master at any cost. They + are capable of grasping intent, unlike synthetic beings. Constructs created by cultists automatically become cultists + themselves, allowing them to identify their team mates, and even count for the escape objective. + + + + + Shades are fragile, but being recaptured into their soul shard heals them. Useful if you quickly need someone to help + you activate a rune. + + + + + The artificer is the "drone" of the cult. It can construct cult-floors, walls and reinforced walls, as well as take + apart the station, but its main purpose is to provide the materials to construct additional constructs. It can create + new soul stones or shells after a certain time. + + + + + The wraith is a tiny bit more fragile than a human but has a strong melee attack. It can become invisible and travel + through closed doors and even walls by using it's phase shift ability. + + + + + Juggernauts are strong, slow and have lots of health. They can destroy any wall by simply punching it and do more + damage than Wraiths. They cannot be pushed or grabbed and even have a force-wall ability similar to the wizard spell. + + ## Tips + - Only cultists can know a rune's name and effects by examining it. + - Always be ready to summon a cultist in trouble. You can't summon them if they're already cuffed. + - Keeping a shade in a Soulstone Shard with you will allow you to use two-person runes by yourself, by releasing and + then recapturing the shade. + - Cultists often find a use for medibots. Having a single bot with a low threshold, backed up by brutepacks or pylons, + can keep your cult in fighting shape. + - The EMP spell and Apocalypse Rune are both incredibly useful. They can give you access almost anywhere, just don't + forget your crowbar! + diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png new file mode 100644 index 0000000000000000000000000000000000000000..3b09dd4520c7b0adccd5f14f688c7a27d35f4853 GIT binary patch literal 1852 zcmV-C2gCS@P);(SmFW+)MnzGb~mZQMW2QLT>Y2=S|yg+D3tAyeN=|>Ns@>xXD(Z!oK zOztjzQwPZK$RFtdXkNe3e*EMKiO86tD?6ll{pclk9MBE?x(>*In5(oygPQSq{@*fq z@!z8HSM_#kezDvMj~^UHfh>T_yXp4uElSe}P(7@Q?1-wfz5l}Ku=;&F(i8j)2p@>4 z$e8d|+CC7YgIZPlywaYEjEN8C7ma(VYqt=}vEMCxD|3Q|qrmq53sQ5}NQ6g8ghvgp zCc>ixwe$G#F+llk6b=jIvRP7d*UEaL{Q;m`_%$gYb3ZkAja)8Ap`cSN7SZsbbIkU^ zuZFIMk0Qqui$#J#C0C1oJF^;$-0v2CRRpNvlFMc(92O`Ri|8DqbIcnkU!Q*pfX?yB zkA*PC;Ty9H)-6`B)kROY@r_RSKrGEJh^f#eF&a2m&d1OtBmabwmp(9bMg!->ROpge znq4rSVW$qL`R^uvt2*FQJ1_^_xH?ZZo2785lYe~#z;^yOHY<95Fxmiful^}FO4YM6 zJ9(%MeU0$fD$(KJO&e`ENg1d34Tr(v>+)DDjgvw z-Y+ZncBR$<0z4+?sRlP&VR-~6!RB-zsDrPr?9@#Ub7(ukZ@CzmEuV;O5Lcb6DR}Gvmu}x73FQ_{+QLrYl3k z0W;v)1fKoA?`R@39Mp(KqbDDz1*wJ1faiLpxLL(l3uoxefMfi+De&sQqNR?@0vI|| z-mzKV+9YV{m(8UWzInkkT$uzp!FOB()apMR)QC+?7~c(e1FlSm8{tah!`=X4Z-7`V z<{00R1Ele42iCVX*#z9(5UUk6T@FgGI4HeheQT5TtxeXVDckrp#YKIy&5EFT{Fn2E zIbiZa2!LmQ=4};Hb7(g!f{pls<=u1@zO6zkA1tStt*UpXq9gTuAjZ4_F?}H9B-r}J7LvfcJSp}ZWICP+jsKj+hS51jRbBo zw5l=Y=hhnuY*l=03{O_{Izf+jT3Rwg84&m4NlOpQ>}hl5JkQxWb0=T-f0d$_9@3oxj^8sC#42YF@ z(lvg5C7yKs@TA*vYR?CBOKMU;=6HX<#oUZ)k9w+ ze*Shm34niR!)U`v%CvJnpqJ9}e1J4|Ng5hYp0q3XtLlB9iKX)a>Kb32-@C!j_gZXI zV{Y^Fy_Tlu18&EY)^~Us@bjxX8{CU0T{}JQws@iZR+lQp%?>{=3uin0e6PjP`2h2R zsU3d4*JA0v##B*_4|@Xu#9}c3p8atEboP9J+v2DQ%5*XF^S9&4j-L;3TZ{;p0Z(RU zLs%KtRo!|L94;qy2G3gF~VA1pv_ zKQATc;DWaj38@Ha1PJ^20>D6k^;NtgktBj1nTU=8xc9STH`#cv{MYebLQZ5n4G{=p zH0r)0ItpN+f4GR==fNzS7mV|9ClN$SGXC-C{5uRG4TQIqC4d`;4dH$fT~MI$YDy#rqwrcxd0cG z1m-;oDE+H;MLu*z0~7ajF95w~kBeNP;CbH_(8lbID8!G9wsmkpfOmwxY^G+%qhP}T z&Nk2xc$bk3ypVO=J9a$;)6>(icVx6(>ze|$@z8*^g(b+lN3!3L6k)TqeViwcd1%Fp zioo{y>{TklR`7G(ZY*9@+Eq+p z45sn@_D08((^i02h}#>fwZ&y-fLc0+)mjZowdO0S{^}*bi*+u7k?Vq4+S_{s1Os-< zu_O`;&LN28;v7NKH0C`OF$v;M^&}vyjY6q8fDuO{WU;a!)QTHdE;b$JCpTCh;99=?`T1n@MxF%FW?qLZngf{2-!DM)WL3z1Sq w_|P~@_Dz5Y62Uqsg1779f=cs0gz87@f80vwJDE89DgXcg07*qoM6N<$f Date: Wed, 11 Dec 2024 23:19:54 +0000 Subject: [PATCH 137/182] Automatic Changelog Update (#1276) --- Resources/Changelog/Changelog.yml | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 81d1ee417a9..9d9e8f7cb31 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8570,3 +8570,46 @@ Entries: id: 6572 time: '2024-12-11T23:12:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1324 +- author: Remuchi + changes: + - type: Add + message: In-game guide book to kickstart your sinister activities. + - type: Add + message: Constructs now have abilities. + - type: Add + message: >- + Rending rune and apocalypse rune now should only be placed in the + specific spots on maps. Needs to be mapped. + - type: Add + message: Veil Shifter now displays how much charges it has when examining. + - type: Add + message: >- + Cult runes now have descriptions. Also stating how much invokers + required for each rune. + - type: Add + message: Blood rites can now be dropped&deleted. + - type: Add + message: Blood rites now suck... blood in 0.5 tiles radius. + - type: Remove + message: Non-cultists can no longer examine runes. + - type: Fix + message: >- + Fixed Cult Objective Target selection. You can (and should) sacrifice + your own people now. + - type: Fix + message: Non cultists can no longer use veil shifter. + - type: Fix + message: Teleport spell is no more a cheap rip-off and now actually teleports. + - type: Fix + message: Timed Factories can't no more produce infinite number of entities. + - type: Fix + message: Offering rune should now properly convert someone. + - type: Fix + message: >- + Sacrificing body with mind now properly transfers their mind to soul + shard. + - type: Fix + message: Shadow Shackles now cuffs the target instead of the caster (lmao). + id: 6573 + time: '2024-12-11T23:19:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1276 From 5899f4ea5a978ded0362bdf46185f8fbb1a2607c Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 12 Dec 2024 07:26:32 +0800 Subject: [PATCH 138/182] Pistol-Whipping (Guns as Melee Weapons) (#1335) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description Adds the ability to use guns as melee weapons and throwing weapons. The gun melee attack is a Light Attack done with a right click. The attack rate is slower than average melee weapons. The cooldown on melee attacks after shooting has been removed entirely, so you can right-click immediately after shooting (like in hero shooters 😎). The cooldown on shooting after a melee attack has been set to a constant 0.5 seconds. ## Balance Technically speaking, weaving shooting and pistol-whipping lowers your overall DPS in most cases, because you can't shoot for 0.5 seconds after doing a melee attack. With _skillful_ usage, however, it provides some key tactical advantages: - Preserving ammo by dealing damage without firing a shot. - Deal stamina damage as a natural effect of dealing melee Blunt damage. - Most non-pistol guns have increased blunt stamina damage factors to help with this. - Bypassing Piercing resists of armors with a higher Piercing resist than Blunt resist like plate carriers. - Doing the combo of right-clicking immediately after shooting deals a big burst of damage. Pistol-whipping also helps as a last resort when you run out of ammo. However, it's almost always better to use a proper melee weapon instead of a gun as a pure melee weapon, because you can't power attack with guns and the guns' melee attack rate are slower by design than most melee weapons. Shotguns benefit the most from pistol-whipping, because their ideal range is close-range where a melee attack can be performed, and their low fire rate means they're not affected too much by the 0.5s shooting cooldown. Guns have received throwing damage. You can throw guns at the enemy once you're out of ammo to deal extra damage. I think this makes fights a little more spectacular to watch. Melee damage sorted by group (from least to greatest): 1. Revolver 2. Pistol (+ Energy Pistol) 3. Sniper rifle 4. Rifle (+ Energy Rifle) 5. Sub Machine Gun 6. Shotgun 7. Light Machine Gun (L6 saw) 8. Heavy Machine Gun ## Media **mk 58** ![image](https://github.com/user-attachments/assets/d17bc1c7-7ec5-4124-93c3-306026f7a23f) **Kardashev-Mosin (Wielded)** ![image](https://github.com/user-attachments/assets/52132262-48ae-48fa-a72c-3df5ae6bfd17) **Basic Combat** https://github.com/user-attachments/assets/922998d1-0cd0-4fea-8f0b-365bcff3c12b **Particle Decelerator Combo (80 damage)** https://github.com/user-attachments/assets/ce62334a-13dd-46d9-9c0e-453e26bf1261 Combo: Shoot + Power Attack, wait 1.6s then Power Attack + Throw This combo costs 90 stamina which almost depletes 100 stamina leaving you vulnerable, so the Vigor trait can help you pull off this combo. ## Changelog :cl: Skubman - add: Pistol-whipping has been added. You can press right click with a gun to perform a Light Attack. Most guns will deal Blunt damage, apart from the Kardashev-Mosin dealing Piercing/Slash damage with its bayonet. Weaving bullets and melee attacks correctly will give you the upper hand in combat. - add: Guns can now be thrown to deal the same damage as their melee damage. --- .../Melee/MeleeWeaponSystem.Effects.cs | 10 ++ .../Weapons/Melee/MeleeWeaponSystem.cs | 37 +++--- .../Weapons/Melee/MeleeWeaponSystem.cs | 25 ++-- .../Weapons/Melee/MeleeWeaponComponent.cs | 20 +++ .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 42 ++----- .../Weapons/Ranged/Components/GunComponent.cs | 6 + .../Weapons/Ranged/Systems/SharedGunSystem.cs | 18 +-- .../Locale/en-US/store/uplink-catalog.ftl | 2 +- .../Weapons/Guns/Battery/battery_guns.yml | 18 +++ .../Objects/Weapons/Guns/LMGs/lmgs.yml | 21 +++- .../Objects/Weapons/Guns/Basic/base_pka.yml | 17 +++ .../Weapons/Guns/Battery/battery_guns.yml | 114 ++++++++++++++++++ .../Objects/Weapons/Guns/HMGs/hmgs.yml | 14 +++ .../Objects/Weapons/Guns/LMGs/lmgs.yml | 18 +++ .../Weapons/Guns/Launchers/launchers.yml | 14 +++ .../Objects/Weapons/Guns/Pistols/pistols.yml | 13 ++ .../Weapons/Guns/Revolvers/revolvers.yml | 13 ++ .../Objects/Weapons/Guns/Rifles/rifles.yml | 18 +++ .../Objects/Weapons/Guns/SMGs/smgs.yml | 18 +++ .../Weapons/Guns/Shotguns/shotguns.yml | 64 ++++++++++ .../Objects/Weapons/Guns/Snipers/snipers.yml | 78 ++++++++++-- .../Objects/Weapons/Guns/flare_gun.yml | 13 ++ .../Objects/Weapons/Guns/pneumatic_cannon.yml | 13 ++ 23 files changed, 528 insertions(+), 78 deletions(-) diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs index 3e1a4b1906d..ffcd7454ac7 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs @@ -136,6 +136,7 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang { const float thrustEnd = 0.05f; const float length = 0.15f; + var rotation = sprite.Rotation + spriteRotation; var startOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f)); var endOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance)); @@ -144,6 +145,15 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang Length = TimeSpan.FromSeconds(length), AnimationTracks = { + new AnimationTrackComponentProperty() + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(rotation, 0f), + } + }, new AnimationTrackComponentProperty() { ComponentType = typeof(SpriteComponent), diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 1d72f16706f..9f2ee5eb8f6 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Wieldable.Components; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -71,10 +72,22 @@ public override void Update(float frameTime) return; } - var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use); - var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary); + var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use) == BoundKeyState.Down; + var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary) == BoundKeyState.Down; - if (weapon.AutoAttack || useDown != BoundKeyState.Down && altDown != BoundKeyState.Down) + // Disregard inputs to the shoot binding + if (TryComp(weaponUid, out var gun) && + // Except if can't shoot due to being unwielded + (!HasComp(weaponUid) || + (TryComp(weaponUid, out var wieldable) && wieldable.Wielded))) + { + if (gun.UseKey) + useDown = false; + else + altDown = false; + } + + if (weapon.AutoAttack || !useDown && !altDown) { if (weapon.Attacking) { @@ -82,23 +95,13 @@ public override void Update(float frameTime) } } - if (weapon.Attacking || weapon.NextAttack > Timing.CurTime) + if (weapon.Attacking || weapon.NextAttack > Timing.CurTime || (!useDown && !altDown)) { return; } // TODO using targeted actions while combat mode is enabled should NOT trigger attacks. - // TODO: Need to make alt-fire melee its own component I guess? - // Melee and guns share a lot in the middle but share virtually nothing at the start and end so - // it's kinda tricky. - // I think as long as we make secondaries their own component it's probably fine - // as long as guncomp has an alt-use key then it shouldn't be too much of a PITA to deal with. - if (TryComp(weaponUid, out var gun) && gun.UseKey) - { - return; - } - var mousePos = _eyeManager.PixelToMap(_inputManager.MouseScreenPosition); if (mousePos.MapId == MapId.Nullspace) @@ -118,7 +121,8 @@ public override void Update(float frameTime) } // Heavy attack. - if (altDown == BoundKeyState.Down) + if (!weapon.DisableHeavy && + (!weapon.SwapKeys ? altDown : useDown)) { // If it's an unarmed attack then do a disarm if (weapon.AltDisarm && weaponUid == entity) @@ -139,7 +143,8 @@ public override void Update(float frameTime) } // Light attack - if (useDown == BoundKeyState.Down) + if (!weapon.DisableClick && + (!weapon.SwapKeys ? useDown : altDown)) { var attackerPos = Transform(entity).MapPosition; diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index daf76268a3c..26f0c20608e 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -53,22 +53,25 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, return; var damageSpec = GetDamage(uid, args.User, component); - if (damageSpec.Empty) return; - _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - - if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) - _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + if (!component.DisableClick) + _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - if (component.HeavyStaminaCost != 0) + if (!component.DisableHeavy) { - var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( - Loc.GetString("damage-stamina-cost", - ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); - args.Message.PushNewline(); - args.Message.AddMessage(staminaCostMarkup); + if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) + _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + + if (component.HeavyStaminaCost != 0) + { + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( + Loc.GetString("damage-stamina-cost", + ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); + args.Message.PushNewline(); + args.Message.AddMessage(staminaCostMarkup); + } } } diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 16847c3797e..b698728193f 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -41,6 +41,26 @@ public sealed partial class MeleeWeaponComponent : Component [DataField] public bool ResetOnHandSelected = true; + /// + /// If true, swaps the keybinds for light attacks and heavy attacks. + /// + [DataField] + public bool SwapKeys = false; + + /// + /// If true, disables heavy attacks for this weapon, and prevents the heavy damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableHeavy = false; + + /// + /// If true, disables single-target attacks for this weapon, and prevents the single-target damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableClick = false; + /* * Melee combat works based around 2 types of attacks: * 1. Click attacks with left-click. This attacks whatever is under your mnouse diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 7bc817dd24a..aa15ecfb286 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -62,8 +62,6 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnMeleeSelected); - SubscribeLocalEvent(OnMeleeShotAttempted); - SubscribeLocalEvent(OnMeleeShot); SubscribeLocalEvent(OnGetBonusMeleeDamage); SubscribeLocalEvent(OnGetBonusHeavyDamageModifier); SubscribeLocalEvent(OnGetBonusMeleeAttackRate); @@ -86,24 +84,6 @@ private void OnMapInit(EntityUid uid, MeleeWeaponComponent component, MapInitEve #endif } - private void OnMeleeShotAttempted(EntityUid uid, MeleeWeaponComponent comp, ref ShotAttemptedEvent args) - { - if (comp.NextAttack > Timing.CurTime) - args.Cancel(); - } - - private void OnMeleeShot(EntityUid uid, MeleeWeaponComponent component, ref GunShotEvent args) - { - if (!TryComp(uid, out var gun)) - return; - - if (gun.NextFire > component.NextAttack) - { - component.NextAttack = gun.NextFire; - Dirty(uid, component); - } - } - private void OnMeleeSelected(EntityUid uid, MeleeWeaponComponent component, HandSelectedEvent args) { var attackRate = GetAttackRate(uid, args.User, component); @@ -169,29 +149,23 @@ private void OnStopAttack(StopAttackEvent msg, EntitySessionEventArgs args) private void OnLightAttack(LightAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableClick) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableHeavy) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } diff --git a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs index 8d7ecae1a81..d522df5395e 100644 --- a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs @@ -208,6 +208,12 @@ public sealed partial class GunComponent : Component [AutoPausedField] public TimeSpan NextFire = TimeSpan.Zero; + /// + /// After dealing a melee attack with this gun, the minimum cooldown in seconds before the gun can shoot again. + /// + [DataField] + public float MeleeCooldown = 0.528f; + /// /// What firemodes can be selected. /// diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 2fbb6785e29..7afb41239c6 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -114,14 +114,18 @@ private void OnMapInit(Entity gun, ref MapInitEvent args) private void OnGunMelee(EntityUid uid, GunComponent component, MeleeHitEvent args) { - if (!TryComp(uid, out var melee)) - return; + var curTime = Timing.CurTime; - if (melee.NextAttack > component.NextFire) - { - component.NextFire = melee.NextAttack; - Dirty(uid, component); - } + if (component.NextFire < curTime) + component.NextFire = curTime; + + var meleeCooldown = TimeSpan.FromSeconds(component.MeleeCooldown); + + component.NextFire += meleeCooldown; + while (component.NextFire <= curTime) + component.NextFire += meleeCooldown; + + Dirty(uid, component); } private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 1754bb89d3e..2ac91d171eb 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -9,7 +9,7 @@ uplink-pistol-cobra-name = Cobra uplink-pistol-cobra-desc = A rugged, robust operator handgun with inbuilt silencer. Uses pistol magazines (.25 caseless). uplink-rifle-mosin-name = Surplus Rifle -uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. +uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. The attached bayonet allows it to be used as an improvised spear. uplink-esword-name = Energy Sword uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can be stored in pockets when turned off. Makes a lot of noise when used or turned on. diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index f3b41bdbfec..d1251659ece 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -165,6 +165,15 @@ Disabler: { state: mode-disabler } Lethal: { state: mode-lethal } Special: { state: mode-stun } # Unused + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: miniature energy gun @@ -232,6 +241,15 @@ - Sidearm - type: StaticPrice price: 750 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: PDW-9 Energy Pistol diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 9fb68453ee3..64fdf76f9a3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity name: Experimental L6 SAW parent: BaseItem id: WeaponLightMachineGunL6Borg @@ -38,4 +38,21 @@ # - type: DynamicPrice # price: 500 - type: Appearance - + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml index 93621bc3a28..4eec74f05a6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml @@ -48,3 +48,20 @@ - Belt - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 62a98bd5da8..62291cc2714 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -37,6 +37,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponPowerCell @@ -78,6 +96,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponBatterySmall @@ -98,6 +134,15 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity id: BaseWeaponPowerCellSmall @@ -114,6 +159,15 @@ quickEquip: false slots: - Belt + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: svalinn laser pistol @@ -248,6 +302,10 @@ fireCost: 62.5 - type: StaticPrice price: 300 + - type: MeleeWeapon + damage: + types: + Blunt: 4 - type: entity name: pulse pistol @@ -377,6 +435,14 @@ - type: HitscanBatteryAmmoProvider proto: RedHeavyLaser fireCost: 100 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: portable particle decelerator @@ -408,6 +474,22 @@ - type: Battery maxCharge: 10000 startingCharge: 10000 + - type: MeleeWeapon + attackRate: 1.6 + damage: # This is super expensive, low attack rate, slows down the user and high stam cost so it can be high + types: + Blunt: 34 + Structural: 10 + swapKeys: false + disableHeavy: false + disableClick: true + bluntStaminaDamageFactor: 1.5 + heavyRateModifier: 1.0 + heavyDamageBaseModifier: 1.0 + heavyStaminaCost: 21 + wideAnimationRotation: 270 + - type: DamageOtherOnHit + staminaCost: 48 - type: entity name: x-ray cannon @@ -476,6 +558,12 @@ - type: GuideHelp guides: - Security + - type: MeleeWeapon + damage: + types: + Blunt: 5.0 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 135 - type: entity name: disabler SMG @@ -514,6 +602,12 @@ zeroVisible: true - type: StaticPrice price: 260 + - type: MeleeWeapon + damage: + types: + Blunt: 6.5 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 180 - type: entity name: practice disabler @@ -539,6 +633,11 @@ - type: ProjectileBatteryAmmoProvider proto: BulletDisablerPractice fireCost: 100 + - type: MeleeWeapon + damage: + types: + Blunt: 3 + bluntStaminaDamageFactor: 1.0 - type: entity name: taser @@ -615,6 +714,15 @@ price: 750 - type: StealTarget stealGroup: WeaponCaptain + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9 + bluntStaminaDamageFactor: 1.25 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: advanced laser pistol @@ -650,6 +758,12 @@ - type: Appearance - type: StaticPrice price: 63 + - type: MeleeWeapon + damage: + types: + Blunt: 8 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: C.H.I.M.P. handcannon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml index 9d685e1ddc0..72df09ac508 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml @@ -20,6 +20,20 @@ - type: StaticPrice price: 500 # No chamber because HMG may want its own + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 16 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 16 - type: entity name: minigun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index f90cbb6e601..4b6e21a4922 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -62,6 +62,24 @@ price: 500 - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 - type: entity name: L6 SAW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index be4ea534d7d..dc49dce0f3a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -19,6 +19,20 @@ containers: ballistic-ammo: !type:Container ents: [] + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 14 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 14 - type: entity name: china lake diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 73c2231b23a..fefc41ae865 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -66,6 +66,19 @@ - type: StaticPrice price: 500 - type: AmmoCounter + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: viper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 734b6c4adca..c85ce56974b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -50,6 +50,19 @@ path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: Deckard diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 61df2b857ea..0aa281b95c0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -51,6 +51,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: AKMS diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index b448ddea3e4..8d43953a07b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -54,6 +54,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: Atreides diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 44ee4a08c1b..40c85374123 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -43,6 +43,24 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: Bulldog @@ -102,6 +120,24 @@ - type: Appearance - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: antique Bulldog @@ -136,6 +172,12 @@ graph: ShotgunSawn node: start deconstructionTarget: null + - type: MeleeWeapon + damage: + types: + Blunt: 8.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: double-barreled shotgun @@ -162,6 +204,13 @@ - type: BallisticAmmoProvider - type: Wieldable - type: GunRequiresWield + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 9 + - type: DamageOtherOnHit + staminaCost: 8.0 - type: entity parent: WeaponShotgunEnforcer @@ -216,6 +265,13 @@ graph: ShotgunSawn node: shotgunsawn deconstructionTarget: null + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: sawn-off shogun @@ -255,6 +311,14 @@ deconstructionTarget: null - type: StaticPrice price: 0 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: blunderbuss diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 88c00bedbd5..86b90f2bdea 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -39,12 +39,30 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + wideAnimationRotation: 135 + animation: WeaponArcThrust + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: Kardashev-Mosin parent: [BaseWeaponSniper, BaseGunWieldable] id: WeaponSniperMosin - description: A weapon for hunting, or endless trench warfare. Uses .30 rifle ammo. + description: A weapon for hunting, or endless trench warfare, with a bayonet attached at the barrel. Uses .30 rifle ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi @@ -56,6 +74,30 @@ soundGunshot: path: /Audio/Weapons/Guns/Gunshots/sniper.ogg fireOnDropChance: 1 + - type: MeleeWeapon + range: 1.75 + damage: + types: + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: Kardashev-Mosin @@ -114,15 +156,29 @@ capacity: 1 proto: CartridgeAntiMateriel - type: MeleeWeapon - wideAnimationRotation: -135 + range: 1.75 damage: types: - Piercing: 15 #you fucking stab em - Bloodloss: 2 #no way to apply bleed, triangular bayonet wounds are hard to fix(source:that one copypasta) - angle: 0 - animation: WeaponArcThrust + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: flintlock pistol @@ -152,4 +208,12 @@ proto: CartridgeAntiMateriel - type: StaticPrice price: 0 - + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml index 9b046a7aae6..0ad30e9ed6e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml @@ -37,3 +37,16 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 6.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 4.5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 12511729460..2f1527d3592 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -61,6 +61,19 @@ storagebase: !type:Container ents: [] gas_tank: !type:ContainerSlot + - type: MeleeWeapon + attackRate: 1.33 + damage: + types: + Blunt: 9 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: pie cannon From 478e159fb76c497423e370bd583958295bbbb443 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 23:27:08 +0000 Subject: [PATCH 139/182] Automatic Changelog Update (#1335) --- Resources/Changelog/Changelog.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9d9e8f7cb31..60540bb9f63 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8613,3 +8613,17 @@ Entries: id: 6573 time: '2024-12-11T23:19:30.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1276 +- author: Skubman + changes: + - type: Add + message: >- + Pistol-whipping has been added. You can press right click with a gun to + perform a Light Attack. Most guns will deal Blunt damage, apart from the + Kardashev-Mosin dealing Piercing/Slash damage with its bayonet. Weaving + bullets and melee attacks correctly will give you the upper hand in + combat. + - type: Add + message: Guns can now be thrown to deal the same damage as their melee damage. + id: 6574 + time: '2024-12-11T23:26:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1335 From 3e3ca59850f1a21f2bb8e249455d655ec6b63d2c Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sat, 14 Dec 2024 00:09:02 -0400 Subject: [PATCH 140/182] Fix Interact Verb (#1346) Finally fixed it. Interact verbs weren't appearing because this is required in BaseMob. --- Resources/Prototypes/Entities/Mobs/base.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index da413c339d8..c98608fabb5 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -47,13 +47,6 @@ - type: RequireProjectileTarget active: False - type: AnimatedEmotes - -- type: entity - save: false - id: MobPolymorphable - abstract: true - components: - - type: Polymorphable - type: OwnInteractionVerbs allowedVerbs: [] # TODO: define something here, or don't. From f0e4612612fe18a126cdf47d712b63bc083b5483 Mon Sep 17 00:00:00 2001 From: Kyoth25f <41803390+Kyoth25f@users.noreply.github.com> Date: Sat, 14 Dec 2024 01:22:16 -0300 Subject: [PATCH 141/182] Fix Ripley Hydraulic Clamp (#1344) # Description Fix a bug in `MechGrabberSystem` causing the hydraulic clamps in Ripley to drop items far away. ---

Media

https://github.com/user-attachments/assets/d2c8e951-e391-42d7-b45d-78a275dc8bf2

--- # Changelog :cl: - fix: Hydraulic clamps now drop entities correctly --- .../Mech/Equipment/EntitySystems/MechGrabberSystem.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs index e04499e2abc..194ef532ba2 100644 --- a/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs +++ b/Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs @@ -83,10 +83,9 @@ public void RemoveItem(EntityUid uid, EntityUid mech, EntityUid toRemove, MechGr var xform = Transform(toRemove); _transform.AttachToGridOrMap(toRemove, xform); var (mechPos, mechRot) = _transform.GetWorldPositionRotation(mechxform); - var toRemoveWorldPos = _transform.GetWorldPosition(xform); var offset = mechPos + mechRot.RotateVec(component.DepositOffset); - _transform.SetWorldPositionRotation(toRemove, toRemoveWorldPos + offset, Angle.Zero); + _transform.SetWorldPositionRotation(toRemove, offset, Angle.Zero); _mech.UpdateUserInterface(mech); } @@ -157,7 +156,7 @@ private void OnInteract(EntityUid uid, MechGrabberComponent component, UserActiv args.Handled = true; var audio = _audio.PlayPvs(component.GrabSound, uid); - + if (audio == null) return; From 6dcb367adb769f51bcaf1a647a4ca6c886a10be7 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 14 Dec 2024 04:22:44 +0000 Subject: [PATCH 142/182] Automatic Changelog Update (#1344) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 60540bb9f63..fcc6810c657 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8627,3 +8627,10 @@ Entries: id: 6574 time: '2024-12-11T23:26:33.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1335 +- author: Kyoth25f + changes: + - type: Fix + message: Hydraulic clamps now drop entities correctly + id: 6575 + time: '2024-12-14T04:22:17.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1344 From c4c3e4283ae077fd0f55e4cce31710f31de046f7 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:09:00 -0400 Subject: [PATCH 143/182] Salvage Magnet UI and Character Switching Height/Width Bug Fix (#1347) # Description i fixed it also added a button "Connect & Go to Lobby" for people testing lobby stuff! Resolves #1131 --- # Changelog :cl: - fix: Fixed the bug where switching characters made your width/height change to incorrect values. - fix: Fixed the salvage magnet opening ten times. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 32 +++++++++++-------- Content.Client/MainMenu/MainMenu.cs | 26 +++++++++++++-- .../MainMenu/UI/MainMenuControl.xaml | 5 +++ .../UI/SalvageMagnetBoundUserInterface.cs | 4 +-- .../Locale/en-US/main-menu/main-menu.ftl | 1 + 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index f23fd6b4a0d..ce14882d167 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -95,7 +95,8 @@ public HumanoidProfileEditor( IPlayerManager playerManager, IPrototypeManager prototypeManager, JobRequirementsManager requirements, - MarkingManager markings) + MarkingManager markings + ) { RobustXamlLoader.Load(this); _cfgManager = cfgManager; @@ -114,7 +115,8 @@ public HumanoidProfileEditor( SaveButton.OnPressed += args => { Save?.Invoke(); }; ResetButton.OnPressed += args => { - SetProfile((HumanoidCharacterProfile?) _preferencesManager.Preferences?.SelectedCharacter, + SetProfile( + (HumanoidCharacterProfile?) _preferencesManager.Preferences?.SelectedCharacter, _preferencesManager.Preferences?.SelectedCharacterIndex); }; @@ -193,12 +195,11 @@ public HumanoidProfileEditor( #endregion Species - #region Height + #region Height and Width var prototype = _species.Find(x => x.ID == Profile?.Species) ?? _species.First(); UpdateHeightWidthSliders(); - UpdateDimensions(SliderUpdate.Both); HeightSlider.OnValueChanged += _ => UpdateDimensions(SliderUpdate.Height); WidthSlider.OnValueChanged += _ => UpdateDimensions(SliderUpdate.Width); @@ -492,7 +493,7 @@ public void RefreshFlavorText() if (_flavorText != null) return; - _flavorText = new FlavorText.FlavorText(); + _flavorText = new(); _flavorText.OnFlavorTextChanged += OnFlavorTextChange; _flavorTextEdit = _flavorText.CFlavorTextInput; CTabContainer.AddTab(_flavorText, Loc.GetString("humanoid-profile-editor-flavortext-tab")); @@ -763,11 +764,11 @@ public void RefreshJobs() foreach (var job in jobs) { var jobContainer = new BoxContainer { Orientation = LayoutOrientation.Horizontal, }; - var selector = new RequirementsSelector { Margin = new Thickness(3f, 3f, 3f, 0f) }; + var selector = new RequirementsSelector { Margin = new(3f, 3f, 3f, 0f) }; var icon = new TextureRect { - TextureScale = new Vector2(2, 2), + TextureScale = new(2, 2), VerticalAlignment = VAlignment.Center }; var jobIcon = _prototypeManager.Index(job.Icon); @@ -1349,21 +1350,26 @@ private void UpdateSpawnPriorityControls() private void UpdateHeightWidthSliders() { + if (Profile is null) + return; + var species = _species.Find(x => x.ID == Profile?.Species) ?? _species.First(); HeightSlider.MinValue = species.MinHeight; HeightSlider.MaxValue = species.MaxHeight; - HeightSlider.Value = Profile?.Height ?? species.DefaultHeight; + HeightSlider.SetValueWithoutEvent(Profile?.Height ?? species.DefaultHeight); WidthSlider.MinValue = species.MinWidth; WidthSlider.MaxValue = species.MaxWidth; - WidthSlider.Value = Profile?.Width ?? species.DefaultWidth; + WidthSlider.SetValueWithoutEvent(Profile?.Width ?? species.DefaultWidth); var height = MathF.Round(species.AverageHeight * HeightSlider.Value); HeightLabel.Text = Loc.GetString("humanoid-profile-editor-height-label", ("height", (int) height)); var width = MathF.Round(species.AverageWidth * WidthSlider.Value); WidthLabel.Text = Loc.GetString("humanoid-profile-editor-width-label", ("width", (int) width)); + + UpdateDimensions(SliderUpdate.Both); } private enum SliderUpdate @@ -1375,9 +1381,10 @@ private enum SliderUpdate private void UpdateDimensions(SliderUpdate updateType) { - var species = _species.Find(x => x.ID == Profile?.Species) ?? _species.First(); + if (Profile == null) + return; - if (Profile == null) return; + var species = _species.Find(x => x.ID == Profile?.Species) ?? _species.First(); var heightValue = Math.Clamp(HeightSlider.Value, species.MinHeight, species.MaxHeight); var widthValue = Math.Clamp(WidthSlider.Value, species.MinWidth, species.MaxWidth); @@ -1386,13 +1393,12 @@ private void UpdateDimensions(SliderUpdate updateType) if (updateType == SliderUpdate.Height || updateType == SliderUpdate.Both) if (ratio < 1 / sizeRatio || ratio > sizeRatio) - widthValue = heightValue / (ratio < 1 / sizeRatio ? (1 / sizeRatio) : sizeRatio); + widthValue = heightValue * (ratio < 1 / sizeRatio ? (1 / sizeRatio) : sizeRatio); if (updateType == SliderUpdate.Width || updateType == SliderUpdate.Both) if (ratio < 1 / sizeRatio || ratio > sizeRatio) heightValue = widthValue * (ratio < 1 / sizeRatio ? (1 / sizeRatio) : sizeRatio); - heightValue = Math.Clamp(heightValue, species.MinHeight, species.MaxHeight); widthValue = Math.Clamp(widthValue, species.MinWidth, species.MaxWidth); diff --git a/Content.Client/MainMenu/MainMenu.cs b/Content.Client/MainMenu/MainMenu.cs index 43c5bfe5674..58d94adf225 100644 --- a/Content.Client/MainMenu/MainMenu.cs +++ b/Content.Client/MainMenu/MainMenu.cs @@ -7,6 +7,7 @@ using Robust.Client.UserInterface.Controls; using Robust.Shared; using Robust.Shared.Configuration; +using Robust.Shared.Console; using Robust.Shared.Network; using Robust.Shared.Utility; using UsernameHelpers = Robust.Shared.AuthLib.UsernameHelpers; @@ -25,9 +26,11 @@ public sealed class MainScreen : Robust.Client.State.State [Dependency] private readonly IGameController _controllerProxy = default!; [Dependency] private readonly IResourceCache _resourceCache = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; + [Dependency] private readonly IConsoleHost _console = default!; private MainMenuControl _mainMenuControl = default!; private bool _isConnecting; + private bool _shouldGoLobby; // ReSharper disable once InconsistentNaming private static readonly Regex IPv6Regex = new(@"\[(.*:.*:.*)](?::(\d+))?"); @@ -38,15 +41,27 @@ protected override void Startup() _mainMenuControl = new MainMenuControl(_resourceCache, _configurationManager); _userInterfaceManager.StateRoot.AddChild(_mainMenuControl); + _client.PlayerJoinedGame += OnPlayerJoinedGame; + _mainMenuControl.QuitButton.OnPressed += QuitButtonPressed; _mainMenuControl.OptionsButton.OnPressed += OptionsButtonPressed; _mainMenuControl.DirectConnectButton.OnPressed += DirectConnectButtonPressed; + _mainMenuControl.GoToLobbyButton.OnPressed += GoToLobbyButtonPressed; _mainMenuControl.AddressBox.OnTextEntered += AddressBoxEntered; _mainMenuControl.ChangelogButton.OnPressed += ChangelogButtonPressed; _client.RunLevelChanged += RunLevelChanged; } + private void OnPlayerJoinedGame(object? sender, PlayerEventArgs e) + { + if (_shouldGoLobby) + { + _console.ExecuteCommand("golobby"); + _shouldGoLobby = false; + } + } + /// protected override void Shutdown() { @@ -77,12 +92,18 @@ private void DirectConnectButtonPressed(BaseButton.ButtonEventArgs args) TryConnect(input.Text); } + private void GoToLobbyButtonPressed(BaseButton.ButtonEventArgs obj) + { + var input = _mainMenuControl.AddressBox; + TryConnect(input.Text); + + _shouldGoLobby = true; + } + private void AddressBoxEntered(LineEdit.LineEditEventArgs args) { if (_isConnecting) - { return; - } TryConnect(args.Text); } @@ -185,6 +206,7 @@ private void _setConnectingState(bool state) { _isConnecting = state; _mainMenuControl.DirectConnectButton.Disabled = state; + _mainMenuControl.GoToLobbyButton.Disabled = state; } } } diff --git a/Content.Client/MainMenu/UI/MainMenuControl.xaml b/Content.Client/MainMenu/UI/MainMenuControl.xaml index d6c3f4b9415..e0242300fc2 100644 --- a/Content.Client/MainMenu/UI/MainMenuControl.xaml +++ b/Content.Client/MainMenu/UI/MainMenuControl.xaml @@ -30,6 +30,11 @@ Text="{Loc 'main-menu-direct-connect-button'}" TextAlign="Center" StyleIdentifier="mainMenu"/> +
public void MindBreak(EntityUid uid) { + if (!HasComp(uid)) + return; + RemoveAllPsionicPowers(uid, true); + if (_config.GetCVar(CCVars.ScarierMindbreaking)) + ScarierMindbreak(uid); + } + + /// + /// An even more advanced form of Mindbreaking. Turn the victim into an NPC. + /// For the people who somehow didn't intuit from the absolutely horrifying text that mindbreaking people is very fucking bad. + /// + public void ScarierMindbreak(EntityUid uid) + { + if (!_playerManager.TryGetSessionByEntity(uid, out var session) || session is null) + return; + + var feedbackMessage = $"[font size=24][color=#ff0000]{"Your characters personhood has been obliterated. If you wish to continue playing, consider respawning as a new character."}[/color][/font]"; + _chatManager.ChatMessageToOne( + ChatChannel.Emotes, + feedbackMessage, + feedbackMessage, + EntityUid.Invalid, + false, + session.Channel); + + if (!_mind.TryGetMind(session, out var mindId, out var mind)) + return; + + _ghost.SpawnGhost((mindId, mind), Transform(uid).Coordinates, false); + _npcFaction.AddFaction(uid, "SimpleNeutral"); + var htn = EnsureComp(uid); + htn.RootTask = new HTNCompoundTask() { Task = "IdleCompound" }; } /// diff --git a/Content.Server/Nyanotrasen/Chemistry/Effects/ChemRemovePsionic.cs b/Content.Server/Nyanotrasen/Chemistry/Effects/ChemRemovePsionic.cs index 859f22cd4a9..e500e246d5b 100644 --- a/Content.Server/Nyanotrasen/Chemistry/Effects/ChemRemovePsionic.cs +++ b/Content.Server/Nyanotrasen/Chemistry/Effects/ChemRemovePsionic.cs @@ -21,7 +21,7 @@ public override void Effect(ReagentEffectArgs args) var psySys = args.EntityManager.EntitySysManager.GetEntitySystem(); - psySys.RemoveAllPsionicPowers(args.SolutionEntity, true); + psySys.MindBreak(args.SolutionEntity); } } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 69c958fbc15..ef63d89af96 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2795,6 +2795,17 @@ public static readonly CVarDef public static readonly CVarDef PresetAutoVoteEnabled = CVarDef.Create("vote.preset_autovote_enabled", true, CVar.SERVERONLY); + #region Psionics + + /// + /// When mindbroken, permanently eject the player from their own body, and turn their character into an NPC. + /// Congratulations, now they *actually* aren't a person anymore. + /// For people who complained that it wasn't obvious enough from the text that Mindbreaking is a form of Murder. + /// + public static readonly CVarDef ScarierMindbreaking = + CVarDef.Create("psionics.scarier_mindbreaking", false, CVar.SERVERONLY); + #endregion + /// /// Set to true to enable the dynamic hostname system. /// Automatically updates the hostname to include current map and preset. From 4d87be6ea66356156cdac6e7e9cd70af36daae24 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 16 Dec 2024 15:23:08 +0000 Subject: [PATCH 154/182] Automatic Changelog Update (#1249) --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f5796add747..7b6be768fa2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8676,3 +8676,14 @@ Entries: id: 6579 time: '2024-12-15T19:26:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1340 +- author: VMSolidus + changes: + - type: Add + message: >- + Added a server option for "Scarier Mindbreaking". Mindbreaking now + irreversibly converts a player character into a non-sentient NPC. + - type: Fix + message: Mindbreaking now only works on Psychics. + id: 6580 + time: '2024-12-16T15:22:36.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1249 From 88edcd05aef76acb10e3d0924dd874eef22c7f71 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 16 Dec 2024 10:50:53 -0500 Subject: [PATCH 155/182] Redshirt And Brittle Bone Traits (#1352) # Description This PR adds two additional "High Value" physical negative traits, to help address a growing need for more high point value negatives, since there is also a very large number of high point positive traits. These two traits are fairly simple, the first is Redshirt, which decreases your Dead threshold by 100, and Brittle Bone Disease , which reduces your Crit threshold by 50. Taking both on an ordinary human would give +18 trait points to work with, but would in turn give a healthbar of only 50/100, compared with the standard healthbar of 100/200. # Changelog :cl: - add: Added Redshirt and Brittle Bone Disease traits. These give extremely large negative modifiers to your healthbar, but also grant a large amount of trait points to work with. --- Resources/Locale/en-US/traits/traits.ftl | 13 ++++++++ Resources/Prototypes/Traits/physical.yml | 40 ++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 9b17fb6433c..97a8150c495 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -464,3 +464,16 @@ trait-description-PsychognomyPower = A special talent derived from Telepathy, Psychognomy is the ability to read the underlying imprint of telepathic messages. A Psychognomist can glean additional information from their telepathy, seeing vague outlines of what the source of a message might be. This information is not precise, and is largely only useful for narrowing down who the source of a message might be. + +trait-name-Redshirt = Redshirt +trait-description-Redshirt = + They said this air would be breathable. + Get in, get out again, and no one gets hurt. + Something is pulling me up the hill. + I look down in my red shirt. + I look down in my red shirt. + +trait-name-BrittleBoneDisease = Osteogenesis Imperfecta +trait-description-BrittleBoneDisease = + Also known as "brittle bone disease", people with this genetic disorder have bones that are easily broken, + often simply by moving. This trait reduces your threshold for critical injury by 50 points. diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index a13db4f48cf..1e400e32bda 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -669,3 +669,43 @@ - Biological - Inorganic - Silicon + +- type: trait + id: Redshirt + category: Physical + points: -8 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + functions: + - !type:TraitReplaceComponent + components: + - type: DeadModifier + deadThresholdModifier: -100 + +- type: trait + id: BrittleBoneDisease + category: Physical + points: -10 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - MedicalBorg + - !type:CharacterSpeciesRequirement + inverted: true + species: + - IPC + functions: + - !type:TraitReplaceComponent + components: + - type: CritModifier + critThresholdModifier: -50 From ed0e56aa446ea9ad9ecae1a1a1685438378b1814 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 16 Dec 2024 15:51:21 +0000 Subject: [PATCH 156/182] Automatic Changelog Update (#1352) --- Resources/Changelog/Changelog.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7b6be768fa2..1d04ae5e01c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8687,3 +8687,13 @@ Entries: id: 6580 time: '2024-12-16T15:22:36.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1249 +- author: VMSolidus + changes: + - type: Add + message: >- + Added Redshirt and Brittle Bone Disease traits. These give extremely + large negative modifiers to your healthbar, but also grant a large + amount of trait points to work with. + id: 6581 + time: '2024-12-16T15:50:54.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1352 From f5d45d790d793acbba7d21258cd206568fe79f99 Mon Sep 17 00:00:00 2001 From: Blu <79374236+BlueHNT@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:55:05 +0100 Subject: [PATCH 157/182] Jackboots Slowdown Mitigation (PORT) (#1342) # Description Ports jackboot slowdown mitigation from [space-wizards github](https://github.com/space-wizards/space-station-14/pull/30586). Adds fake version for civilian use. --- # Changelog :cl: - add: Added slowdown mitigation to jackboots - add: Added fake jackboots for style outside of sec --------- Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../ClothingSlowOnDamageModifierComponent.cs | 17 +++++++ .../Damage/Systems/SlowOnDamageSystem.cs | 45 ++++++++++++++++++- .../Inventory/InventorySystem.Relay.cs | 1 + Resources/Locale/en-US/damage/stamina.ftl | 2 + .../Entities/Clothing/Shoes/boots.yml | 13 ++++++ .../Markers/Spawners/Random/maintenance.yml | 2 + .../Prototypes/Loadouts/Generic/shoes.yml | 11 +++++ 7 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 Content.Shared/Damage/Components/ClothingSlowOnDamageModifierComponent.cs diff --git a/Content.Shared/Damage/Components/ClothingSlowOnDamageModifierComponent.cs b/Content.Shared/Damage/Components/ClothingSlowOnDamageModifierComponent.cs new file mode 100644 index 00000000000..3d4bdd597c3 --- /dev/null +++ b/Content.Shared/Damage/Components/ClothingSlowOnDamageModifierComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Damage.Components; + +/// +/// This is used for a clothing item that modifies the slowdown from taking damage. +/// Used for entities with +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SlowOnDamageSystem))] +public sealed partial class ClothingSlowOnDamageModifierComponent : Component +{ + /// + /// A coefficient modifier for the slowdown + /// + [DataField] + public float Modifier = 1; +} diff --git a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs index 833883c144c..3e50ee35572 100644 --- a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs +++ b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs @@ -1,5 +1,8 @@ +using Content.Shared.Clothing; using Content.Shared.Damage.Components; +using Content.Shared.Examine; using Content.Shared.FixedPoint; +using Content.Shared.Inventory; using Content.Shared.Movement.Systems; namespace Content.Shared.Damage @@ -14,6 +17,11 @@ public override void Initialize() SubscribeLocalEvent(OnDamageChanged); SubscribeLocalEvent(OnRefreshMovespeed); + + SubscribeLocalEvent>(OnModifySpeed); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); } private void OnRefreshMovespeed(EntityUid uid, SlowOnDamageComponent component, RefreshMovementSpeedModifiersEvent args) @@ -36,7 +44,10 @@ private void OnRefreshMovespeed(EntityUid uid, SlowOnDamageComponent component, if (closest != FixedPoint2.Zero) { var speed = component.SpeedModifierThresholds[closest]; - args.ModifySpeed(speed, speed); + + var ev = new ModifySlowOnDamageSpeedEvent(speed); + RaiseLocalEvent(uid, ref ev); + args.ModifySpeed(ev.Speed, ev.Speed); } } @@ -47,5 +58,37 @@ private void OnDamageChanged(EntityUid uid, SlowOnDamageComponent component, Dam _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(uid); } + + private void OnModifySpeed(Entity ent, ref InventoryRelayedEvent args) + { + var dif = 1 - args.Args.Speed; + if (dif <= 0) + return; + + // reduces the slowness modifier by the given coefficient + args.Args.Speed += dif * ent.Comp.Modifier; + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + var msg = Loc.GetString("slow-on-damage-modifier-examine", ("mod", (1 - ent.Comp.Modifier) * 100)); + args.PushMarkup(msg); + } + + private void OnGotEquipped(Entity ent, ref ClothingGotEquippedEvent args) + { + _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(args.Wearer); + } + + private void OnGotUnequipped(Entity ent, ref ClothingGotUnequippedEvent args) + { + _movementSpeedModifierSystem.RefreshMovementSpeedModifiers(args.Wearer); + } + } + + [ByRefEvent] + public record struct ModifySlowOnDamageSpeedEvent(float Speed) : IInventoryRelayEvent + { + public SlotFlags TargetSlots => SlotFlags.WITHOUT_POCKET; } } diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 39e10415f8e..44892a617e0 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -34,6 +34,7 @@ public void InitializeRelay() // by-ref events SubscribeLocalEvent(RefRelayInventoryEvent); + SubscribeLocalEvent(RefRelayInventoryEvent); // Eye/vision events SubscribeLocalEvent(RelayInventoryEvent); diff --git a/Resources/Locale/en-US/damage/stamina.ftl b/Resources/Locale/en-US/damage/stamina.ftl index 657f32cb651..09f9164497a 100644 --- a/Resources/Locale/en-US/damage/stamina.ftl +++ b/Resources/Locale/en-US/damage/stamina.ftl @@ -1,3 +1,5 @@ melee-stamina = Not enough stamina +slow-on-damage-modifier-examine = Slowness from injuries is reduced by [color=yellow]{$mod}%[/color] + throw-no-stamina = You don't have enough stamina to throw the {$item}! diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml index fdc49dc0616..069555c836a 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml @@ -20,6 +20,19 @@ sprite: Clothing/Shoes/Boots/jackboots.rsi - type: Clothing sprite: Clothing/Shoes/Boots/jackboots.rsi + - type: ClothingSlowOnDamageModifier + modifier: 0.5 + +- type: entity + parent: ClothingShoesMilitaryBase + id: ClothingShoesBootsJackFake + name: jackboots + description: Civilian-grade replica of Nanotrasen Security combat boots. Looks the part but lacks the performance—ideal for the heated situations. + components: + - type: Sprite + sprite: Clothing/Shoes/Boots/jackboots.rsi + - type: Clothing + sprite: Clothing/Shoes/Boots/jackboots.rsi - type: entity parent: ClothingShoesBaseButcherable diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 3430c761fb5..90774a1185e 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -129,6 +129,8 @@ id: ClothingOuterVestHazard - !type:EntSelector id: ClothingShoesBootsJack + - !type:EntSelector + id: ClothingShoesBootsJackFake - !type:EntSelector id: ClothingShoesHighheelBoots - !type:EntSelector diff --git a/Resources/Prototypes/Loadouts/Generic/shoes.yml b/Resources/Prototypes/Loadouts/Generic/shoes.yml index 76799bf971c..08f22753250 100644 --- a/Resources/Prototypes/Loadouts/Generic/shoes.yml +++ b/Resources/Prototypes/Loadouts/Generic/shoes.yml @@ -133,6 +133,17 @@ items: - ClothingShoesBootsWork +- type: loadout + id: LoadoutShoesBootsJackFake + category: Shoes + cost: 1 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutShoes + items: + - ClothingShoesBootsJackFake + - type: loadout id: LoadoutShoesBootsLaceup category: Shoes From 03dc85aa7071c70cd9f01392cabf7cb7fb2fa6ac Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Mon, 16 Dec 2024 17:55:31 +0000 Subject: [PATCH 158/182] Automatic Changelog Update (#1342) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1d04ae5e01c..d2f5743cb09 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8697,3 +8697,12 @@ Entries: id: 6581 time: '2024-12-16T15:50:54.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1352 +- author: BlueHNT + changes: + - type: Add + message: Added slowdown mitigation to jackboots + - type: Add + message: Added fake jackboots for style outside of sec + id: 6582 + time: '2024-12-16T17:55:06.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1342 From ec60940fe5eae5d7d3e969bac132e1da2a659272 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 16 Dec 2024 13:39:00 -0500 Subject: [PATCH 159/182] Fix Redshirt & Brittle Bone Traits (#1355) These were supposed to be negative traits(They give you points), but I accidentally made them positive traits(They cost points). --- Resources/Prototypes/Traits/physical.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index 1e400e32bda..d8139800e1f 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -673,7 +673,7 @@ - type: trait id: Redshirt category: Physical - points: -8 + points: 8 requirements: - !type:CharacterJobRequirement inverted: true @@ -693,7 +693,7 @@ - type: trait id: BrittleBoneDisease category: Physical - points: -10 + points: 10 requirements: - !type:CharacterJobRequirement inverted: true From 577126f987ff70ba213f2898ea9e5170b0dc5ea6 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Tue, 17 Dec 2024 17:37:56 -0500 Subject: [PATCH 160/182] Example Hub Ad List (#1356) # Description this PR extends the list of default advertiser hubs to include every existing hub except for SSMV(Which is mutually exclusive with the others). If there are more hubs I have missed, please let me know. This will allow our servers to appear on as many hubs as possible. --- Resources/ConfigPresets/EinsteinEngines/default.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/ConfigPresets/EinsteinEngines/default.toml b/Resources/ConfigPresets/EinsteinEngines/default.toml index ac50e57b9b6..a463478e186 100644 --- a/Resources/ConfigPresets/EinsteinEngines/default.toml +++ b/Resources/ConfigPresets/EinsteinEngines/default.toml @@ -18,7 +18,7 @@ lobbyduration = 240 [hub] tags = "lang:en-US,region:am_n_e,rp:med" -hub_urls = "https://hub.spacestation14.com/" +hub_urls = "https://hub.spacestation14.com/, https://web.networkgamez.com/, https://hub.singularity14.co.uk/" [ic] flavor_text = true From a06b4661b08abe6f64460655962b98f4ccb9db07 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Tue, 17 Dec 2024 20:32:32 -0500 Subject: [PATCH 161/182] Saltern Update (#1357) # Description I would like to offer my thanks to the Singularity Network Mapping Team for this update, they've done some great work! This PR launches Saltern with a significant rework to everything on it except for arrivals.

Media

Sorry, Map Renderer is dead right now. ![image](https://github.com/user-attachments/assets/53ad601b-087e-4525-b6b6-74b16c5e4dbd) ![image](https://github.com/user-attachments/assets/25bbbed0-18c4-4757-a966-c919379dc5e1)

# Changelog Death do NOT change the name given for the Changelog author, the mappers here have requested that "SiN Mapping Team" be given as the name for this PR. :cl: SiN Mapping Team - add: Saltern has been fully reworked! --- Resources/Maps/saltern.yml | 40098 ++++++++++++------------ Resources/Prototypes/Maps/saltern.yml | 2 - 2 files changed, 19806 insertions(+), 20294 deletions(-) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 46bdea0fda7..adb89e10095 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -4,9 +4,12 @@ meta: tilemap: 0: Space 7: FloorAsteroidSand + 4: FloorBlue 17: FloorBlueCircuit 19: FloorBrokenWood + 6: FloorCaveDrought 25: FloorClown + 1: FloorConcrete 29: FloorDark 30: FloorDarkDiagonal 33: FloorDarkMini @@ -19,6 +22,7 @@ tilemap: 45: FloorGlass 46: FloorGold 47: FloorGrass + 3: FloorGym 58: FloorHydro 60: FloorKitchen 61: FloorLaundry @@ -26,6 +30,7 @@ tilemap: 64: FloorMetalDiamond 65: FloorMime 69: FloorMono + 2: FloorPlastic 76: FloorRGlass 77: FloorReinforced 78: FloorReinforcedHardened @@ -39,6 +44,7 @@ tilemap: 105: FloorTechMaint2 108: FloorWhite 113: FloorWhiteMono + 5: FloorWhitePlastic 118: FloorWood 119: FloorWoodTile 120: Lattice @@ -55,103 +61,103 @@ entities: chunks: -1,-1: ind: -1,-1 - tiles: WQAAAAADWQAAAAABWQAAAAABWQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAABWQAAAAACWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAACWQAAAAADWQAAAAACWQAAAAABWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAADeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAdgAAAAAAdgAAAAACdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAADdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAACdgAAAAAAdgAAAAABdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAADdgAAAAAAdgAAAAACdgAAAAACdgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAACdgAAAAADdgAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAACdgAAAAABdgAAAAABaAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAACdgAAAAACdgAAAAACdgAAAAACdgAAAAAAeQAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAACdgAAAAADdgAAAAADdgAAAAADdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAABdgAAAAAAdgAAAAADdgAAAAACdgAAAAACdgAAAAABeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAAAdgAAAAADdgAAAAACdgAAAAAAdgAAAAABdgAAAAACdgAAAAAAdgAAAAACdgAAAAADdgAAAAAAeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAADdgAAAAACdgAAAAADdgAAAAADdgAAAAABdgAAAAADdgAAAAACdgAAAAACdgAAAAADdgAAAAABdgAAAAAB + tiles: WQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAAAWQAAAAABWQAAAAABAgAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAADWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAABAgAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAwAAAAAAAwAAAAAAdgAAAAAAdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAABAAAAAAABAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAAwAAAAAAAwAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAABAAAAAAABAAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAAwAAAAAAAwAAAAAAdgAAAAABdgAAAAAAdgAAAAACeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAdgAAAAADdgAAAAACdgAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAdgAAAAACdgAAAAACdgAAAAABdgAAAAAAdgAAAAABPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAABdgAAAAADdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAACdgAAAAACdgAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAdgAAAAACdgAAAAADdgAAAAADdgAAAAADdgAAAAABdgAAAAADdgAAAAACdgAAAAACeQAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAdgAAAAADdgAAAAAAdgAAAAABdgAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAALAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAACdgAAAAAAdgAAAAABdgAAAAAAdgAAAAACdgAAAAADdgAAAAAAeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAdgAAAAABdgAAAAADdgAAAAAAdgAAAAACdgAAAAAAdgAAAAAAdgAAAAADdgAAAAABdgAAAAADdgAAAAACeQAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAABdgAAAAACdgAAAAABdgAAAAACdgAAAAAA version: 6 -1,0: ind: -1,0 - tiles: PAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAABdgAAAAAAdgAAAAABdgAAAAAAdgAAAAADdgAAAAADPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAADdgAAAAADdgAAAAAAdgAAAAACdgAAAAABdgAAAAAAdgAAAAADdgAAAAACdgAAAAAAdgAAAAADdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAABZAAAAAADZAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAABWQAAAAAAWQAAAAACWQAAAAADWQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAWQAAAAABeQAAAAAAWQAAAAACWQAAAAADeQAAAAAAWQAAAAABWQAAAAACeQAAAAAAHQAAAAAAHQAAAAACHQAAAAACYAAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAWQAAAAACeQAAAAAAWQAAAAABWQAAAAABeQAAAAAAWQAAAAACWQAAAAABeQAAAAAAHQAAAAABHQAAAAABHQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAWQAAAAAAWQAAAAACWQAAAAADWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAADWQAAAAABWQAAAAADWQAAAAAAWQAAAAACWQAAAAAAWQAAAAACYAAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAAAWQAAAAACWQAAAAABWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADLQAAAAAAWQAAAAADLQAAAAAAWQAAAAACWQAAAAAAWQAAAAADWQAAAAABeQAAAAAAbAAAAAAALAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAADeQAAAAAAbAAAAAAALAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAWQAAAAACLQAAAAAAWQAAAAACLQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAADeQAAAAAAbAAAAAAAeQAAAAAALAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: PAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAAAdgAAAAABdgAAAAABdgAAAAADdgAAAAADdgAAAAABdgAAAAABdgAAAAADdgAAAAABdgAAAAABdgAAAAACPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAWQAAAAABdgAAAAADdgAAAAACdgAAAAAAdgAAAAADdgAAAAADdgAAAAABdgAAAAAAdgAAAAADdgAAAAADdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAAAZAAAAAACZAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACAgAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAAAWQAAAAABAgAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAACAgAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAADWQAAAAACWQAAAAADWQAAAAADWQAAAAABWQAAAAAAWQAAAAABAgAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAABWQAAAAACWQAAAAABWQAAAAADWQAAAAACAgAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAABWQAAAAABAgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABTQAAAAAAWQAAAAABWQAAAAABWQAAAAADeQAAAAAAWQAAAAACWQAAAAADeQAAAAAAHQAAAAAAHQAAAAADHQAAAAACYAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAACTQAAAAAAWQAAAAADWQAAAAACWQAAAAACeQAAAAAAWQAAAAABWQAAAAACeQAAAAAAHQAAAAABHQAAAAADHQAAAAACYAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAABWQAAAAADWQAAAAADWQAAAAAAWQAAAAABWQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAYAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAADLQAAAAAAAgAAAAAALQAAAAAAAgAAAAAAWQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAWQAAAAADPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAADJgAAAAACeQAAAAAAWQAAAAAALQAAAAAAAgAAAAAALQAAAAAAAgAAAAAAWQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAJgAAAAABJgAAAAAAJgAAAAADJgAAAAABJgAAAAACeQAAAAAAWQAAAAACAgAAAAAAAgAAAAAAAgAAAAAAWQAAAAABWQAAAAACPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAJgAAAAACJgAAAAABJgAAAAADJgAAAAADUAAAAAAAWQAAAAAALQAAAAAAAgAAAAAALQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 0,-1: ind: 0,-1 - tiles: WQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAbAAAAAADbAAAAAABbAAAAAADbAAAAAABeQAAAAAAHQAAAAADIgAAAAADIgAAAAACHQAAAAABWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAADWQAAAAACeQAAAAAAbAAAAAABbAAAAAAAbAAAAAADbAAAAAAAcQAAAAACHQAAAAAAHQAAAAACHQAAAAACHQAAAAABeQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAeQAAAAAAbAAAAAACbAAAAAACbAAAAAABbAAAAAACeQAAAAAAIgAAAAABIgAAAAABIgAAAAACIgAAAAADeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAbAAAAAADbAAAAAACbAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAbAAAAAACbAAAAAADeQAAAAAAbAAAAAAAbAAAAAABLAAAAAAALAAAAAAAeQAAAAAAbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAbAAAAAABbAAAAAACbAAAAAACbAAAAAADbAAAAAABbAAAAAABbAAAAAADeQAAAAAAbAAAAAABbAAAAAADeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAADbAAAAAABbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAABbAAAAAACeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAACeQAAAAAAbAAAAAABbAAAAAABbAAAAAAAbAAAAAABbAAAAAADbAAAAAACbAAAAAADeQAAAAAAbAAAAAADbAAAAAABeQAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAABeQAAAAAAbAAAAAADbAAAAAABeQAAAAAAbAAAAAACbAAAAAABbAAAAAAAbAAAAAABeQAAAAAAbAAAAAACbAAAAAADdgAAAAABeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAbAAAAAACbAAAAAABbAAAAAAAbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAABbAAAAAAAdgAAAAABeQAAAAAAWQAAAAACWQAAAAACWQAAAAACeQAAAAAAbAAAAAACbAAAAAABbAAAAAADbAAAAAAAbAAAAAACbAAAAAABbAAAAAADeQAAAAAAbAAAAAAAbAAAAAACdgAAAAADeQAAAAAAWQAAAAABWQAAAAADWQAAAAADeQAAAAAAbAAAAAACbAAAAAACbAAAAAADbAAAAAADbAAAAAAAbAAAAAACbAAAAAABeQAAAAAAbAAAAAAAbAAAAAADdgAAAAADeQAAAAAAWQAAAAACWQAAAAADWQAAAAAAeQAAAAAAbAAAAAABbAAAAAABbAAAAAACbAAAAAAAbAAAAAACbAAAAAABbAAAAAACeQAAAAAAeQAAAAAAbAAAAAAAdgAAAAADZAAAAAACWQAAAAADWQAAAAAAWQAAAAADcQAAAAACbAAAAAADbAAAAAADbAAAAAADbAAAAAACbAAAAAADbAAAAAAAbAAAAAABeQAAAAAAbAAAAAAAbAAAAAABdgAAAAADZAAAAAADWQAAAAACWQAAAAACWQAAAAADcQAAAAADbAAAAAAAbAAAAAAAbAAAAAACbAAAAAADbAAAAAABbAAAAAABbAAAAAABeQAAAAAAbAAAAAACbAAAAAABdgAAAAADZAAAAAABWQAAAAAAWQAAAAABWQAAAAABcQAAAAABbAAAAAACbAAAAAACbAAAAAAAbAAAAAABbAAAAAABbAAAAAADbAAAAAABeQAAAAAAbAAAAAACbAAAAAAA + tiles: TQAAAAAAWQAAAAABAgAAAAAAWQAAAAADWQAAAAABWQAAAAABeQAAAAAAbAAAAAADbAAAAAACbAAAAAACbAAAAAADeQAAAAAAHQAAAAADIgAAAAADIgAAAAADHQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAAAeQAAAAAAbAAAAAADbAAAAAABBQAAAAAAbAAAAAACcQAAAAAAHQAAAAAAHQAAAAAAHQAAAAADHQAAAAABeQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAABWQAAAAACeQAAAAAAbAAAAAABbAAAAAAAbAAAAAABbAAAAAAAeQAAAAAAIgAAAAAAIgAAAAABIgAAAAADIgAAAAABeQAAAAAAeQAAAAAAWQAAAAABTQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAABbAAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAACeQAAAAAAbAAAAAAAbAAAAAACeQAAAAAAbAAAAAAAbAAAAAABLAAAAAAALAAAAAAAeQAAAAAAbAAAAAACbAAAAAABeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAACeQAAAAAAbAAAAAAAbAAAAAABbAAAAAACbAAAAAAAbAAAAAADbAAAAAADbAAAAAADeQAAAAAAbAAAAAADbAAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAACeQAAAAAAbAAAAAABbAAAAAADbAAAAAABbAAAAAABbAAAAAAAbAAAAAACbAAAAAADbAAAAAADbAAAAAACbAAAAAACeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAADeQAAAAAAbAAAAAABbAAAAAACbAAAAAADbAAAAAABbAAAAAACbAAAAAADbAAAAAACeQAAAAAAbAAAAAADbAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAbAAAAAADbAAAAAAAeQAAAAAAbAAAAAADbAAAAAADbAAAAAACbAAAAAACeQAAAAAAbAAAAAAAbAAAAAAAdgAAAAADeQAAAAAAWQAAAAADWQAAAAADAgAAAAAAeQAAAAAAbAAAAAADbAAAAAADbAAAAAACbAAAAAAAbAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAABbAAAAAABdgAAAAACeQAAAAAAWQAAAAACWQAAAAADWQAAAAABeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAACbAAAAAACbAAAAAADbAAAAAABbAAAAAACeQAAAAAAbAAAAAAAbAAAAAACdgAAAAABeQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAeQAAAAAAbAAAAAACbAAAAAAAbAAAAAABbAAAAAAAbAAAAAAAbAAAAAABbAAAAAABeQAAAAAAbAAAAAAAbAAAAAABdgAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABeQAAAAAAbAAAAAADbAAAAAAAbAAAAAABBQAAAAAAbAAAAAAAbAAAAAACbAAAAAACeQAAAAAAeQAAAAAAbAAAAAABdgAAAAACZAAAAAADWQAAAAAAWQAAAAADWQAAAAAAcQAAAAABbAAAAAADbAAAAAACbAAAAAADbAAAAAAAbAAAAAACbAAAAAABbAAAAAACeQAAAAAAbAAAAAACbAAAAAAAdgAAAAAAZAAAAAACAgAAAAAAWQAAAAABWQAAAAADcQAAAAAABQAAAAAAbAAAAAACbAAAAAACbAAAAAACbAAAAAADbAAAAAACbAAAAAADeQAAAAAAbAAAAAAAbAAAAAACdgAAAAAAZAAAAAAAWQAAAAAAWQAAAAACWQAAAAABcQAAAAAAbAAAAAADbAAAAAADbAAAAAADbAAAAAACbAAAAAACbAAAAAACBQAAAAAAeQAAAAAAbAAAAAADbAAAAAAA version: 6 0,0: ind: 0,0 - tiles: dgAAAAADeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADbAAAAAAAbAAAAAACbAAAAAABbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAACeQAAAAAAbAAAAAAAbAAAAAAAdgAAAAACeQAAAAAAWQAAAAADWQAAAAADWQAAAAACeQAAAAAAbAAAAAAAbAAAAAACbAAAAAADbAAAAAAAbAAAAAAAbAAAAAADbAAAAAADeQAAAAAAbAAAAAADbAAAAAADeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAABWQAAAAADWQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAABWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAIgAAAAABeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAABHQAAAAACeQAAAAAAWQAAAAABWQAAAAADWQAAAAABeQAAAAAAHQAAAAACHQAAAAACHQAAAAABHQAAAAABHQAAAAADeQAAAAAAWQAAAAABWQAAAAADWQAAAAAAWQAAAAACHQAAAAACeQAAAAAAWQAAAAACWQAAAAADWQAAAAADeQAAAAAAHQAAAAAAHQAAAAACHQAAAAADHQAAAAACHQAAAAABeQAAAAAAeQAAAAAAWQAAAAABZAAAAAAAWQAAAAADHQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAHQAAAAACHQAAAAACHQAAAAAAHQAAAAADHQAAAAADeQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAAAHQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAAAbAAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABeQAAAAAAHQAAAAACHQAAAAAAHQAAAAACHQAAAAAAHQAAAAADeQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACbAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAAAbAAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAADeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAA + tiles: dgAAAAABeQAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAADbAAAAAADbAAAAAADbAAAAAADbAAAAAADbAAAAAAAbAAAAAACbAAAAAABeQAAAAAAbAAAAAADbAAAAAADdgAAAAADeQAAAAAAWQAAAAACWQAAAAAAWQAAAAABeQAAAAAAbAAAAAABbAAAAAACbAAAAAABbAAAAAADbAAAAAAAbAAAAAACbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAABeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAADAgAAAAAAWQAAAAACWQAAAAABWQAAAAACWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAACAgAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAACWQAAAAADWQAAAAACWQAAAAADWQAAAAABWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAIgAAAAADeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAADHQAAAAADeQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAHQAAAAACHQAAAAAAHQAAAAACHQAAAAABHQAAAAABeQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAABHQAAAAADeQAAAAAAWQAAAAACWQAAAAAAAgAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAACHQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAWQAAAAACZAAAAAAAWQAAAAACHQAAAAADeQAAAAAAAgAAAAAAWQAAAAABWQAAAAACeQAAAAAAHQAAAAACHQAAAAADHQAAAAAAHQAAAAABHQAAAAADeQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAACPgAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAACeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACHQAAAAADHQAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAADWQAAAAAAPgAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAADeQAAAAAAHQAAAAADHQAAAAADHQAAAAACHQAAAAABHQAAAAADeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAABPgAAAAAAeQAAAAAAWQAAAAAAWQAAAAACAgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADPgAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADeQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAA version: 6 1,0: ind: 1,0 - tiles: bAAAAAACbAAAAAADbAAAAAABbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAAeQAAAAAAWQAAAAAAbAAAAAABbAAAAAABbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAARQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAACWQAAAAABWQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAADWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAABWQAAAAACWQAAAAACWQAAAAACeQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAABWQAAAAADHQAAAAACWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAADWQAAAAABeQAAAAAAWQAAAAABWQAAAAACeQAAAAAAWQAAAAABWQAAAAADWQAAAAACWQAAAAABWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAABeQAAAAAAWQAAAAABWQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAaAAAAAAAWQAAAAABeQAAAAAAWQAAAAABWQAAAAACWQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAAAdgAAAAACdgAAAAABeQAAAAAAaAAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAABWQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAWQAAAAABWQAAAAACdgAAAAAAdgAAAAABeQAAAAAAaAAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAACWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAWQAAAAABeQAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAABWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAA + tiles: bAAAAAADbAAAAAAAbAAAAAADbAAAAAACeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAAeQAAAAAAWQAAAAAAbAAAAAADbAAAAAABbAAAAAAAbAAAAAACeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAARQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAARQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAACAgAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAADWQAAAAABWQAAAAACWQAAAAABAgAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAACWQAAAAABWQAAAAADAgAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAADAgAAAAAAWQAAAAABHQAAAAADWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAACWQAAAAABeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADWQAAAAABeQAAAAAAWQAAAAADWQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAABdgAAAAACdgAAAAAAeQAAAAAAaAAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAADWQAAAAABWQAAAAACeQAAAAAAWQAAAAABWQAAAAABdgAAAAADdgAAAAAAeQAAAAAAaAAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAWQAAAAACeQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAADWQAAAAABWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 0,1: ind: 0,1 - tiles: eQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAABeQAAAAAAHQAAAAADHQAAAAACHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAHQAAAAADWQAAAAABWQAAAAABWQAAAAACWQAAAAABWQAAAAABdgAAAAABdgAAAAADdgAAAAADdgAAAAADdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABWQAAAAAAWQAAAAADeQAAAAAAdgAAAAADdgAAAAACdgAAAAADdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAdgAAAAAAdgAAAAACdgAAAAADdgAAAAADHQAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAABWQAAAAACWQAAAAAAdgAAAAACdgAAAAACdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAACdgAAAAACdgAAAAADeQAAAAAAeQAAAAAAAAAAAAAAHQAAAAAAHQAAAAACHQAAAAADHQAAAAADHQAAAAADeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAADdgAAAAAAdgAAAAACeQAAAAAAeQAAAAAAAAAAAAAAHQAAAAADHQAAAAABHQAAAAACHQAAAAAAHQAAAAACPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAACdgAAAAADeQAAAAAAdgAAAAADeQAAAAAAeQAAAAAAAAAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAADeQAAAAAAbAAAAAAAbAAAAAACeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAABeQAAAAAAeQAAAAAAAAAAAAAAHQAAAAACHQAAAAACHQAAAAABHQAAAAABHQAAAAABHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAHQAAAAADeQAAAAAAHQAAAAACHQAAAAACHQAAAAABeQAAAAAAHQAAAAABHQAAAAACHQAAAAAAHQAAAAADeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACHQAAAAACHQAAAAADHQAAAAADHQAAAAACHQAAAAACHQAAAAACHQAAAAACHQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAADHQAAAAADHQAAAAADHQAAAAADHQAAAAACHQAAAAACHQAAAAACHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAWQAAAAACAgAAAAAAWQAAAAADWQAAAAABWQAAAAACeQAAAAAAHQAAAAABHQAAAAABHQAAAAADHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAHQAAAAACWQAAAAABWQAAAAABWQAAAAABWQAAAAABWQAAAAAAdgAAAAABdgAAAAADdgAAAAAAdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAAAAgAAAAAAWQAAAAAAeQAAAAAAdgAAAAACdgAAAAACdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAADHQAAAAADeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAACWQAAAAADWQAAAAAAWQAAAAADdgAAAAABdgAAAAACdgAAAAADdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAABAgAAAAAAWQAAAAABWQAAAAABWQAAAAACeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAHQAAAAABHQAAAAAAHQAAAAACeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAACdgAAAAABdgAAAAABeQAAAAAAeQAAAAAAeAAAAAAAHQAAAAACHQAAAAACHQAAAAADHQAAAAAAHQAAAAABeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAACeQAAAAAAeQAAAAAAeAAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAACHQAAAAABPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAdgAAAAABeQAAAAAAeQAAAAAAAAAAAAAAHQAAAAAAeQAAAAAAHQAAAAABHQAAAAADHQAAAAADeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAAAeQAAAAAAbAAAAAABbAAAAAADeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAADbAAAAAAAeQAAAAAAAAAAAAAAHQAAAAADAQAAAAADAQAAAAACAQAAAAADAQAAAAACHQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAHQAAAAADAQAAAAADAQAAAAAAAQAAAAABAQAAAAADeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACAQAAAAABAQAAAAABAQAAAAADAQAAAAADHQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAABHQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -2,0: ind: -2,0 - tiles: eQAAAAAAdgAAAAAAdgAAAAACdgAAAAAAdgAAAAABdgAAAAACWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAOgAAAAAAYwAAAAADYwAAAAAAYwAAAAABOgAAAAAAeQAAAAAAdgAAAAADdgAAAAACdgAAAAACdgAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAAAWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAAAWQAAAAADWQAAAAABWQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAACWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAADWQAAAAABWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAAAWQAAAAADWQAAAAAAWwAAAAACWwAAAAACeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAWQAAAAAAWQAAAAACWwAAAAACWwAAAAADeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWwAAAAAAWwAAAAACeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAdgAAAAADdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAKAAAAAAAYAAAAAAABgAAAAAAYAAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAYAAAAAAAKAAAAAAAYAAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAgAAAAAAWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAABWQAAAAADWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAACWQAAAAABAgAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAACWQAAAAACWQAAAAACAgAAAAADWQAAAAADTQAAAAAAWQAAAAAAAgAAAAAAWQAAAAACWQAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAACAgAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACAgAAAAAAWQAAAAABeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAAAWwAAAAADWwAAAAADeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAACeQAAAAAAAgAAAAAAWQAAAAACWwAAAAABWwAAAAACeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAABAgAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAABWwAAAAADWwAAAAABeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAADWQAAAAADeQAAAAAAWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAJgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAA version: 6 1,-1: ind: 1,-1 - tiles: eQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAcQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAADbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAABbAAAAAABbAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAbAAAAAADbAAAAAACbAAAAAADbAAAAAACcQAAAAABdgAAAAACdgAAAAADdgAAAAACdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAACbAAAAAACbAAAAAAAbAAAAAACeQAAAAAAdgAAAAABdgAAAAABdgAAAAACdgAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAbAAAAAAAbAAAAAACbAAAAAACbAAAAAABeQAAAAAAdgAAAAACdgAAAAAAdgAAAAAAdgAAAAACdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAbAAAAAADbAAAAAABbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAADbAAAAAADbAAAAAACbAAAAAACeQAAAAAAbAAAAAADbAAAAAAAbAAAAAACbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAACbAAAAAADbAAAAAABbAAAAAACcQAAAAACbAAAAAABbAAAAAABbAAAAAAAbAAAAAADeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAbAAAAAAAbAAAAAADbAAAAAABbAAAAAABeQAAAAAAbAAAAAAAbAAAAAADbAAAAAAAbAAAAAACeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAAAbAAAAAACbAAAAAADbAAAAAABeQAAAAAAbAAAAAABbAAAAAAAbAAAAAADbAAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAbAAAAAADbAAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAACbAAAAAAAbAAAAAACbAAAAAADbAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAABbAAAAAADbAAAAAACbAAAAAACbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAbAAAAAAAbAAAAAADbAAAAAADbAAAAAADeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAD + tiles: eQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAcQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAADbAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAbAAAAAADbAAAAAADbAAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAbAAAAAADBQAAAAAAbAAAAAACcQAAAAADdgAAAAACdgAAAAAAdgAAAAADdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAADbAAAAAACbAAAAAABbAAAAAAAeQAAAAAAdgAAAAABdgAAAAABdgAAAAABdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAbAAAAAAAbAAAAAACbAAAAAAAbAAAAAADeQAAAAAAdgAAAAABdgAAAAAAdgAAAAAAdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAbAAAAAABbAAAAAADbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAABBQAAAAAAbAAAAAABbAAAAAAAeQAAAAAAbAAAAAAAbAAAAAACbAAAAAACbAAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAABbAAAAAABbAAAAAADbAAAAAACcQAAAAACbAAAAAABbAAAAAAAbAAAAAABbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAbAAAAAABbAAAAAADbAAAAAADbAAAAAACeQAAAAAAbAAAAAACbAAAAAADbAAAAAAAbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAbAAAAAADbAAAAAADbAAAAAAAbAAAAAACeQAAAAAAbAAAAAACbAAAAAABbAAAAAACbAAAAAACeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAABbAAAAAACbAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADAgAAAAAAWQAAAAADbAAAAAABbAAAAAACbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAADbAAAAAADbAAAAAACbAAAAAABbAAAAAABeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAADbAAAAAABbAAAAAAAbAAAAAABbAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAB version: 6 0,-2: ind: 0,-2 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAdgAAAAACdgAAAAABdgAAAAADdgAAAAAAdgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAABdgAAAAADdgAAAAAAdgAAAAADeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACaAAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAABdgAAAAAAdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADIgAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAABdgAAAAADdgAAAAABdgAAAAADdgAAAAAAdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAACdgAAAAABdgAAAAACdgAAAAABdgAAAAACdgAAAAABdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAQAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAdgAAAAACdgAAAAAAdgAAAAABdgAAAAADdgAAAAACdgAAAAADdgAAAAADeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAdgAAAAACdgAAAAACdgAAAAADdgAAAAABdgAAAAABdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAADWQAAAAABWQAAAAAAWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAACdgAAAAACdgAAAAACdgAAAAABeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAADWQAAAAABWQAAAAAAWQAAAAABWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAACWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAACeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAbAAAAAABbAAAAAAAbAAAAAADbAAAAAACeQAAAAAAIgAAAAABIgAAAAAAIgAAAAACIgAAAAADWQAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAbAAAAAAAbAAAAAABbAAAAAACbAAAAAACeQAAAAAAHQAAAAADHQAAAAADHQAAAAADHQAAAAAD + tiles: eQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAAAdgAAAAABdgAAAAACeQAAAAAAdgAAAAABdgAAAAABdgAAAAAAdgAAAAADdgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAADdgAAAAACdgAAAAADdgAAAAACdgAAAAABeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADaAAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAABdgAAAAACdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADIgAAAAACdgAAAAABdgAAAAABdgAAAAACdgAAAAABdgAAAAAAdgAAAAACdgAAAAABdgAAAAAAdgAAAAABdgAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABdgAAAAADdgAAAAADdgAAAAACdgAAAAAAdgAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAABdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAdgAAAAABdgAAAAADdgAAAAACdgAAAAADdgAAAAADdgAAAAADdgAAAAADdgAAAAADdgAAAAABdgAAAAADdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAQAAAAAAAeQAAAAAAdgAAAAABdgAAAAACdgAAAAAAeQAAAAAAdgAAAAABdgAAAAACdgAAAAADdgAAAAACdgAAAAABdgAAAAAAdgAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADeQAAAAAAdgAAAAACdgAAAAACdgAAAAAAdgAAAAACdgAAAAADdgAAAAADdgAAAAADeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAACWQAAAAADWQAAAAAAWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAdgAAAAADdgAAAAACdgAAAAABdgAAAAAAdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAABAgAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAAAWQAAAAADWQAAAAAAAgAAAAAAWQAAAAAAAgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAZAAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADAgAAAAAAWQAAAAACWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAAAWQAAAAADeQAAAAAAbAAAAAADbAAAAAACbAAAAAABbAAAAAADeQAAAAAAIgAAAAACIgAAAAACIgAAAAAAIgAAAAABWQAAAAADWQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAACeQAAAAAAHQAAAAABHQAAAAACHQAAAAABHQAAAAAC version: 6 1,-2: ind: 1,-2 - tiles: eQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACYAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAcQAAAAAAcQAAAAABcQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAABWQAAAAABYAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAcQAAAAACcQAAAAABcQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 -1,1: ind: -1,1 - tiles: eQAAAAAALAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAeQAAAAAAWQAAAAADLQAAAAAAWQAAAAAALQAAAAAAWQAAAAABeQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAHQAAAAAAHQAAAAACHQAAAAAAHQAAAAACeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAACHQAAAAADeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAIgAAAAACdgAAAAADdgAAAAAAdgAAAAABeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAACeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAADdgAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAHQAAAAADHQAAAAACHQAAAAACeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAACHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAAB + tiles: eQAAAAAAJgAAAAABJgAAAAABJgAAAAABeQAAAAAAeQAAAAAAWQAAAAACAgAAAAAAAgAAAAAAAgAAAAAAWQAAAAAAeQAAAAAAHQAAAAABHQAAAAADHQAAAAADHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABeQAAAAAAHQAAAAADHQAAAAAAHQAAAAAAHQAAAAADeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAACHQAAAAAAHQAAAAADeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAIgAAAAAAdgAAAAADdgAAAAACdgAAAAACeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAACeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAABdgAAAAACeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAHQAAAAACHQAAAAADHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAATQAAAAAAHQAAAAAAHQAAAAACHQAAAAADeQAAAAAAHQAAAAACHQAAAAABHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAATQAAAAAAHQAAAAAAHQAAAAACHQAAAAACHQAAAAABHQAAAAADHQAAAAACHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAATQAAAAAAHQAAAAABHQAAAAACHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAHQAAAAABHQAAAAADHQAAAAADHQAAAAADeQAAAAAAHQAAAAACeQAAAAAAHQAAAAAA version: 6 -2,1: ind: -2,1 - tiles: dgAAAAACeQAAAAAAKQAAAAAAKQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADeQAAAAAAKQAAAAAAKQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAALgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: dgAAAAAAeQAAAAAAKQAAAAAAKQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAABeQAAAAAAKQAAAAAAKQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAALgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,2: ind: -1,2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAACHQAAAAACeQAAAAAAeAAAAAAAeAAAAAAATQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAABHQAAAAACHQAAAAADHQAAAAADHQAAAAABTQAAAAAAeAAAAAAAeAAAAAAATQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAHQAAAAADHQAAAAAAHQAAAAACHQAAAAADTQAAAAAAeAAAAAAAeAAAAAAATQAAAAAAHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAABHQAAAAADHQAAAAABHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 1,1: ind: 1,1 - tiles: aAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAABZAAAAAAAWQAAAAABWQAAAAABWQAAAAABZAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAACWQAAAAADWQAAAAAAZAAAAAAAWQAAAAACWQAAAAADWQAAAAADZAAAAAACeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAZAAAAAADaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAADeQAAAAAAZAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAACeQAAAAAAZAAAAAACaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAADeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: aAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAAAZAAAAAACWQAAAAABWQAAAAAAWQAAAAADZAAAAAADeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAAAWQAAAAACWQAAAAADWQAAAAAAWQAAAAACZAAAAAADWQAAAAACWQAAAAABWQAAAAAAZAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAADeQAAAAAAZAAAAAABaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAADeQAAAAAAZAAAAAACaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAABeQAAAAAAZAAAAAACaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,2: ind: 0,2 - tiles: HQAAAAADHQAAAAABHQAAAAACHQAAAAADHQAAAAAAHQAAAAABHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HQAAAAADHQAAAAADHQAAAAABHQAAAAADHQAAAAADeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACHQAAAAABHQAAAAABHQAAAAABTQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACHQAAAAABHQAAAAACHQAAAAACTQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAACHQAAAAAAHQAAAAACHQAAAAADTQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATQAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,0: ind: 2,0 - tiles: WQAAAAABWQAAAAABWQAAAAAAWQAAAAADeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAADHQAAAAABHQAAAAADHQAAAAACWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAAATAAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAATAAAAAAATAAAAAAATAAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAABWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAADTAAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAACWQAAAAADeQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAACWQAAAAAAWQAAAAADeQAAAAAAHQAAAAADHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: WQAAAAAAWQAAAAADWQAAAAACWQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAAAHQAAAAAAHQAAAAACHQAAAAACAgAAAAAAWQAAAAACWQAAAAAAWQAAAAABeQAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAADWQAAAAABWQAAAAAAWQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAACWQAAAAADTAAAAAADWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAADAgAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAACAgAAAAAAWQAAAAABWQAAAAACTAAAAAAATAAAAAACTAAAAAACWQAAAAABeQAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAAAWQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAABWQAAAAAAWQAAAAABTAAAAAADWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAAAAgAAAAAAWQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAADWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAeQAAAAAAWQAAAAADAgAAAAAAWQAAAAABHQAAAAACHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAAWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAHQAAAAACHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 3,0: ind: 3,0 - tiles: HQAAAAADWQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAAAeQAAAAAAWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADWQAAAAACHQAAAAADHQAAAAADHQAAAAACHQAAAAABeQAAAAAAWQAAAAADaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAAAWQAAAAACWQAAAAADWQAAAAAAWQAAAAABaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAACHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAWQAAAAADaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAADeQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAA + tiles: HQAAAAABWQAAAAADHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAAgAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAABeQAAAAAAWQAAAAACaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAABWQAAAAAAWQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAACHQAAAAAAHQAAAAADHQAAAAABeQAAAAAAWQAAAAADaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAACHQAAAAABeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAA version: 6 2,-1: ind: 2,-1 - tiles: AAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAACdgAAAAACEwAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEwAAAAAGdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAEwAAAAAEeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAEwAAAAAAeQAAAAAAEwAAAAAEdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAWQAAAAABeQAAAAAAdgAAAAADdgAAAAACdgAAAAADdgAAAAAAdgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAADeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAACdgAAAAAAdgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAA + tiles: AAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAACEwAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAEwAAAAACdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABeQAAAAAAeQAAAAAAdgAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABEwAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAEwAAAAAEeQAAAAAAEwAAAAADdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAADWQAAAAACAgAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAADeQAAAAAAdgAAAAABdgAAAAABdgAAAAACdgAAAAACdgAAAAADeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABeQAAAAAAdgAAAAAAdgAAAAABdgAAAAADdgAAAAACdgAAAAABeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAA version: 6 -1,-2: ind: -1,-2 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAADHQAAAAADHQAAAAADHQAAAAAAHQAAAAAAHQAAAAACHQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAABHQAAAAABHQAAAAABHQAAAAABHQAAAAABHQAAAAABQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAATQAAAAAATQAAAAAAIgAAAAABHQAAAAACHQAAAAABHQAAAAADLQAAAAAALQAAAAAAHQAAAAACQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAAALQAAAAAALQAAAAAAHQAAAAAAHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAACHQAAAAAAHQAAAAABHQAAAAADHQAAAAAAeQAAAAAAHQAAAAADHQAAAAADLQAAAAAALQAAAAAAHQAAAAADHQAAAAACHQAAAAABIgAAAAACHQAAAAADHQAAAAAAHQAAAAACHQAAAAABHQAAAAAAHQAAAAADHQAAAAAAeQAAAAAAHQAAAAAAHQAAAAACHQAAAAAAHQAAAAABHQAAAAABHQAAAAACHQAAAAABeQAAAAAAHQAAAAADHQAAAAADHQAAAAACHQAAAAACHQAAAAAAHQAAAAADHQAAAAADIgAAAAABHQAAAAABHQAAAAABHQAAAAAAHQAAAAABHQAAAAABHQAAAAAAHQAAAAABeQAAAAAAHQAAAAADHQAAAAABHQAAAAAAHQAAAAAAIgAAAAACHQAAAAADHQAAAAADeQAAAAAAHQAAAAABHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAQAAAAAAAQAAAAAAAIQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAACeQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAdgAAAAABdgAAAAAAdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAIQAAAAACIQAAAAADIQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAADWQAAAAACeQAAAAAAdgAAAAACdgAAAAADdgAAAAAAeQAAAAAAEQAAAAAAeQAAAAAAIQAAAAACIQAAAAABIQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAADWQAAAAACZAAAAAAAIQAAAAACIQAAAAACIQAAAAABeQAAAAAAEQAAAAAAeQAAAAAAIQAAAAACIQAAAAABeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAADWQAAAAADeQAAAAAAIQAAAAAAIQAAAAAAIQAAAAACEQAAAAAAEQAAAAAAeQAAAAAAIQAAAAAAIQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAADWQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAIQAAAAAAIQAAAAADIQAAAAABEQAAAAAAEQAAAAAAeQAAAAAAIQAAAAAAIQAAAAAAZAAAAAABWQAAAAABWQAAAAACWQAAAAACWQAAAAACWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAADZAAAAAABWQAAAAABWQAAAAAAZAAAAAAAZAAAAAAAWQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAABWQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAADWQAAAAAAWQAAAAAC + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAACHQAAAAADHQAAAAADeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAATQAAAAAATQAAAAAATQAAAAAAHQAAAAABHQAAAAADHQAAAAABHQAAAAACHQAAAAACHQAAAAADQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAATQAAAAAATQAAAAAAIgAAAAACHQAAAAABHQAAAAAAHQAAAAACLQAAAAACLQAAAAADHQAAAAACQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAADLQAAAAAALQAAAAAAHQAAAAACHQAAAAACHQAAAAABeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAABHQAAAAACHQAAAAAAHQAAAAABeQAAAAAAHQAAAAABHQAAAAAALQAAAAABLQAAAAABHQAAAAADHQAAAAADHQAAAAACIgAAAAACHQAAAAAAHQAAAAABHQAAAAABHQAAAAADHQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAHQAAAAADHQAAAAADHQAAAAADHQAAAAABHQAAAAADHQAAAAABHQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAAAIgAAAAACHQAAAAACHQAAAAAAHQAAAAACHQAAAAACHQAAAAADHQAAAAABHQAAAAABeQAAAAAAHQAAAAAAHQAAAAACHQAAAAABHQAAAAACIgAAAAACHQAAAAADHQAAAAAAeQAAAAAAHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAQAAAAAAAQAAAAAAAIQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAADeQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAdgAAAAADdgAAAAADdgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAIQAAAAACIQAAAAADIQAAAAABeQAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAACWQAAAAACeQAAAAAAdgAAAAABdgAAAAABdgAAAAABeQAAAAAAEQAAAAAAeQAAAAAAIQAAAAACIQAAAAABIQAAAAACeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAADZAAAAAADIQAAAAADIQAAAAADIQAAAAABeQAAAAAAEQAAAAAAeQAAAAAAIQAAAAACIQAAAAACeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAACWQAAAAADWQAAAAAAeQAAAAAAIQAAAAABIQAAAAAAIQAAAAADEQAAAAAAEQAAAAAAeQAAAAAAIQAAAAADIQAAAAACWQAAAAABWQAAAAACWQAAAAACWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAIQAAAAAAIQAAAAABIQAAAAADEQAAAAAAEQAAAAAAeQAAAAAAIQAAAAACIQAAAAABZAAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAACZAAAAAAAWQAAAAADAgAAAAAAZAAAAAACZAAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAABWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAACWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAD version: 6 -2,-2: ind: -2,-2 - tiles: HQAAAAABHQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAaQAAAAAAHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAHQAAAAACHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAHQAAAAABHQAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAIQAAAAACIQAAAAACdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAHQAAAAAAIQAAAAAAIQAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAHQAAAAAAIQAAAAADIQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAIQAAAAABIQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAIQAAAAAAIQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAIQAAAAAAIQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAABWQAAAAABWQAAAAAC + tiles: HQAAAAAAHQAAAAADeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAATQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAdgAAAAABdgAAAAACdgAAAAADdgAAAAACdgAAAAABdgAAAAAAdgAAAAABRQAAAAAAHQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAABdgAAAAAAdgAAAAAAdgAAAAADeQAAAAAAdgAAAAACdgAAAAADeQAAAAAAHQAAAAACHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAABdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAABdgAAAAADeQAAAAAAHQAAAAAAHQAAAAADdgAAAAAAdgAAAAABdgAAAAABdgAAAAACeQAAAAAAdgAAAAABdgAAAAAAdgAAAAADdgAAAAACdgAAAAACdgAAAAACdgAAAAABdgAAAAACeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAABdgAAAAADdgAAAAACeQAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAAAdgAAAAADdgAAAAABdgAAAAADdgAAAAAAeQAAAAAAIQAAAAACIQAAAAADdgAAAAADdgAAAAADdgAAAAAAdgAAAAABdgAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAACdgAAAAACdgAAAAABdgAAAAABdgAAAAACHQAAAAAAIQAAAAADIQAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAACdgAAAAABdgAAAAADdgAAAAABdgAAAAABdgAAAAACdgAAAAABdgAAAAABdgAAAAADdgAAAAACHQAAAAADIQAAAAABIQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAACdgAAAAADdgAAAAACdgAAAAADdgAAAAABdgAAAAACeQAAAAAAIQAAAAADIQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAACdgAAAAABdgAAAAACdgAAAAACdgAAAAAAdgAAAAADdgAAAAACdgAAAAABeQAAAAAAIQAAAAAAIQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAADdgAAAAADdgAAAAABdgAAAAABdgAAAAAAdgAAAAABdgAAAAADeQAAAAAAeQAAAAAAIQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAABWQAAAAABWQAAAAABAgAAAAAAWQAAAAAB version: 6 -2,-1: ind: -2,-1 - tiles: aAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAAAWQAAAAADaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAABWQAAAAAAWQAAAAABWQAAAAACWQAAAAADaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAABIgAAAAACHQAAAAAAHQAAAAACHQAAAAAAHQAAAAAAIgAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAABeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACHQAAAAACeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAHQAAAAABHQAAAAACHQAAAAADeQAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAAAWQAAAAADGQAAAAAAGQAAAAAAGQAAAAAAQQAAAAAAeQAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAAAWQAAAAADWQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAQQAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAABWQAAAAAAWQAAAAAAeQAAAAAAGQAAAAAAGQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAABdgAAAAABdgAAAAACdgAAAAABWQAAAAADWQAAAAAAWQAAAAABWQAAAAABWQAAAAACdgAAAAABdgAAAAADdgAAAAACeQAAAAAAaAAAAAAAeQAAAAAAdgAAAAAAdgAAAAABdgAAAAABdgAAAAADeQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAAAdgAAAAABdgAAAAACdgAAAAACeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAADdgAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAAAeQAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAdgAAAAACdgAAAAACdgAAAAAAdgAAAAADeQAAAAAAWQAAAAABWQAAAAACWQAAAAACWQAAAAABeQAAAAAAOgAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAADeQAAAAAAOgAAAAAAYwAAAAADYwAAAAABYwAAAAACOgAAAAAA + tiles: aAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAADWQAAAAACWQAAAAABWQAAAAABWQAAAAABWQAAAAADWQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAACAgAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAADWQAAAAACaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAWQAAAAACeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABAgAAAAAAWQAAAAADWQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAgAAAAAAWQAAAAABWQAAAAACWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADTQAAAAAAWQAAAAACeQAAAAAAWQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAATQAAAAAAWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAATQAAAAAAWQAAAAABWQAAAAABWQAAAAACWQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAPQAAAAAAPQAAAAAAWQAAAAAAWQAAAAACWQAAAAAAWQAAAAABWQAAAAABeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAdgAAAAADdgAAAAABeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAYAAAAAAAKAAAAAAAYAAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAdgAAAAADdgAAAAADeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAABgAAAAAAKAAAAAAAYAAAAAAAYAAAAAAAOgAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAdgAAAAAAdgAAAAACeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAKAAAAAAABgAAAAAAKAAAAAAAYAAAAAAAOgAAAAAAOgAAAAAAOgAAAAAA version: 6 -3,0: ind: -3,0 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAABWQAAAAACWQAAAAADWQAAAAACWQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAABWQAAAAADWQAAAAAAWQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAAAWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAAAWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAACWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAEwAAAAAAEwAAAAAAEwAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAEwAAAAAAdgAAAAAAdgAAAAAAEwAAAAAAEwAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAEwAAAAAAEwAAAAAAEwAAAAAAdgAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAEwAAAAAAdgAAAAAAEwAAAAAAdgAAAAAAEwAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAACWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAACWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABAgAAAAAAWQAAAAADWQAAAAADWQAAAAACWQAAAAACeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAACWQAAAAAAWQAAAAABWQAAAAADWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAABWQAAAAABWQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAABWQAAAAACWQAAAAAAWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAgAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAAAAgAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAABWQAAAAAAWQAAAAACWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAdgAAAAABEwAAAAABEwAAAAACEwAAAAAEdgAAAAABeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAEwAAAAADdgAAAAAAdgAAAAAAEwAAAAACEwAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAACdgAAAAABEwAAAAAAEwAAAAAAEwAAAAABdgAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAEwAAAAABdgAAAAACEwAAAAADdgAAAAAAEwAAAAAEeQAAAAAAeQAAAAAA version: 6 -3,-1: ind: -3,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAAAWQAAAAACWQAAAAACWQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAAAWQAAAAABWQAAAAABWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAALQAAAAAALQAAAAAAWQAAAAADWQAAAAAAWQAAAAACLQAAAAAALQAAAAAALQAAAAAAWQAAAAAAWQAAAAACLQAAAAAALQAAAAAALQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAAAWQAAAAABWQAAAAADWQAAAAADWQAAAAACWQAAAAACWQAAAAADWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAABZAAAAAADZAAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAABWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAABWQAAAAABWQAAAAADWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAACWQAAAAADWQAAAAAAWQAAAAAAWQAAAAACWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAALQAAAAADLQAAAAAAWQAAAAADWQAAAAADWQAAAAAALQAAAAACLQAAAAACLQAAAAACWQAAAAADAgAAAAAALQAAAAAALQAAAAACLQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAAAAgAAAAAAWQAAAAADWQAAAAACWQAAAAABWQAAAAACWQAAAAABWQAAAAABWQAAAAACWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAABZAAAAAAAZAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAAAAgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAABWQAAAAACWQAAAAAAWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAALAAAAAAALAAAAAAALAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAWQAAAAABWQAAAAABAgAAAAAAWQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAABWQAAAAAAWQAAAAADWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAA version: 6 3,-1: ind: 3,-1 - tiles: eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAACeQAAAAAAJgAAAAAAJgAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAADeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAHQAAAAADHQAAAAACeQAAAAAAJgAAAAACJgAAAAACeQAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAJgAAAAACJgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAJgAAAAADeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAZAAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAWQAAAAACWQAAAAACWQAAAAABWQAAAAACWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAACWQAAAAABWQAAAAACWQAAAAABWQAAAAACWQAAAAADZAAAAAACWQAAAAAAWQAAAAADWQAAAAADWQAAAAABWQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAADWQAAAAAAWQAAAAADWQAAAAAAWQAAAAADeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAWQAAAAABWQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADWQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAHQAAAAADHQAAAAAAeQAAAAAAJgAAAAADJgAAAAACaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAABeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAHQAAAAABHQAAAAABeQAAAAAAJgAAAAABJgAAAAABeQAAAAAAQAAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJgAAAAADeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAHQAAAAAAHQAAAAABeQAAAAAAJgAAAAABJgAAAAADeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAJgAAAAACeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAZAAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAWQAAAAAAWQAAAAACWQAAAAACWQAAAAADWQAAAAADWQAAAAACWQAAAAABeQAAAAAAWQAAAAABWQAAAAABWQAAAAABWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAADWQAAAAACWQAAAAABWQAAAAABWQAAAAACWQAAAAABZAAAAAACWQAAAAACWQAAAAAAWQAAAAAAWQAAAAADWQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAABWQAAAAADWQAAAAABWQAAAAABWQAAAAABWQAAAAABeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAWQAAAAACWQAAAAACWQAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAWQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 2,-2: ind: 2,-2 - tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAABeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAHQAAAAACLQAAAAAALQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAABLQAAAAAALwAAAAAALQAAAAAALQAAAAAALQAAAAAAHQAAAAABHQAAAAABHQAAAAADHQAAAAABWQAAAAADHQAAAAADHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAADLQAAAAAALwAAAAAALwAAAAAALQAAAAAALQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAABHQAAAAACHQAAAAADHQAAAAADHQAAAAABHQAAAAABeQAAAAAAHQAAAAABLQAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAACHQAAAAADHQAAAAABHQAAAAACHQAAAAADHQAAAAACeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAACHQAAAAABLQAAAAAALwAAAAAALwAAAAAAHQAAAAADHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAAALQAAAAAALwAAAAAAHQAAAAADHQAAAAADeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADLQAAAAAALQAAAAAAHQAAAAADHQAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAABHQAAAAADHQAAAAAAHQAAAAABHQAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAACHQAAAAABHQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAHQAAAAACJgAAAAAALQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABLQAAAAABHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALQAAAAADHQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALQAAAAACJgAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAALQAAAAABHQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACLQAAAAACHQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADJgAAAAAALQAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAADHQAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAA version: 6 5,-1: ind: 5,-1 @@ -163,15 +169,15 @@ entities: version: 6 3,-2: ind: 3,-2 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAABHQAAAAACeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAACHQAAAAABHQAAAAABeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAAAALQAAAAAALQAAAAAAHQAAAAADHQAAAAADHQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAALQAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAABHQAAAAADeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAABHQAAAAABeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAABHQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAALwAAAAAALwAAAAAALQAAAAAALQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAAAALQAAAAAALQAAAAAAHQAAAAADHQAAAAACHQAAAAADeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAACHQAAAAADHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAAAHQAAAAADeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAHQAAAAAAJgAAAAAAHQAAAAACeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAAADLQAAAAADLQAAAAACHQAAAAADHQAAAAAAHQAAAAABeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAJgAAAAAAHQAAAAAALQAAAAADJgAAAAAAHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAHQAAAAAAJgAAAAAAHQAAAAAALQAAAAAAHQAAAAABHQAAAAACeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAALQAAAAABJgAAAAAAHQAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAHQAAAAAAEQAAAAAAHQAAAAAAJgAAAAAALQAAAAABHQAAAAACHQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAALQAAAAACJgAAAAAAHQAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAHQAAAAAAJgAAAAAAHQAAAAAALQAAAAADHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAJgAAAAAAHQAAAAAALQAAAAABJgAAAAAAHQAAAAABeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAAAACLQAAAAACLQAAAAABHQAAAAAAHQAAAAADHQAAAAABeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAA version: 6 -3,1: ind: -3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAEwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADeQAAAAAAdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAdgAAAAADEwAAAAAAdgAAAAAAdgAAAAADdgAAAAAAdgAAAAAAdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAAAdgAAAAACdgAAAAACdgAAAAADdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAEwAAAAAAdgAAAAAAEwAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAEwAAAAADeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAeQAAAAAAdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAdgAAAAACEwAAAAACdgAAAAAAdgAAAAACdgAAAAADdgAAAAACdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAABdgAAAAACdgAAAAABdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAABEwAAAAACdgAAAAABEwAAAAACeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAA version: 6 0,-3: ind: 0,-3 - tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACKAAAAAADeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAADOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAACHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAAAHQAAAAABHQAAAAABHQAAAAABHQAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJAAAAAAAJAAAAAADJAAAAAAAJAAAAAACeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJAAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADKAAAAAACeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAADOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAABHQAAAAADHQAAAAACHQAAAAADeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAAAHQAAAAABHQAAAAAAHQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJAAAAAABJAAAAAABJAAAAAACJAAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAJAAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAACdgAAAAAAdgAAAAACdgAAAAABdgAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAAAdgAAAAADdgAAAAADdgAAAAACeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAdgAAAAABdgAAAAABdgAAAAACdgAAAAAAdgAAAAABeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 1,-3: ind: 1,-3 @@ -179,19 +185,19 @@ entities: version: 6 2,1: ind: 2,1 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAATgAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,1: ind: 3,1 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: eQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-3: ind: -1,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAKAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAWQAAAAACeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAWQAAAAACeQAAAAAAWQAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAAAOgAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAACdgAAAAADdgAAAAAAdgAAAAAAdgAAAAADeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAADdgAAAAACdgAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADdgAAAAACdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAABHQAAAAACHQAAAAABHQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAOgAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAWQAAAAAAeQAAAAAAWQAAAAABOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAWQAAAAADOgAAAAAAOgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAAAdgAAAAADdgAAAAABeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAdgAAAAADdgAAAAABdgAAAAAAdgAAAAACeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAACdgAAAAADdgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAACHQAAAAAAHQAAAAACHQAAAAADeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 4,-1: ind: 4,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA version: 6 4,0: ind: 4,0 @@ -199,23 +205,23 @@ entities: version: 6 3,-3: ind: 3,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,-3: ind: 2,-3 - tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAA + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAA version: 6 -3,-2: ind: -3,-2 - tiles: AAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAHQAAAAADAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAACAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAACdgAAAAABdgAAAAACdgAAAAABdgAAAAABeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAABdgAAAAACdgAAAAACdgAAAAACAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAACdgAAAAABdgAAAAABdgAAAAADAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAdgAAAAABdgAAAAABAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: AAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAACAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAACHQAAAAABHQAAAAADHQAAAAAAHQAAAAADeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAADHQAAAAABHQAAAAABHQAAAAABHQAAAAADAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAABHQAAAAACHQAAAAACHQAAAAADHQAAAAACAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAHQAAAAABHQAAAAADHQAAAAACHQAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAADHQAAAAACHQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAABHQAAAAABHQAAAAABeQAAAAAAdgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAHQAAAAADHQAAAAAAeQAAAAAAdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 -3,-3: ind: -3,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAHQAAAAADHQAAAAAC + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAACHQAAAAAA version: 6 -2,-3: ind: -2,-3 - tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAA + tiles: eAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAADeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAdgAAAAADeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAeQAAAAAAeAAAAAAA version: 6 -4,0: ind: -4,0 @@ -223,19 +229,19 @@ entities: version: 6 -4,-1: ind: -4,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAWQAAAAADWQAAAAAAWQAAAAADWQAAAAAAWQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAACWQAAAAAALQAAAAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAACWQAAAAABWQAAAAAAWQAAAAAAWQAAAAABWQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAADWQAAAAABWQAAAAACWQAAAAABWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAADWQAAAAACLQAAAAACLQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAWQAAAAADWQAAAAADWQAAAAAAWQAAAAACWQAAAAAAWQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAA version: 6 -3,2: ind: -3,2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAABTAAAAAADTAAAAAAATAAAAAAAeAAAAAAATAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAABTAAAAAACTAAAAAAATAAAAAABeAAAAAAATAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAABTAAAAAABTAAAAAACTAAAAAAAeAAAAAAATAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAACTAAAAAADTAAAAAADTAAAAAADeAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAADTAAAAAAATAAAAAABTAAAAAAAeAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAATAAAAAADTAAAAAAATAAAAAAATAAAAAABeAAAAAAATAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -2,2: ind: -2,2 - tiles: eQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: TAAAAAADTAAAAAADTAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAABTAAAAAADTAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAACTAAAAAADTAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAACTAAAAAACTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAADTAAAAAADTAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAADTAAAAAABTAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -4,-2: ind: -4,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -4,-3: ind: -4,-3 @@ -243,11 +249,11 @@ entities: version: 6 -3,-4: ind: -3,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAA version: 6 -2,-4: ind: -2,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -1528,1172 +1534,995 @@ entities: color: '#FFFFFFFF' id: Arrows decals: - 570: -12,-30 + 552: -12,-30 - node: color: '#FFFFFFFF' id: Arrows decals: - 507: 20,17 - 522: 20,17 - 526: 20,27 - 571: -12,-29 + 489: 20,17 + 504: 20,17 + 508: 20,27 + 553: -12,-29 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Arrows decals: - 523: 22,17 - 527: 22,27 + 505: 22,17 + 509: 22,27 + - node: + color: '#C3C3C3FF' + id: Bot + decals: + 904: -35,-24 + 909: -32,-32 + 910: -31,-32 - node: color: '#FFFFFFFF' id: Bot decals: - 501: -35,6 - 502: -30,11 - 532: -3,-31 - 778: 31,8 - 779: 31,9 + 483: -35,6 + 484: -30,11 + 514: -3,-31 + 760: 31,8 + 761: 31,9 - node: zIndex: 1 color: '#FFFFFFFF' id: Bot decals: - 625: 20,7 - 626: 21,7 - 627: 22,7 - 699: -7,-26 - 700: -6,-26 + 607: 20,7 + 608: 21,7 + 609: 22,7 + 681: -7,-26 + 682: -6,-26 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Bot decals: - 524: 20,17 - 525: 22,17 + 506: 20,17 + 507: 22,17 - node: color: '#FFFFFFFF' id: BotRight decals: - 49: 19,16 - 50: 19,17 + 41: 19,16 + 42: 19,17 - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerNe + color: '#C3C3C3FF' + id: Box decals: - 575: 52,-22 - - node: - zIndex: 1 - color: '#FFFFFFFF' - id: BrickTileDarkCornerNe - decals: - 628: 32,-24 - 629: 33,-25 - 630: 34,-26 + 922: -33,-29 + 923: -33,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerNe decals: - 705: -9,-28 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerNw - decals: - 573: 46,-22 + 687: -9,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerNw decals: - 706: -10,-28 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerSe - decals: - 572: 52,-28 + 688: -10,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerSe decals: - 704: -9,-30 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkCornerSw - decals: - 574: 46,-28 + 686: -9,-30 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerSw decals: - 703: -10,-30 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkInnerNe - decals: - 589: 51,-22 - 590: 52,-23 - - node: - zIndex: 1 - color: '#FFFFFFFF' - id: BrickTileDarkInnerNe - decals: - 631: 33,-26 - 632: 32,-25 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkInnerNw - decals: - 584: 47,-22 - 591: 46,-23 + 685: -10,-30 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSe decals: - 585: 51,-28 - 586: 52,-27 - 777: -11,20 + 759: -11,20 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileDarkInnerSe decals: - 637: 6,17 - - node: - color: '#FFFFFFFF' - id: BrickTileDarkInnerSw - decals: - 587: 47,-28 - 588: 46,-27 + 619: 6,17 - node: color: '#FFFFFFFF' id: BrickTileDarkLineE decals: - 578: 53,-26 - 579: 53,-24 - 679: 0,-25 + 661: 0,-25 + 883: -1,29 + 884: -1,28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineE decals: - 707: -9,-29 + 689: -9,-29 - node: color: '#FFFFFFFF' id: BrickTileDarkLineN decals: - 576: 48,-21 - 577: 50,-21 - 674: -6,-23 - 675: -5,-23 - 676: -4,-23 + 656: -6,-23 + 657: -5,-23 + 658: -4,-23 + 881: 3,30 + 882: 4,30 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineN decals: - 714: 12,-14 - 715: 13,-14 - 716: 14,-14 - 717: 15,-14 + 696: 12,-14 + 697: 13,-14 + 698: 14,-14 + 699: 15,-14 - node: color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 580: 50,-29 - 581: 48,-29 - 774: -8,20 - 775: -9,20 - 776: -10,20 + 756: -8,20 + 757: -9,20 + 758: -10,20 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 633: 10,17 - 634: 9,17 - 635: 8,17 - 636: 7,17 + 615: 10,17 + 616: 9,17 + 617: 8,17 + 618: 7,17 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 718: 12,-18 - 719: 13,-18 - 720: 14,-18 - 721: 15,-18 + 700: 12,-18 + 701: 13,-18 + 702: 14,-18 + 703: 15,-18 - node: color: '#FFFFFFFF' id: BrickTileDarkLineW decals: - 582: 45,-26 - 583: 45,-24 - 680: -2,-25 + 662: -2,-25 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineW decals: - 708: -10,-29 + 690: -10,-29 - node: zIndex: 2 color: '#D381C9FF' id: BrickTileSteelCornerNe decals: - 702: -6,-26 + 684: -6,-26 - node: color: '#D381C9FF' id: BrickTileSteelCornerNw decals: - 688: -4,-26 + 670: -4,-26 - node: color: '#D381C9FF' id: BrickTileSteelCornerSe decals: - 694: -8,-24 + 676: -8,-24 - node: color: '#D381C9E5' id: BrickTileSteelCornerSw decals: - 561: -12,-32 + 543: -12,-32 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerSw decals: - 790: 25,19 + 772: 25,19 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelEndE decals: - 612: -36,-11 - 613: -41,-11 - 614: -47,-11 + 594: -36,-11 + 595: -41,-11 + 596: -47,-11 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelEndW decals: - 609: -50,-11 - 610: -43,-11 - 611: -38,-11 + 591: -50,-11 + 592: -43,-11 + 593: -38,-11 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelInnerNe + decals: + 898: -34,-32 + 927: -35,-27 - node: color: '#D381C9E5' id: BrickTileSteelInnerNe decals: - 565: -10,-26 + 547: -10,-26 - node: color: '#D381C9FF' id: BrickTileSteelInnerNe decals: - 678: -6,-27 - 693: 0,-29 - 698: -13,-19 + 660: -6,-27 + 675: 0,-29 + 680: -13,-19 - node: color: '#D381C9FF' id: BrickTileSteelInnerNw decals: - 687: -4,-27 - 689: -3,-26 + 669: -4,-27 + 671: -3,-26 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelInnerSe + decals: + 908: -34,-30 + 918: -36,-28 + 919: -33,-30 - node: color: '#D381C9E5' id: BrickTileSteelInnerSe decals: - 555: -18,-28 - 558: -7,-33 + 537: -18,-28 + 540: -7,-33 - node: color: '#D381C9FF' id: BrickTileSteelInnerSe decals: - 690: 0,-26 - 695: -8,-23 + 672: 0,-26 + 677: -8,-23 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelInnerSw + decals: + 885: -34,-28 - node: color: '#D381C9E5' id: BrickTileSteelInnerSw decals: - 537: -12,-20 - 562: -12,-31 + 519: -12,-20 + 544: -12,-31 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelLineE + decals: + 895: -33,-29 + 896: -33,-28 + 897: -34,-31 + 902: -35,-26 + 903: -35,-25 + 906: -33,-30 + 917: -36,-29 + 926: -36,-30 - node: color: '#D381C9FF' id: BrickTileSteelLineE decals: - 691: 0,-27 - 692: 0,-28 + 673: 0,-27 + 674: 0,-28 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineE decals: - 623: -36,-9 + 605: -36,-9 - node: - zIndex: 2 - color: '#FFFFFFFF' - id: BrickTileSteelLineE + color: '#C3C3C3FF' + id: BrickTileSteelLineN decals: - 749: -7,12 - 750: -7,14 - 751: -7,16 + 893: -37,-24 + 894: -36,-24 + 899: -33,-32 + 900: -33,-27 + 901: -34,-27 - node: color: '#D381C9E5' id: BrickTileSteelLineN decals: - 539: -8,-19 - 540: -9,-19 - 541: -10,-19 - 542: -11,-19 - 564: -9,-26 + 521: -8,-19 + 522: -9,-19 + 523: -10,-19 + 524: -11,-19 + 546: -9,-26 - node: color: '#D381C9FF' id: BrickTileSteelLineN decals: - 677: -8,-26 - 697: -12,-19 + 659: -8,-26 + 679: -12,-19 - node: zIndex: 2 color: '#D381C9FF' id: BrickTileSteelLineN decals: - 701: -7,-26 + 683: -7,-26 - node: color: '#FFFFFFFF' id: BrickTileSteelLineN decals: - 533: -11,-24 + 515: -11,-24 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineN decals: - 615: -49,-11 - 616: -48,-11 - 617: -42,-11 - 618: -37,-11 + 597: -49,-11 + 598: -48,-11 + 599: -42,-11 + 600: -37,-11 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelLineS + decals: + 888: -33,-33 + 907: -33,-30 + 911: -34,-33 + 916: -37,-30 + 924: -35,-28 + 925: -36,-30 - node: color: '#D381C9E5' id: BrickTileSteelLineS decals: - 538: -13,-20 - 551: -17,-28 - 552: -16,-28 - 553: -15,-28 - 554: -14,-28 - 556: -5,-33 - 557: -6,-33 - 560: -11,-32 - 563: -13,-31 + 520: -13,-20 + 533: -17,-28 + 534: -16,-28 + 535: -15,-28 + 536: -14,-28 + 538: -5,-33 + 539: -6,-33 + 542: -11,-32 + 545: -13,-31 - node: color: '#D381C9FF' id: BrickTileSteelLineS decals: - 696: -9,-24 + 678: -9,-24 - node: color: '#FFFFFFFF' id: BrickTileSteelLineS decals: - 647: 57,5 - 648: 56,5 - 787: 26,19 - 788: 27,19 - 789: 28,19 + 629: 57,5 + 630: 56,5 + 769: 26,19 + 770: 27,19 + 771: 28,19 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineS decals: - 619: -48,-11 - 620: -49,-11 - 621: -42,-11 - 622: -37,-11 + 601: -48,-11 + 602: -49,-11 + 603: -42,-11 + 604: -37,-11 + - node: + color: '#C3C3C3FF' + id: BrickTileSteelLineW + decals: + 886: -34,-29 + 887: -34,-32 + 889: -37,-27 + 890: -37,-26 + 891: -37,-25 + 892: -37,-24 + 905: -34,-30 + 915: -37,-28 - node: color: '#D381C9E5' id: BrickTileSteelLineW decals: - 534: -12,-23 - 535: -12,-22 - 536: -12,-21 + 516: -12,-23 + 517: -12,-22 + 518: -12,-21 - node: color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 791: 25,20 - 792: 25,21 + 773: 25,20 + 774: 25,21 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 624: -38,-9 + 606: -38,-9 - node: - zIndex: 2 - color: '#FFFFFFFF' - id: BrickTileSteelLineW + color: '#689F54FF' + id: BrickTileWhiteCornerNe decals: - 746: -9,12 - 747: -9,14 - 748: -9,16 + 957: -21,-5 + - node: + color: '#689F54FF' + id: BrickTileWhiteCornerNw + decals: + 958: -23,-5 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteCornerSe decals: - 754: -8,7 + 736: -8,7 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteCornerSw decals: - 744: 7,-18 + 726: 7,-18 - node: color: '#A4610696' id: BrickTileWhiteCornerSw decals: - 797: 18,15 + 779: 18,15 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteCornerSw decals: - 755: -14,7 + 737: -14,7 - node: color: '#52B4E996' id: BrickTileWhiteEndE decals: - 661: 49,-12 + 643: 49,-12 - node: color: '#9FED5896' id: BrickTileWhiteEndE decals: - 657: 52,-10 + 639: 52,-10 - node: color: '#A4610696' id: BrickTileWhiteEndE decals: - 664: 52,-8 + 646: 52,-8 - node: color: '#D381C996' id: BrickTileWhiteEndE decals: - 660: 52,-12 + 642: 52,-12 - node: color: '#D4D4D496' id: BrickTileWhiteEndE decals: - 656: 49,-10 + 638: 49,-10 - node: color: '#EFB34196' id: BrickTileWhiteEndE decals: - 649: 49,-8 + 631: 49,-8 - node: color: '#334E6DC8' id: BrickTileWhiteEndN decals: - 651: 57,-8 + 633: 57,-8 - node: color: '#DE3A3A96' id: BrickTileWhiteEndN decals: - 654: 57,-11 + 636: 57,-11 - node: color: '#334E6DC8' id: BrickTileWhiteEndS decals: - 652: 57,-9 + 634: 57,-9 - node: color: '#DE3A3A96' id: BrickTileWhiteEndS decals: - 653: 57,-12 + 635: 57,-12 - node: color: '#52B4E996' id: BrickTileWhiteEndW decals: - 662: 48,-12 + 644: 48,-12 - node: color: '#9FED5896' id: BrickTileWhiteEndW decals: - 658: 51,-10 + 640: 51,-10 - node: color: '#A4610696' id: BrickTileWhiteEndW decals: - 663: 51,-8 + 645: 51,-8 - node: color: '#D381C996' id: BrickTileWhiteEndW decals: - 659: 51,-12 + 641: 51,-12 - node: color: '#D4D4D496' id: BrickTileWhiteEndW decals: - 655: 48,-10 + 637: 48,-10 - node: color: '#EFB34196' id: BrickTileWhiteEndW decals: - 650: 48,-8 + 632: 48,-8 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteInnerSe decals: - 730: 19,-13 + 712: 19,-13 - node: color: '#A4610696' id: BrickTileWhiteInnerSe decals: - 795: 22,15 + 777: 22,15 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteInnerSw decals: - 729: 17,-13 + 711: 17,-13 - node: color: '#A4610696' id: BrickTileWhiteInnerSw decals: - 796: 19,15 + 778: 19,15 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileWhiteInnerSw decals: - 725: 20,-18 + 707: 20,-18 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineE decals: - 727: 19,-14 + 709: 19,-14 - node: - zIndex: 2 - color: '#DE3A3A96' + color: '#689F54FF' id: BrickTileWhiteLineE decals: - 734: 0,12 - 735: 0,13 - 736: 0,14 - 737: 0,11 + 955: -21,-8 + 956: -21,-7 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineE decals: - 756: -8,8 + 738: -8,8 - node: - zIndex: 2 - color: '#9FED5896' + color: '#689F54FF' id: BrickTileWhiteLineN decals: - 758: -20,-11 - 759: -19,-11 - 760: -18,-11 + 959: -22,-5 - node: color: '#A4610696' id: BrickTileWhiteLineN decals: - 783: 26,10 - 784: 27,10 + 765: 26,10 + 766: 27,10 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineS decals: - 738: 8,-18 - 739: 9,-18 - 745: 10,-18 + 720: 8,-18 + 721: 9,-18 + 727: 10,-18 - node: color: '#A4610696' id: BrickTileWhiteLineS decals: - 785: 26,8 - 786: 27,8 - 793: 24,15 - 794: 23,15 - 800: 26,15 - 801: 27,15 - 802: 28,15 + 767: 26,8 + 768: 27,8 + 775: 24,15 + 776: 23,15 + 782: 26,15 + 783: 27,15 + 784: 28,15 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineS decals: - 752: -9,7 - 753: -13,7 + 734: -9,7 + 735: -13,7 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileWhiteLineS decals: - 722: 17,-18 - 723: 18,-18 - 724: 19,-18 + 704: 17,-18 + 705: 18,-18 + 706: 19,-18 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineW decals: - 728: 17,-14 - 740: 7,-17 - 741: 7,-16 - 742: 7,-15 - 743: 7,-14 + 710: 17,-14 + 722: 7,-17 + 723: 7,-16 + 724: 7,-15 + 725: 7,-14 - node: - color: '#A4610696' + color: '#689F54FF' id: BrickTileWhiteLineW decals: - 798: 18,16 - 799: 18,17 + 952: -23,-7 + 953: -23,-6 + 960: -23,-8 - node: - zIndex: 2 - color: '#DE3A3A96' + color: '#A4610696' id: BrickTileWhiteLineW decals: - 731: -1,12 - 732: -1,13 - 733: -1,14 + 780: 18,16 + 781: 18,17 - node: color: '#EFB34196' id: BrickTileWhiteLineW decals: - 807: 48,-6 - 808: 48,-5 - 809: 48,-4 - 810: 48,-3 + 789: 48,-6 + 790: 48,-5 + 791: 48,-4 + 792: 48,-3 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineW decals: - 757: -14,8 - - node: - color: '#FFFFFFFF' - id: Bushf1 - decals: - 359: 49.70676,-26.348543 - 360: 45.878635,-24.817293 - 361: 47.878635,-24.286043 - 362: 47.98801,-22.239168 - 363: 50.01926,-24.348543 - - node: - color: '#FFFFFFFF' - id: Bushf2 - decals: - 364: 48.534885,-26.832918 - - node: - color: '#FFFFFFFF' - id: Bushi1 - decals: - 358: 50.61301,-24.082918 - - node: - color: '#FFFFFFFF' - id: Bushi2 - decals: - 356: 46.11301,-26.098543 - 357: 47.73801,-24.957918 - - node: - color: '#FFFFFFFF' - id: Bushi3 - decals: - 354: 49.941135,-27.348543 - 355: 46.05051,-23.989168 - - node: - color: '#FFFFFFFF' - id: Bushi4 - decals: - 351: 47.61301,-25.629793 - 352: 48.08176,-27.989168 - 353: 51.878635,-25.864168 - - node: - color: '#FFFFFFFF' - id: Bushk1 - decals: - 385: 51.01926,-26.036043 - 386: 46.972385,-23.754793 - 387: 48.61301,-26.082918 - - node: - color: '#FFFFFFFF' - id: Bushm2 - decals: - 379: 50.503635,-26.161043 - 380: 46.36301,-25.192293 - - node: - color: '#FFFFFFFF' - id: Bushm3 - decals: - 381: 48.941135,-27.754793 - 382: 48.05051,-25.379793 - - node: - color: '#FFFFFFFF' - id: Bushm4 - decals: - 383: 49.89426,-25.567293 - 384: 51.23801,-23.036043 + 739: -14,8 - node: color: '#FFFFFFFF' id: Caution decals: - 673: 58,-5 + 655: 58,-5 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Caution decals: - 124: 53,2 + 116: 53,2 - node: color: '#52B4E996' id: CheckerNWSE decals: - 394: 21,-8 - 395: 21,-7 - 396: 21,-6 - 397: 21,-5 - 398: 22,-8 - 399: 22,-7 - 400: 22,-6 - 401: 22,-5 - 402: 23,-8 - 403: 23,-7 - 404: 23,-6 - 405: 23,-5 - 406: 24,-8 - 407: 24,-7 - 408: 24,-6 - 409: 24,-5 + 376: 21,-8 + 377: 21,-7 + 378: 21,-6 + 379: 21,-5 + 380: 22,-8 + 381: 22,-7 + 382: 22,-6 + 383: 22,-5 + 384: 23,-8 + 385: 23,-7 + 386: 23,-6 + 387: 23,-5 + 388: 24,-8 + 389: 24,-7 + 390: 24,-6 + 391: 24,-5 - node: color: '#D381C996' id: CheckerNWSE decals: - 457: -3,-23 + 439: -3,-23 - node: color: '#D4D4D428' id: CheckerNWSE decals: - 466: -40,4 - 467: -40,5 - 468: -40,6 - 469: -36,4 - 470: -36,5 - 471: -36,6 - 482: -37,0 - 483: -37,1 - 484: -37,2 - 485: -37,8 - 486: -37,9 - 487: -37,10 - 503: -37,-8 - 504: -37,-7 - 505: -37,-6 - 506: -37,-5 + 448: -40,4 + 449: -40,5 + 450: -40,6 + 451: -36,4 + 452: -36,5 + 453: -36,6 + 464: -37,0 + 465: -37,1 + 466: -37,2 + 467: -37,8 + 468: -37,9 + 469: -37,10 + 485: -37,-8 + 486: -37,-7 + 487: -37,-6 + 488: -37,-5 - node: color: '#FFFFFFFF' id: Delivery decals: - 559: -8,-33 - 682: -1,-31 + 541: -8,-33 + 664: -1,-31 - node: color: '#FFFFFFFF' id: DirtHeavy decals: - 312: -16,10 - 313: -17,11 + 294: -16,10 + 295: -17,11 - node: cleanable: True color: '#FFFFFFFF' id: DirtHeavy decals: - 517: -24,-25 + 499: -24,-25 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtHeavy decals: - 762: -20,10 - 766: -20,9 - 767: -18,9 + 744: -20,10 + 748: -20,9 + 749: -18,9 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtHeavyMonotile decals: - 765: -20,8 + 747: -20,8 - node: color: '#FFFFFFFF' id: DirtLight decals: - 316: -18,10 - 317: -17,9 + 298: -18,10 + 299: -17,9 - node: cleanable: True color: '#FFFFFFFF' id: DirtLight decals: - 53: 27,16 - 54: 26,17 - 55: 23,17 - 56: 24,16 - 57: 15,7 - 58: 14,7 - 59: 16,9 - 60: 15,9 - 61: 16,10 - 62: 20,13 - 63: 21,13 - 64: 20,14 - 65: 19,13 - 66: 18,11 - 67: 29,5 - 68: 29,6 - 69: 27,3 - 70: 50,1 - 71: 42,9 - 72: 46,7 - 74: 36,5 - 75: 29,-5 - 76: 30,-5 - 77: 34,-5 - 78: 33,0 - 79: 7,5 - 126: 52,1 - 127: 53,3 - 128: 57,4 - 129: 45,5 - 130: 35,2 - 488: -40,0 - 489: -36,1 - 490: -38,7 - 491: -40,8 - 492: -38,-4 - 493: -36,-8 - 494: -24,-9 - 495: -24,3 - 496: -25,2 - 497: -7,3 - 499: -36,8 - 500: -38,9 - 508: -23,-24 - 509: -25,-23 - 510: -23,-22 - 511: -25,-25 - 512: -24,-24 - 513: -24,-22 + 45: 27,16 + 46: 26,17 + 47: 23,17 + 48: 24,16 + 49: 15,7 + 50: 14,7 + 51: 16,9 + 52: 15,9 + 53: 16,10 + 54: 20,13 + 55: 21,13 + 56: 20,14 + 57: 19,13 + 58: 18,11 + 59: 29,5 + 60: 29,6 + 61: 27,3 + 62: 50,1 + 63: 42,9 + 64: 46,7 + 66: 36,5 + 67: 29,-5 + 68: 30,-5 + 69: 34,-5 + 70: 33,0 + 71: 7,5 + 118: 52,1 + 119: 53,3 + 120: 57,4 + 121: 45,5 + 122: 35,2 + 470: -40,0 + 471: -36,1 + 472: -38,7 + 473: -40,8 + 474: -38,-4 + 475: -36,-8 + 476: -24,-9 + 477: -24,3 + 478: -25,2 + 479: -7,3 + 481: -36,8 + 482: -38,9 + 490: -23,-24 + 491: -25,-23 + 492: -23,-22 + 493: -25,-25 + 494: -24,-24 + 495: -24,-22 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtLight decals: - 763: -19,9 + 745: -19,9 - node: color: '#FFFFFFFF' id: DirtMedium decals: - 314: -17,10 - 315: -18,8 + 296: -17,10 + 297: -18,8 - node: cleanable: True color: '#FFFFFFFF' id: DirtMedium decals: - 51: 26,17 - 52: 24,17 - 73: 37,6 - 125: 53,1 - 498: -35,8 - 514: -23,-25 - 515: -25,-22 - 516: -25,-24 + 43: 26,17 + 44: 24,17 + 65: 37,6 + 117: 53,1 + 480: -35,8 + 496: -23,-25 + 497: -25,-22 + 498: -25,-24 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtMedium decals: - 761: -19,10 - 764: -19,8 - - node: - color: '#FFFFFFFF' - id: Flowersbr2 - decals: - 365: 48.80051,-27.911043 - 366: 48.159885,-27.239168 - 367: 51.597385,-24.270418 - 368: 51.86301,-24.895418 - 369: 47.159885,-23.098543 - - node: - color: '#FFFFFFFF' - id: Flowerspv1 - decals: - 370: 46.566135,-25.036043 - 371: 47.11301,-25.645418 - 372: 50.80051,-23.317293 - - node: - color: '#FFFFFFFF' - id: Flowersy1 - decals: - 373: 50.80051,-26.098543 - 374: 50.097385,-26.239168 - 375: 47.753635,-26.489168 - 376: 49.95676,-22.848543 - 377: 47.628635,-23.707918 - 378: 50.503635,-26.739168 + 743: -19,10 + 746: -19,8 - node: color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 140: 13,-7 - 425: 10,-7 - 426: 9,-7 - 441: 10,-10 - 442: 10,-9 - 443: 9,-10 - 444: 10,-11 - 445: 11,-10 + 132: 13,-7 + 407: 10,-7 + 408: 9,-7 + 423: 10,-10 + 424: 10,-9 + 425: 9,-10 + 426: 10,-11 + 427: 11,-10 - node: zIndex: 2 color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 709: 9,-3 - 710: 9,-2 - 711: 10,-2 - 712: 8,-2 - 713: 9,-1 - - node: - color: '#DE3A3A96' - id: FullTileOverlayGreyscale - decals: - 118: -2,10 - 119: -1,10 - 120: 0,10 + 691: 9,-3 + 692: 9,-2 + 693: 10,-2 + 694: 8,-2 + 695: 9,-1 - node: color: '#EFB34196' id: FullTileOverlayGreyscale decals: - 231: 36,3 - 232: 36,4 - 233: 36,5 - 318: 30,3 - - node: - color: '#FFFFFFFF' - id: Grassb1 - decals: - 342: 47.034885,-26.332918 - 343: 48.159885,-27.364168 - 344: 51.01926,-23.629793 - - node: - color: '#FFFFFFFF' - id: Grassb2 - decals: - 340: 51.11301,-24.739168 - 341: 46.409885,-25.489168 - 350: 49.409885,-27.004793 - - node: - color: '#FFFFFFFF' - id: Grassb3 - decals: - 345: 50.98801,-27.020418 - 346: 49.972385,-26.176668 - - node: - color: '#FFFFFFFF' - id: Grassb4 - decals: - 347: 47.23801,-23.957918 - 348: 46.409885,-24.301668 - - node: - color: '#FFFFFFFF' - id: Grassb5 - decals: - 349: 48.347385,-26.270418 - - node: - color: '#FFFFFFFF' - id: Grassd1 - decals: - 319: 50.628635,-26.192293 - 320: 46.58176,-24.504793 - 321: 47.034885,-25.473543 - 322: 50.01926,-22.832918 - 323: 50.48801,-23.114168 - 324: 48.503635,-27.504793 - - node: - color: '#FFFFFFFF' - id: Grassd2 - decals: - 389: 48.45676,-24.942293 - - node: - color: '#FFFFFFFF' - id: Grassd3 - decals: - 337: 50.253635,-25.504793 - 338: 49.89426,-27.926668 - 339: 52.159885,-24.020418 - - node: - color: '#FFFFFFFF' - id: Grasse1 - decals: - 332: 46.20676,-25.754793 - 333: 47.034885,-24.598543 - 334: 51.48801,-25.051668 - 335: 50.45676,-26.801668 - 336: 49.64426,-25.004793 - - node: - color: '#FFFFFFFF' - id: Grasse2 - decals: - 329: 50.86301,-24.786043 - 330: 51.222385,-25.645418 - 331: 47.14426,-26.770418 - - node: - color: '#FFFFFFFF' - id: Grasse3 - decals: - 325: 49.222385,-27.411043 - 326: 48.11301,-26.239168 - 327: 47.08176,-23.395418 - 328: 51.36301,-24.379793 + 213: 36,3 + 214: 36,4 + 215: 36,5 + 300: 30,3 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale decals: - 131: 19,-5 - 132: 18,-5 - 133: 17,-5 - 134: 16,-5 - 135: 15,-5 - 136: 14,-5 - 160: 6,1 - 161: 7,1 - 162: 8,1 - 163: 9,1 - 164: 10,1 - 165: 11,1 - 427: 9,-8 - 428: 10,-8 - 429: 11,-8 + 123: 19,-5 + 124: 18,-5 + 125: 17,-5 + 126: 16,-5 + 127: 15,-5 + 128: 14,-5 + 152: 6,1 + 153: 7,1 + 154: 8,1 + 155: 9,1 + 156: 10,1 + 157: 11,1 + 409: 9,-8 + 410: 10,-8 + 411: 11,-8 - node: color: '#A4610696' id: HalfTileOverlayGreyscale decals: - 22: 13,12 - 23: 14,12 - 24: 15,12 - 25: 16,12 + 14: 13,12 + 15: 14,12 + 16: 15,12 + 17: 16,12 + - node: + color: '#BD575DFF' + id: HalfTileOverlayGreyscale + decals: + 1016: -9,17 + 1017: -8,17 + 1018: -7,17 + 1045: -11,11 + 1046: -12,11 + 1047: -13,11 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale decals: - 108: -11,11 - 109: -12,11 - 110: -13,11 - 111: -14,11 - 186: 0,5 - 187: -1,5 - 188: -2,5 - 189: -4,5 - 190: -3,5 - 191: -7,5 - 192: -8,5 - 193: -9,5 - 194: -10,5 - 195: -11,5 - 196: -12,5 - 197: -13,5 - 198: -14,5 - 199: -15,5 - 200: -16,5 - 201: -17,5 - 202: -18,5 + 168: 0,5 + 169: -1,5 + 170: -2,5 + 171: -4,5 + 172: -3,5 + 173: -7,5 + 174: -8,5 + 175: -9,5 + 176: -10,5 + 177: -11,5 + 178: -12,5 + 179: -13,5 + 180: -14,5 + 181: -15,5 + 182: -16,5 + 183: -17,5 + 184: -18,5 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale decals: - 35: 30,-2 - 241: 49,5 - 242: 48,5 - 243: 47,5 - 244: 46,5 - 245: 45,5 - 250: 43,9 - 252: 42,9 - 257: 41,6 - 258: 40,6 - 259: 39,6 - 260: 38,6 + 27: 30,-2 + 223: 49,5 + 224: 48,5 + 225: 47,5 + 226: 46,5 + 227: 45,5 + 232: 43,9 + 234: 42,9 + 239: 41,6 + 240: 40,6 + 241: 39,6 + 242: 38,6 - node: color: '#FFD886FF' id: HalfTileOverlayGreyscale decals: - 149: 19,1 - 150: 18,1 - 151: 17,1 - 152: 16,1 - 153: 15,1 - 154: 14,1 + 141: 19,1 + 142: 18,1 + 143: 17,1 + 144: 16,1 + 145: 15,1 + 146: 14,1 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale180 decals: - 9: -3,28 - 10: -2,28 - 11: -1,28 - 12: 0,28 - 13: 6,28 - 14: 7,28 - 15: 8,28 - 16: 9,28 - 180: 5,30 - 181: 4,30 - 182: 3,30 - 183: 2,30 - 184: 1,30 + 166: 5,30 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale180 decals: - 419: 11,-6 - 420: 10,-6 - 421: 9,-6 - 422: 8,-6 - 423: 7,-6 - 424: 6,-6 - 434: 11,-12 - 435: 10,-12 - 436: 9,-12 - 451: 15,-12 - 452: 16,-12 + 401: 11,-6 + 402: 10,-6 + 403: 9,-6 + 404: 8,-6 + 405: 7,-6 + 406: 6,-6 + 416: 11,-12 + 417: 10,-12 + 418: 9,-12 + 433: 15,-12 + 434: 16,-12 + - node: + color: '#BD575DFF' + id: HalfTileOverlayGreyscale180 + decals: + 1004: -7,10 + 1005: -8,10 + 1006: -9,10 + 1042: -11,10 + 1043: -12,10 + 1044: -13,10 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale180 decals: - 89: -7,10 - 90: -8,10 - 91: -9,10 - 92: -10,10 - 93: -11,10 - 94: -12,10 - 95: -13,10 - 96: -14,10 - 115: -4,10 - 116: -3,10 - 221: -13,13 - 222: -14,13 - 223: -15,13 + 203: -13,13 + 204: -14,13 + 205: -15,13 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale180 decals: - 169: 34,-5 - 170: 33,-5 - 171: 32,-5 - 172: 31,-5 - 173: 30,-5 + 161: 34,-5 + 162: 33,-5 + 163: 32,-5 + 164: 31,-5 + 165: 30,-5 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -2702,238 +2531,255 @@ entities: 6: 0,24 7: 0,25 8: 0,26 - 177: 6,29 - 288: 1,16 - 289: 1,17 - 290: 1,18 - 291: 1,19 - 292: 1,20 - 293: 1,21 - 294: 6,7 - 295: 6,8 - 296: 6,9 - 297: 6,10 - 298: 6,11 + 270: 1,16 + 271: 1,17 + 272: 1,18 + 273: 1,19 + 274: 1,20 + 275: 1,21 + 276: 6,7 + 277: 6,8 + 278: 6,9 + 279: 6,10 + 280: 6,11 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale270 decals: - 138: 14,-6 - 139: 14,-7 - 437: 6,-12 - 438: 6,-11 - 439: 6,-9 - 440: 6,-8 - 446: 14,-8 - 447: 14,-9 - 448: 14,-10 - 449: 14,-11 + 130: 14,-6 + 131: 14,-7 + 419: 6,-12 + 420: 6,-11 + 421: 6,-9 + 422: 6,-8 + 428: 14,-8 + 429: 14,-9 + 430: 14,-10 + 431: 14,-11 - node: color: '#A4610696' id: HalfTileOverlayGreyscale270 decals: - 17: 12,9 - 18: 12,10 - 19: 12,11 - 20: 12,12 - 207: 12,6 - 208: 12,7 + 9: 12,9 + 10: 12,10 + 11: 12,11 + 12: 12,12 + 189: 12,6 + 190: 12,7 + - node: + color: '#BD575DFF' + id: HalfTileOverlayGreyscale270 + decals: + 1010: -10,11 + 1011: -10,12 + 1012: -10,13 + 1013: -10,14 + 1014: -10,15 + 1015: -10,16 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale270 decals: - 80: -6,7 - 81: -6,8 - 82: -6,6 - 83: -6,9 - 101: -10,12 - 102: -10,13 - 103: -10,14 - 104: -10,15 - 105: -10,16 - 106: -10,17 + 72: -6,7 + 73: -6,8 + 74: -6,6 + 75: -6,9 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale270 decals: - 26: 31,2 - 27: 31,3 - 28: 31,4 - 29: 31,5 - 30: 29,-5 - 31: 29,-4 - 32: 29,-3 - 33: 29,-2 - 37: 31,-1 - 38: 31,0 - 225: 31,6 - 234: 37,2 - 235: 37,3 - 236: 37,4 - 237: 37,5 - 238: 37,6 - 254: 42,8 - 255: 42,7 - 646: 55,2 + 18: 31,2 + 19: 31,3 + 20: 31,4 + 21: 31,5 + 22: 29,-5 + 23: 29,-4 + 24: 29,-3 + 25: 29,-2 + 29: 31,-1 + 30: 31,0 + 207: 31,6 + 216: 37,2 + 217: 37,3 + 218: 37,4 + 219: 37,5 + 220: 37,6 + 236: 42,8 + 237: 42,7 + 628: 55,2 - node: color: '#FFD886FF' id: HalfTileOverlayGreyscale270 decals: - 156: 14,0 - 157: 14,-1 - 158: 14,-2 - 159: 14,-3 + 148: 14,0 + 149: 14,-1 + 150: 14,-2 + 151: 14,-3 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 decals: - 176: 0,29 - 282: 5,16 - 283: 5,17 - 284: 5,18 - 285: 5,19 - 286: 5,20 - 287: 5,21 - 299: 10,7 - 300: 10,8 - 301: 10,9 - 302: 10,10 - 303: 10,11 + 264: 5,16 + 265: 5,17 + 266: 5,18 + 267: 5,19 + 268: 5,20 + 269: 5,21 + 281: 10,7 + 282: 10,8 + 283: 10,9 + 284: 10,10 + 285: 10,11 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale90 decals: - 141: 12,-6 - 142: 12,-5 - 143: 12,-4 - 144: 12,-3 - 145: 12,-2 - 146: 12,-1 - 147: 12,0 - 148: 12,1 - 431: 12,-9 - 432: 12,-10 - 819: 12,-11 + 133: 12,-6 + 134: 12,-5 + 135: 12,-4 + 136: 12,-3 + 137: 12,-2 + 138: 12,-1 + 139: 12,0 + 140: 12,1 + 413: 12,-9 + 414: 12,-10 + 801: 12,-11 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 decals: - 46: 16,11 - 47: 16,10 - 48: 16,9 - 209: 16,7 - 210: 16,6 - 211: 24,13 - 212: 24,12 - 213: 24,11 - 214: 24,10 - 215: 24,9 - 216: 24,8 + 38: 16,11 + 39: 16,10 + 40: 16,9 + 191: 16,7 + 192: 16,6 + 193: 24,13 + 194: 24,12 + 195: 24,11 + 196: 24,10 + 197: 24,9 + 198: 24,8 + - node: + color: '#BD575DFF' + id: HalfTileOverlayGreyscale90 + decals: + 964: -5,8 + 1019: -6,16 + 1020: -6,15 + 1026: -5,12 + - node: + color: '#C05B60FF' + id: HalfTileOverlayGreyscale90 + decals: + 1096: -5,13 + 1097: -5,11 + 1109: -5,10 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale90 decals: - 84: -5,6 - 85: -5,7 - 86: -5,8 - 87: -5,9 - 97: -3,11 - 98: -3,12 - 99: -3,13 - 100: -3,14 - 217: -12,13 - 218: -12,14 - 219: -12,15 - 220: -12,16 + 76: -5,6 + 77: -5,7 + 199: -12,13 + 200: -12,14 + 201: -12,15 + 202: -12,16 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale90 decals: - 39: 35,-5 - 40: 35,-4 - 41: 35,-3 - 42: 35,-2 - 43: 35,-1 - 44: 35,0 - 226: 35,2 - 227: 35,3 - 228: 35,4 - 229: 35,5 - 230: 35,6 - 239: 50,5 - 247: 44,6 - 263: 29,3 - 264: 29,4 - 265: 29,5 - 266: 29,6 + 31: 35,-5 + 32: 35,-4 + 33: 35,-3 + 34: 35,-2 + 35: 35,-1 + 36: 35,0 + 208: 35,2 + 209: 35,3 + 210: 35,4 + 211: 35,5 + 212: 35,6 + 221: 50,5 + 229: 44,6 + 245: 29,3 + 246: 29,4 + 247: 29,5 + 248: 29,6 - node: color: '#FFFFFFFF' id: MiniTileDarkLineN decals: - 531: -16,-25 + 513: -16,-25 - node: color: '#D381C9E5' id: MiniTileSteelCornerSe decals: - 543: -14,-23 + 525: -14,-23 - node: color: '#D381C9E5' id: MiniTileSteelCornerSw decals: - 549: -18,-24 + 531: -18,-24 - node: color: '#D381C9E5' id: MiniTileSteelInnerSe decals: - 544: -15,-23 + 526: -15,-23 - node: color: '#D381C9E5' id: MiniTileSteelInnerSw decals: - 550: -17,-24 + 532: -17,-24 - node: color: '#D381C9E5' id: MiniTileSteelLineE decals: - 545: -14,-22 + 527: -14,-22 - node: color: '#D381C9E5' id: MiniTileSteelLineW decals: - 546: -18,-21 - 547: -18,-22 - 548: -18,-23 + 528: -18,-21 + 529: -18,-22 + 530: -18,-23 + - node: + color: '#FFFFFFFF' + id: MiniTileSteelLineW + decals: + 1069: -5,-13 + 1070: -5,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteInnerSe decals: - 601: -51,-12 - 602: -44,-12 + 583: -51,-12 + 584: -44,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteInnerSw decals: - 600: -46,-12 - 603: -53,-12 - 606: -39,-12 + 582: -46,-12 + 585: -53,-12 + 588: -39,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteLineS decals: - 592: -50,-12 - 593: -49,-12 - 594: -48,-12 - 595: -47,-12 - 596: -43,-12 - 597: -42,-12 - 598: -41,-12 - 599: -40,-12 + 574: -50,-12 + 575: -49,-12 + 576: -48,-12 + 577: -47,-12 + 578: -43,-12 + 579: -42,-12 + 580: -41,-12 + 581: -40,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteLineW decals: - 604: -54,-11 - 605: -54,-10 + 586: -54,-11 + 587: -54,-10 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale @@ -2941,486 +2787,597 @@ entities: 0: 2,23 1: 2,24 2: 2,25 - 175: 6,28 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale decals: - 166: 12,1 + 158: 12,1 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale decals: - 477: -36,3 - 478: -37,3 - 479: -38,3 - 480: -39,3 - 481: -40,3 + 459: -36,3 + 460: -37,3 + 461: -38,3 + 462: -39,3 + 463: -40,3 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale decals: - 107: -10,11 - 112: -14,10 - 204: 1,5 - 205: -6,5 + 186: 1,5 + 187: -6,5 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale decals: - 36: 31,-2 - 240: 50,5 - 251: 44,9 - 256: 42,6 - 645: 55,1 - - node: - color: '#334E6DC8' - id: QuarterTileOverlayGreyscale180 - decals: - 178: 0,30 + 28: 31,-2 + 222: 50,5 + 233: 44,9 + 238: 42,6 + 627: 55,1 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale180 decals: - 453: 19,-11 - 454: 19,-10 - 455: 19,-9 - 456: 19,-8 + 435: 19,-11 + 436: 19,-10 + 437: 19,-9 + 438: 19,-8 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale180 decals: - 45: 16,12 + 37: 16,12 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale180 decals: - 472: -37,7 - 473: -38,7 - 474: -39,7 - 475: -40,7 - 476: -36,7 - - node: - color: '#DE3A3A96' - id: QuarterTileOverlayGreyscale180 - decals: - 114: -5,10 + 454: -37,7 + 455: -38,7 + 456: -39,7 + 457: -40,7 + 458: -36,7 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale180 decals: - 167: 29,-5 - 248: 44,7 + 159: 29,-5 + 230: 44,7 - node: - color: '#334E6DC8' + color: '#52B4E996' id: QuarterTileOverlayGreyscale270 decals: - 179: 6,30 + 129: 14,-5 + 400: 12,-6 - node: - color: '#52B4E996' + color: '#C05B60FF' id: QuarterTileOverlayGreyscale270 decals: - 137: 14,-5 - 418: 12,-6 + 1108: -6,10 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale270 decals: - 88: -6,10 - 113: -14,11 - 224: -12,13 + 206: -12,13 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale270 decals: - 168: 35,-5 - 253: 42,9 - 644: 55,3 + 160: 35,-5 + 235: 42,9 + 626: 55,3 - node: color: '#FFD886FF' id: QuarterTileOverlayGreyscale270 decals: - 155: 14,1 + 147: 14,1 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 decals: 3: 4,24 4: 4,25 - 174: 0,28 - 185: 4,23 + 167: 4,23 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale90 decals: - 21: 12,12 - 410: 16,5 - 411: 17,5 - 412: 18,5 - 413: 19,5 - 414: 20,5 - 415: 21,5 - 416: 22,5 - 417: 23,5 + 13: 12,12 + 392: 16,5 + 393: 17,5 + 394: 18,5 + 395: 19,5 + 396: 20,5 + 397: 21,5 + 398: 22,5 + 399: 23,5 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale90 decals: - 117: -3,10 - 203: -19,5 - 206: -5,5 + 185: -19,5 + 188: -5,5 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale90 decals: - 34: 29,-2 - 246: 44,5 - 249: 44,9 - 261: 37,6 - 262: 50,4 - 267: 28,6 - 268: 27,6 - 269: 26,6 - 270: 25,6 + 26: 29,-2 + 228: 44,5 + 231: 44,9 + 243: 37,6 + 244: 50,4 + 249: 28,6 + 250: 27,6 + 251: 26,6 + 252: 25,6 - node: - color: '#FFFFFFFF' - id: Rock01 + color: '#8F6CFFAD' + id: Rust decals: - 388: 49.003635,-25.832918 + 934: -31,-3 + 935: -30,-3 + 936: -30,0 + 937: -31,0 + 938: -31,1 + 939: -30,1 - node: color: '#FFFFFFFF' id: StandClear decals: - 520: 21,24 - 607: -52,-12 - 608: -45,-12 - 681: 1,-30 + 502: 21,24 + 589: -52,-12 + 590: -45,-12 + 663: 1,-30 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: StandClear decals: - 281: 60,2 + 263: 60,2 + - node: + color: '#BD575DFF' + id: ThreeQuarterTileOverlayGreyscale + decals: + 1023: -10,17 + 1049: -14,11 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 433: 12,-12 + 415: 12,-12 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale270 decals: - 450: 14,-12 + 432: 14,-12 + - node: + color: '#BD575DFF' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 1009: -10,10 + 1048: -14,10 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale90 decals: - 430: 12,-8 + 412: 12,-8 + - node: + color: '#BD575DFF' + id: ThreeQuarterTileOverlayGreyscale90 + decals: + 1021: -5,14 + 1022: -6,17 - node: color: '#FF0000FF' id: WarnBox decals: - 860: 69,2 + 842: 69,2 - node: color: '#FFFFFFFF' id: WarnBox decals: - 393: -26,24 + 375: -26,24 - node: color: '#FF0000FF' id: WarnCornerNE decals: - 863: 68,3 + 845: 68,3 - node: color: '#FFFFFFFF' id: WarnCornerNE decals: - 811: -41,-6 + 793: -41,-6 - node: color: '#FF0000FF' id: WarnCornerNW decals: - 864: 66,3 + 846: 66,3 - node: color: '#FFFFFFFF' id: WarnCornerNW decals: - 812: -43,-6 + 794: -43,-6 - node: color: '#FF0000FF' id: WarnCornerSE decals: - 862: 68,1 + 844: 68,1 - node: color: '#FFFFFFFF' id: WarnCornerSE decals: - 813: -41,-4 + 795: -41,-4 - node: color: '#FF0000FF' id: WarnCornerSW decals: - 861: 66,1 + 843: 66,1 - node: color: '#FFFFFFFF' id: WarnCornerSW decals: - 814: -43,-4 + 796: -43,-4 - node: color: '#FFFFFFFF' id: WarnEndE decals: - 818: 12,-12 + 800: 12,-12 - node: color: '#FF0000FF' id: WarnEndN decals: - 859: 70,3 + 841: 70,3 - node: color: '#FF0000FF' id: WarnEndS decals: - 858: 70,2 + 840: 70,2 - node: color: '#FFFFFFFF' id: WarnEndW decals: - 817: 11,-12 + 799: 11,-12 + - node: + color: '#C3C3C3FF' + id: WarnLineE + decals: + 914: -36,-33 - node: color: '#FF0000FF' id: WarnLineE decals: - 832: 60,7 - 833: 60,6 - 865: 68,2 + 814: 60,7 + 815: 60,6 + 847: 68,2 - node: color: '#FFFFFFFF' id: WarnLineE decals: - 566: -15,-30 - 567: -15,-31 - 665: 54,-4 - 666: 54,-5 - 667: 54,-6 - 821: 57,7 - 822: 57,6 - 823: 57,8 - 824: 57,5 - 825: 57,4 - 826: 57,3 - 827: 57,2 - 828: 57,1 - 829: 57,0 + 548: -15,-30 + 549: -15,-31 + 647: 54,-4 + 648: 54,-5 + 649: 54,-6 + 803: 57,7 + 804: 57,6 + 805: 57,8 + 806: 57,5 + 807: 57,4 + 808: 57,3 + 809: 57,2 + 810: 57,1 + 811: 57,0 + 961: -21,-6 - node: color: '#FF0000FF' id: WarnLineN decals: - 853: 62,0 - 854: 63,0 - 855: 63,5 - 856: 62,5 - 857: 67,1 + 835: 62,0 + 836: 63,0 + 837: 63,5 + 838: 62,5 + 839: 67,1 - node: color: '#FFFFFFFF' id: WarnLineN decals: - 528: 20,26 - 529: 21,26 - 530: 22,26 - 668: 56,-4 - 669: 57,-4 - 670: 58,-4 - 671: 59,-4 - 672: 60,-4 - 683: -3,-29 - 684: -2,-29 - 685: -1,-29 - 686: 0,-29 - 815: -42,-4 - 869: 70,5 + 510: 20,26 + 511: 21,26 + 512: 22,26 + 650: 56,-4 + 651: 57,-4 + 652: 58,-4 + 653: 59,-4 + 654: 60,-4 + 665: -3,-29 + 666: -2,-29 + 667: -1,-29 + 668: 0,-29 + 797: -42,-4 + 850: 70,5 + - node: + color: '#C3C3C3FF' + id: WarnLineS + decals: + 912: -34,-33 + 913: -36,-33 + 920: -37,-30 + 921: -37,-29 - node: color: '#FF0000FF' id: WarnLineS decals: - 834: 62,10 - 835: 62,8 - 836: 62,9 - 837: 62,7 - 838: 62,6 - 839: 62,5 - 840: 62,4 - 841: 62,3 - 842: 62,2 - 843: 62,1 - 844: 62,0 - 845: 62,-1 - 846: 62,-2 - 847: 62,-3 - 848: 62,-4 - 866: 66,2 + 816: 62,10 + 817: 62,8 + 818: 62,9 + 819: 62,7 + 820: 62,6 + 821: 62,5 + 822: 62,4 + 823: 62,3 + 824: 62,2 + 825: 62,1 + 826: 62,0 + 827: 62,-1 + 828: 62,-2 + 829: 62,-3 + 830: 62,-4 + 848: 66,2 - node: color: '#FFFFFFFF' id: WarnLineS decals: - 568: -17,-31 - 569: -17,-30 - 770: -15,18 - 771: -15,19 - 772: -15,20 - 773: -15,21 - 830: 59,7 - 831: 59,6 + 550: -17,-31 + 551: -17,-30 + 752: -15,18 + 753: -15,19 + 754: -15,20 + 755: -15,21 + 812: 59,7 + 813: 59,6 + 962: -19,-6 - node: color: '#FF0000FF' id: WarnLineW decals: - 849: 62,4 - 850: 63,4 - 851: 63,-1 - 852: 62,-1 - 867: 67,3 + 831: 62,4 + 832: 63,4 + 833: 63,-1 + 834: 62,-1 + 849: 67,3 - node: color: '#FFFFFFFF' id: WarnLineW decals: - 518: 21,24 - 519: 22,24 - 521: 20,24 - 816: -42,-6 + 500: 21,24 + 501: 22,24 + 503: 20,24 + 798: -42,-6 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 458: -40,0 - 459: -40,1 - 460: -40,2 - 461: -40,8 - 462: -40,9 - 463: -40,10 + 440: -40,0 + 441: -40,1 + 442: -40,2 + 443: -40,8 + 444: -40,9 + 445: -40,10 - node: color: '#FFFFFFFF' id: WarningLine decals: - 271: 46,7 - 272: 47,7 - 273: 48,7 - 274: 49,7 - 275: 50,7 - 304: 8,7 - 308: 7,7 - 309: 9,7 + 253: 46,7 + 254: 47,7 + 255: 48,7 + 256: 49,7 + 257: 50,7 + 286: 8,7 + 290: 7,7 + 291: 9,7 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 121: 53,1 - 122: 53,2 - 123: 53,3 - 276: 60,0 - 277: 60,1 - 278: 60,2 - 279: 60,3 - 280: 60,4 - 390: -1,16 - 391: -1,17 - 392: -1,18 + 113: 53,1 + 114: 53,2 + 115: 53,3 + 258: 60,0 + 259: 60,1 + 260: 60,2 + 261: 60,3 + 262: 60,4 + 372: -1,16 + 373: -1,17 + 374: -1,18 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLine decals: - 305: 8,11 + 287: 8,11 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCorner decals: - 464: -40,3 + 446: -40,3 - node: color: '#FFFFFFFF' id: WarningLineCorner decals: - 311: 6,7 + 293: 6,7 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLineCorner decals: - 306: 9,11 + 288: 9,11 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 465: -40,7 + 447: -40,7 - node: color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 310: 10,7 + 292: 10,7 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 307: 7,11 + 289: 7,11 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNe + decals: + 852: 0,1 + 1081: -18,-11 + 1095: 0,14 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinCornerNe decals: - 643: -4,-6 + 625: -4,-6 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerNw + decals: + 851: -10,1 + 1080: -21,-11 + 1094: -4,14 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSe + decals: + 853: 0,-7 + 1082: -18,-13 + 1098: 0,10 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinCornerSw + decals: + 855: -10,-2 + 1083: -21,-13 + 1093: -4,10 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinCornerSw decals: - 768: -37,19 + 750: -37,19 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinInnerSw + decals: + 854: -8,-2 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineE + decals: + 867: 0,0 + 868: 0,-1 + 869: 0,-2 + 870: 0,-3 + 871: 0,-5 + 872: 0,-4 + 873: 0,-6 + 1084: -18,-12 + 1101: 0,11 + 1102: 0,12 + 1103: 0,13 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 642: -4,-7 - 780: 27,10 - 781: 27,9 - 782: 27,8 + 624: -4,-7 + 762: 27,10 + 763: 27,9 + 764: 27,8 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 726: 20,-12 + 708: 20,-12 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineN + decals: + 858: -8,1 + 859: -9,1 + 860: -7,1 + 861: -6,1 + 862: -5,1 + 863: -4,1 + 864: -3,1 + 865: -2,1 + 866: -1,1 + 1085: -19,-11 + 1086: -20,-11 + 1104: -1,14 + 1105: -2,14 + 1106: -3,14 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinLineN decals: - 638: -8,-6 - 639: -7,-6 - 640: -6,-6 - 641: -5,-6 + 620: -8,-6 + 621: -7,-6 + 622: -6,-6 + 623: -5,-6 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS decals: - 803: 37,0 - 804: 38,0 - 805: 39,0 - 806: 40,0 + 785: 37,0 + 786: 38,0 + 787: 39,0 + 788: 40,0 + 874: -1,-7 + 875: -2,-7 + 876: -3,-7 + 880: -9,-2 + 1088: -20,-13 + 1089: -19,-13 + 1099: -1,10 + 1100: -2,10 + 1107: -3,10 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinLineS decals: - 769: -36,19 + 751: -36,19 + - node: + color: '#FFFFFFFF' + id: WoodTrimThinLineW + decals: + 856: -10,-1 + 857: -10,0 + 877: -8,-5 + 878: -8,-4 + 879: -8,-3 + 1078: -14,-12 + 1079: -14,-11 + 1087: -21,-12 + 1090: -4,13 + 1091: -4,12 + 1092: -4,11 - node: color: '#FFFF00FF' id: radiation decals: - 820: 59,7 + 802: 59,7 - type: OccluderTree - type: SpreaderGrid - type: Shuttle @@ -3433,51 +3390,12 @@ entities: - type: MetaData - type: Transform - type: Map - mapPaused: True - type: PhysicsMap - type: GridTree - type: MovedGrids - type: Broadphase - type: OccluderTree - type: LoadedMap - - uid: 12098 - components: - - type: MetaData - name: grid - - type: Transform - parent: 658 - - type: MapGrid - chunks: - 3,0: - ind: 3,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA - version: 6 - - type: Broadphase - - type: Physics - bodyStatus: InAir - angularDamping: 0.05 - linearDamping: 0.05 - fixedRotation: False - bodyType: Dynamic - - type: Fixtures - fixtures: {} - - type: OccluderTree - - type: SpreaderGrid - - type: Shuttle - - type: GridPathfinding - - type: Gravity - gravityShakeSound: !type:SoundPathSpecifier - path: /Audio/Effects/alert.ogg - - type: DecalGrid - chunkCollection: - version: 2 - nodes: [] - - type: GridAtmosphere - version: 2 - data: - chunkSize: 4 - - type: GasTileOverlay - - type: NavMap - proto: AcousticGuitarInstrument entities: - uid: 3146 @@ -3490,8 +3408,41 @@ entities: - type: Transform pos: -11.470391,11.486723 parent: 31 +- proto: ActionToggleLight + entities: + - uid: 2470 + components: + - type: Transform + parent: 2469 + - type: InstantAction + container: 2469 + - uid: 7058 + components: + - type: Transform + parent: 7042 + - type: InstantAction + container: 7042 - proto: AirAlarm entities: + - uid: 3855 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,14.5 + parent: 31 + - type: DeviceList + devices: + - 526 + - 7853 + - 7855 + - 4828 + - 533 + - 7041 + - 9570 + - 8817 + - 6463 + - 475 + - 494 - uid: 5107 components: - type: Transform @@ -3510,9 +3461,7 @@ entities: - 10929 - 10908 - 10961 - - 10909 - 10960 - - 8384 - uid: 6582 components: - type: Transform @@ -3536,6 +3485,28 @@ entities: - 4267 - 9965 - 9966 + - uid: 7152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,31.5 + parent: 31 + - type: DeviceList + devices: + - 6321 + - 6125 + - 6318 + - 6126 + - 2268 + - 6697 + - 7129 + - 6874 + - 6232 + - 7121 + - 6299 + - 7131 + - 6300 + - 7143 - uid: 7345 components: - type: Transform @@ -3574,7 +3545,6 @@ entities: - type: DeviceList devices: - 9972 - - 9971 - 9970 - 995 - 179 @@ -3589,20 +3559,18 @@ entities: parent: 31 - type: DeviceList devices: - - 3928 - - 3934 - - 3935 - 3969 - 3970 - 9972 - - 9971 - 9970 - - 9994 - - 9995 - 6119 - 6120 - 6117 - 6118 + - 11297 + - 10159 + - 11323 + - 11334 - uid: 9164 components: - type: Transform @@ -3629,7 +3597,6 @@ entities: - 6413 - 10008 - 9958 - - 9959 - 9960 - uid: 9976 components: @@ -3657,7 +3624,6 @@ entities: - 6276 - 9964 - 9958 - - 9959 - 9960 - 9961 - uid: 9978 @@ -3671,7 +3637,6 @@ entities: - 4030 - 4026 - 8856 - - 8858 - 8857 - 5476 - 5477 @@ -3679,6 +3644,7 @@ entities: - 5474 - 8876 - 8875 + - 6002 - uid: 9979 components: - type: Transform @@ -3693,7 +3659,6 @@ entities: - 1027 - 1028 - 8885 - - 8884 - 8883 - 3959 - 3944 @@ -3702,7 +3667,6 @@ entities: - 3987 - 3988 - 9988 - - 9989 - 9990 - 8874 - 8873 @@ -3712,7 +3676,7 @@ entities: - 5332 - 5543 - 5544 - - 7460 + - 3305 - uid: 9983 components: - type: Transform @@ -3733,7 +3697,6 @@ entities: - type: DeviceList devices: - 9988 - - 9989 - 9990 - 1029 - 100 @@ -3764,36 +3727,12 @@ entities: parent: 31 - type: DeviceList devices: - - 8794 + - 4860 + - 6042 - 8795 - - 5765 - - 6033 - - 6032 + - 6024 - 4701 - - 4185 - - 10000 - - 9999 - - uid: 10001 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,27.5 - parent: 31 - - type: DeviceList - devices: - - 8816 - - 8813 - - 8810 - - 8814 - - 8815 - - 9969 - - 5870 - - 5871 - - 5868 - - 5865 - - 5869 - - 5864 - - 716 + - 6032 - uid: 10003 components: - type: Transform @@ -3804,7 +3743,6 @@ entities: devices: - 8885 - 8883 - - 8884 - 5115 - 5849 - 5848 @@ -3886,16 +3824,11 @@ entities: parent: 31 - type: DeviceList devices: - - 7042 - - 5545 - - 5546 - 5542 - 5541 - 4529 - 4528 - 4525 - - 7041 - - 7040 - uid: 10238 components: - type: Transform @@ -3910,9 +3843,9 @@ entities: - 10315 - 10314 - 10313 - - 10240 - - 10241 - - 10242 + - 10159 + - 4006 + - 11719 - uid: 10371 components: - type: Transform @@ -3947,7 +3880,6 @@ entities: - type: DeviceList devices: - 10318 - - 10317 - 10316 - 10431 - 10313 @@ -3980,12 +3912,21 @@ entities: devices: - 11570 - 11569 - - 11596 - - 11597 - 11572 - 11571 - 11608 - 11609 + - uid: 11863 + components: + - type: Transform + pos: 49.5,-20.5 + parent: 31 + - type: DeviceList + devices: + - 6961 + - 8248 + - 12076 + - 2058 - proto: AirCanister entities: - uid: 1279 @@ -4010,26 +3951,10 @@ entities: parent: 31 - proto: Airlock entities: - - uid: 4082 - components: - - type: MetaData - name: Dorms 1 - - type: Transform - pos: -26.5,0.5 - parent: 31 - - uid: 4083 - components: - - type: MetaData - name: Dorms 2 - - type: Transform - pos: -26.5,-2.5 - parent: 31 - - uid: 4084 + - uid: 33 components: - - type: MetaData - name: Dorms 3 - type: Transform - pos: -26.5,-5.5 + pos: -28.5,0.5 parent: 31 - proto: AirlockArmoryGlassLocked entities: @@ -4053,6 +3978,11 @@ entities: parent: 31 - proto: AirlockBarLocked entities: + - uid: 1529 + components: + - type: Transform + pos: -13.5,-7.5 + parent: 31 - uid: 2272 components: - type: Transform @@ -4160,10 +4090,28 @@ entities: - type: Transform pos: 1.5,24.5 parent: 31 - - uid: 8832 + - uid: 3247 components: - type: Transform - pos: 3.5,26.5 + rot: 3.141592653589793 rad + pos: -3.5,30.5 + parent: 31 + - uid: 4308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,32.5 + parent: 31 + - uid: 5120 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,32.5 + parent: 31 + - uid: 8519 + components: + - type: Transform + pos: 3.5,27.5 parent: 31 - uid: 8833 components: @@ -4172,6 +4120,18 @@ entities: - type: Transform pos: 3.5,22.5 parent: 31 + - type: Door + secondsUntilStateChange: -17127.416 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True + - uid: 9869 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,28.5 + parent: 31 - proto: AirlockCommandLocked entities: - uid: 15 @@ -4195,20 +4155,19 @@ entities: - type: DeviceLinkSink links: - 276 -- proto: AirlockCorpsmanGlassLocked - entities: - - uid: 33 + - uid: 694 components: - type: Transform - pos: 0.5,11.5 + pos: 53.5,-24.5 parent: 31 -- proto: AirlockDetectiveLocked - entities: - - uid: 1338 + - uid: 3998 components: - type: Transform - pos: -20.5,16.5 + rot: 1.5707963267948966 rad + pos: 49.5,-28.5 parent: 31 +- proto: AirlockDetectiveLocked + entities: - uid: 1889 components: - type: Transform @@ -4240,11 +4199,6 @@ entities: - type: Transform pos: 36.5,3.5 parent: 31 - - uid: 3981 - components: - - type: Transform - pos: 36.5,4.5 - parent: 31 - uid: 4011 components: - type: Transform @@ -4269,6 +4223,11 @@ entities: parent: 31 - proto: AirlockEngineeringLocked entities: + - uid: 120 + components: + - type: Transform + pos: -31.5,-26.5 + parent: 31 - uid: 649 components: - type: MetaData @@ -4276,10 +4235,13 @@ entities: - type: Transform pos: 49.5,-1.5 parent: 31 - - uid: 1178 + - uid: 1123 components: + - type: MetaData + name: Substation Room - type: Transform - pos: 12.5,20.5 + rot: -1.5707963267948966 rad + pos: -20.5,13.5 parent: 31 - uid: 2010 components: @@ -4294,15 +4256,27 @@ entities: rot: 3.141592653589793 rad pos: -32.5,8.5 parent: 31 - - uid: 3423 + - uid: 2343 components: - type: Transform - pos: -11.5,-34.5 + rot: 3.141592653589793 rad + pos: 70.5,4.5 parent: 31 - - uid: 3852 + - uid: 2356 components: - type: Transform - pos: -17.5,16.5 + pos: -29.5,-10.5 + parent: 31 + - uid: 2725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,2.5 + parent: 31 + - uid: 3423 + components: + - type: Transform + pos: -11.5,-34.5 parent: 31 - uid: 4172 components: @@ -4352,37 +4326,49 @@ entities: - type: Transform pos: 41.5,9.5 parent: 31 - - uid: 6922 + - uid: 7017 components: - type: Transform rot: 3.141592653589793 rad - pos: 70.5,4.5 + pos: 45.5,-24.5 parent: 31 - - uid: 9592 + - uid: 7052 components: - type: Transform - pos: 24.5,-13.5 + rot: 3.141592653589793 rad + pos: 50.5,-20.5 parent: 31 - - uid: 9986 + - uid: 7060 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-11.5 + rot: 3.141592653589793 rad + pos: 48.5,-20.5 parent: 31 -- proto: AirlockExternal - entities: - - uid: 1758 + - uid: 8276 components: - type: Transform - pos: -21.5,-29.5 + rot: 3.141592653589793 rad + pos: 69.5,2.5 parent: 31 - - uid: 8525 + - uid: 8733 components: - type: Transform - pos: -31.5,-26.5 + rot: -1.5707963267948966 rad + pos: 13.5,20.5 + parent: 31 + - uid: 9592 + components: + - type: Transform + pos: 24.5,-13.5 parent: 31 - proto: AirlockExternalEngineeringLocked entities: + - uid: 7138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-17.5 + parent: 31 - uid: 11776 components: - type: Transform @@ -4554,6 +4540,32 @@ entities: linkedPorts: 9974: - DoorStatus: DoorBolt + - uid: 2774 + components: + - type: Transform + pos: -37.5,-31.5 + parent: 31 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 4823 + - type: DeviceLinkSource + linkedPorts: + 4823: + - DoorStatus: Close + - uid: 4823 + components: + - type: Transform + pos: -34.5,-32.5 + parent: 31 + - type: DeviceLinkSink + invokeCounter: 1 + links: + - 2774 + - type: DeviceLinkSource + linkedPorts: + 2774: + - DoorStatus: Close - uid: 9974 components: - type: Transform @@ -4671,6 +4683,24 @@ entities: parent: 31 - proto: AirlockExternalGlassShuttleLocked entities: + - uid: 4289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,34.5 + parent: 31 + - uid: 4934 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,35.5 + parent: 31 + - uid: 6755 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,36.5 + parent: 31 - uid: 6995 components: - type: Transform @@ -4685,18 +4715,24 @@ entities: parent: 31 - proto: AirlockFreezer entities: - - uid: 599 + - uid: 820 components: - type: Transform - pos: -14.5,-4.5 + pos: -12.5,-2.5 parent: 31 - - uid: 820 + - uid: 8925 components: - type: Transform - pos: -12.5,-2.5 + pos: -14.5,-5.5 parent: 31 - proto: AirlockGlass entities: + - uid: 208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -37.5,-2.5 + parent: 31 - uid: 588 components: - type: MetaData @@ -4711,41 +4747,27 @@ entities: - type: Transform pos: -25.5,10.5 parent: 31 - - uid: 660 - components: - - type: Transform - pos: -35.5,-2.5 - parent: 31 - - uid: 1767 - components: - - type: Transform - pos: 39.5,-24.5 - parent: 31 - - uid: 1808 + - uid: 710 components: - type: Transform - pos: 39.5,-23.5 + rot: -1.5707963267948966 rad + pos: -36.5,-2.5 parent: 31 - - uid: 2278 + - uid: 2032 components: - type: Transform - pos: -22.5,-10.5 + pos: -26.5,-8.5 parent: 31 - - uid: 2331 + - uid: 2147 components: - type: Transform - pos: 0.5,-15.5 + pos: -24.5,-8.5 parent: 31 - uid: 3929 components: - type: Transform pos: -21.5,5.5 parent: 31 - - uid: 3930 - components: - - type: Transform - pos: -21.5,4.5 - parent: 31 - uid: 3933 components: - type: Transform @@ -4756,21 +4778,6 @@ entities: - type: Transform pos: -21.5,3.5 parent: 31 - - uid: 3974 - components: - - type: Transform - pos: -23.5,1.5 - parent: 31 - - uid: 3997 - components: - - type: Transform - pos: -24.5,1.5 - parent: 31 - - uid: 3999 - components: - - type: Transform - pos: 3.5,15.5 - parent: 31 - uid: 4000 components: - type: Transform @@ -4786,25 +4793,10 @@ entities: - type: Transform pos: 2.5,-12.5 parent: 31 - - uid: 4018 - components: - - type: Transform - pos: 3.5,-12.5 - parent: 31 - - uid: 4683 - components: - - type: Transform - pos: 39.5,-25.5 - parent: 31 - - uid: 4820 - components: - - type: Transform - pos: -23.5,-10.5 - parent: 31 - - uid: 4823 + - uid: 4577 components: - type: Transform - pos: -24.5,-10.5 + pos: -11.5,-13.5 parent: 31 - uid: 5105 components: @@ -4816,50 +4808,21 @@ entities: - type: Transform pos: 0.5,-16.5 parent: 31 - - uid: 7036 - components: - - type: Transform - pos: 32.5,-18.5 - parent: 31 - - uid: 7037 - components: - - type: Transform - pos: 33.5,-18.5 - parent: 31 - - uid: 8200 - components: - - type: Transform - pos: 43.5,-25.5 - parent: 31 - - uid: 8201 - components: - - type: Transform - pos: 43.5,-24.5 - parent: 31 - - uid: 8202 + - uid: 8280 components: - type: Transform - pos: 43.5,-23.5 + pos: -3.5,-13.5 parent: 31 - uid: 8719 components: - type: Transform pos: -33.5,-30.5 parent: 31 - - uid: 8910 - components: - - type: Transform - pos: -26.5,-8.5 - parent: 31 - - uid: 9180 - components: - - type: Transform - pos: -37.5,-2.5 - parent: 31 - - uid: 9181 + - uid: 9989 components: - type: Transform - pos: -36.5,-2.5 + rot: -1.5707963267948966 rad + pos: -28.5,-4.5 parent: 31 - uid: 11398 components: @@ -4896,10 +4859,15 @@ entities: parent: 31 - proto: AirlockJanitorLocked entities: - - uid: 2709 + - uid: 4631 components: - type: Transform - pos: -21.5,-12.5 + pos: -22.5,-8.5 + parent: 31 + - uid: 7973 + components: + - type: Transform + pos: -19.5,-5.5 parent: 31 - proto: AirlockKitchenGlassLocked entities: @@ -4923,11 +4891,6 @@ entities: - type: Transform pos: 23.5,-24.5 parent: 31 - - uid: 4858 - components: - - type: Transform - pos: -14.5,-9.5 - parent: 31 - uid: 4948 components: - type: Transform @@ -4950,13 +4913,6 @@ entities: - type: Transform pos: 29.5,12.5 parent: 31 -- proto: AirlockMaintBarLocked - entities: - - uid: 615 - components: - - type: Transform - pos: -12.5,-8.5 - parent: 31 - proto: AirlockMaintCargoLocked entities: - uid: 564 @@ -4966,6 +4922,12 @@ entities: parent: 31 - proto: AirlockMaintCommandLocked entities: + - uid: 37 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,26.5 + parent: 31 - uid: 154 components: - type: Transform @@ -4981,13 +4943,9 @@ entities: - uid: 600 components: - type: Transform + rot: -1.5707963267948966 rad pos: -32.5,2.5 parent: 31 - - uid: 614 - components: - - type: Transform - pos: -34.5,-6.5 - parent: 31 - uid: 627 components: - type: Transform @@ -5003,12 +4961,22 @@ entities: - type: Transform pos: -26.5,-16.5 parent: 31 + - uid: 2305 + components: + - type: Transform + pos: -9.5,-12.5 + parent: 31 - uid: 2354 components: - type: Transform rot: 3.141592653589793 rad pos: -32.5,-12.5 parent: 31 + - uid: 4104 + components: + - type: Transform + pos: -34.5,-5.5 + parent: 31 - uid: 5731 components: - type: Transform @@ -5026,12 +4994,6 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-25.5 parent: 31 - - uid: 9220 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-13.5 - parent: 31 - uid: 9402 components: - type: Transform @@ -5054,11 +5016,6 @@ entities: - type: Transform pos: 10.5,-39.5 parent: 31 - - uid: 9933 - components: - - type: Transform - pos: -4.5,26.5 - parent: 31 - proto: AirlockMaintEngiLocked entities: - uid: 2230 @@ -5078,20 +5035,6 @@ entities: - type: Transform pos: 11.5,19.5 parent: 31 -- proto: AirlockMaintHydroLocked - entities: - - uid: 524 - components: - - type: Transform - pos: -16.5,-3.5 - parent: 31 -- proto: AirlockMaintJanitorLocked - entities: - - uid: 3137 - components: - - type: Transform - pos: -16.5,-12.5 - parent: 31 - proto: AirlockMaintLocked entities: - uid: 543 @@ -5119,11 +5062,6 @@ entities: - type: Transform pos: -33.5,14.5 parent: 31 - - uid: 2454 - components: - - type: Transform - pos: -31.5,-8.5 - parent: 31 - uid: 4170 components: - type: Transform @@ -5134,15 +5072,10 @@ entities: - type: Transform pos: 34.5,-9.5 parent: 31 - - uid: 6166 - components: - - type: Transform - pos: -20.5,19.5 - parent: 31 - - uid: 6452 + - uid: 5551 components: - type: Transform - pos: -25.5,15.5 + pos: -31.5,-7.5 parent: 31 - uid: 7378 components: @@ -5157,11 +5090,10 @@ entities: parent: 31 - proto: AirlockMaintMedLocked entities: - - uid: 9516 + - uid: 3365 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-18.5 + pos: 14.5,-18.5 parent: 31 - proto: AirlockMaintRnDLocked entities: @@ -5175,11 +5107,6 @@ entities: - type: Transform pos: -20.5,-28.5 parent: 31 - - uid: 8448 - components: - - type: Transform - pos: -18.5,-27.5 - parent: 31 - proto: AirlockMaintSalvageLocked entities: - uid: 58 @@ -5187,20 +5114,6 @@ entities: - type: Transform pos: 26.5,14.5 parent: 31 -- proto: AirlockMaintSecLocked - entities: - - uid: 9132 - components: - - type: Transform - pos: -16.5,14.5 - parent: 31 -- proto: AirlockMaintTheatreLocked - entities: - - uid: 525 - components: - - type: Transform - pos: -16.5,-7.5 - parent: 31 - proto: AirlockMantisGlassLocked entities: - uid: 1387 @@ -5251,11 +5164,6 @@ entities: - type: Transform pos: 18.5,-14.5 parent: 31 - - uid: 4906 - components: - - type: Transform - pos: 11.5,-14.5 - parent: 31 - uid: 7278 components: - type: Transform @@ -5268,6 +5176,11 @@ entities: parent: 31 - proto: AirlockMedicalLocked entities: + - uid: 3367 + components: + - type: Transform + pos: 11.5,-14.5 + parent: 31 - uid: 4146 components: - type: MetaData @@ -5313,27 +5226,25 @@ entities: parent: 31 - proto: AirlockScienceGlass entities: - - uid: 54 + - uid: 3843 components: - type: Transform - pos: -27.5,-22.5 + pos: -23.5,-17.5 parent: 31 - - uid: 72 + - uid: 3848 components: - type: Transform - pos: -27.5,-21.5 + pos: -22.5,-17.5 parent: 31 - - uid: 2190 + - uid: 3911 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-17.5 + pos: -27.5,-21.5 parent: 31 - - uid: 2223 + - uid: 3916 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-17.5 + pos: -27.5,-22.5 parent: 31 - uid: 8096 components: @@ -5362,6 +5273,11 @@ entities: - type: Transform pos: -4.5,-27.5 parent: 31 + - uid: 3846 + components: + - type: Transform + pos: -18.5,-22.5 + parent: 31 - uid: 3952 components: - type: Transform @@ -5372,14 +5288,22 @@ entities: - type: Transform pos: 1.5,-28.5 parent: 31 - - uid: 9374 +- proto: AirlockScienceLocked + entities: + - uid: 7786 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,-22.5 + pos: -18.5,-27.5 parent: 31 - proto: AirlockSecurityGlassLocked entities: + - uid: 243 + components: + - type: MetaData + name: Perma + - type: Transform + pos: -14.5,10.5 + parent: 31 - uid: 1203 components: - type: Transform @@ -5406,21 +5330,8 @@ entities: - type: DeviceLinkSink links: - 9951 - - uid: 7786 - components: - - type: MetaData - name: Perma - - type: Transform - pos: -14.5,10.5 - parent: 31 - proto: AirlockSecurityLawyerGlassLocked entities: - - uid: 30 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,9.5 - parent: 31 - uid: 574 components: - type: Transform @@ -5441,26 +5352,39 @@ entities: - type: Transform pos: -4.5,6.5 parent: 31 -- proto: AirlockShuttle +- proto: AirlockSecurityLocked entities: - - uid: 12463 + - uid: 940 components: - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,28.5 + rot: 1.5707963267948966 rad + pos: -16.5,14.5 parent: 31 - - uid: 12525 +- proto: AirlockServiceLocked + entities: + - uid: 7593 components: - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,28.5 + rot: -1.5707963267948966 rad + pos: -16.5,-3.5 parent: 31 - proto: AirlockTheatreLocked entities: - - uid: 7337 + - uid: 1136 components: - type: Transform - pos: -20.5,-8.5 + rot: -1.5707963267948966 rad + pos: -16.5,-12.5 + parent: 31 + - uid: 6975 + components: + - type: Transform + pos: -21.5,-12.5 + parent: 31 + - uid: 11847 + components: + - type: Transform + pos: -18.5,-9.5 parent: 31 - proto: AirSensor entities: @@ -5504,12 +5428,6 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,-3.5 parent: 31 - - uid: 10042 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,-11.5 - parent: 31 - uid: 10239 components: - type: Transform @@ -5564,12 +5482,21 @@ entities: - type: Transform pos: 11.5,-8.5 parent: 31 -- proto: AltarDruid + - uid: 11334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-2.5 + parent: 31 + - type: DeviceNetwork + deviceLists: + - 9042 +- proto: AloeSeeds entities: - - uid: 4586 + - uid: 10442 components: - type: Transform - pos: 49.5,-25.5 + pos: -17.725698,1.7237155 parent: 31 - proto: AltarSpawner entities: @@ -5578,6 +5505,14 @@ entities: - type: Transform pos: -20.5,-20.5 parent: 31 +- proto: AlwaysPoweredLightSodium + entities: + - uid: 1671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,24.5 + parent: 31 - proto: AmmoniaCanister entities: - uid: 6707 @@ -5590,6 +5525,11 @@ entities: angularDamping: 0 linearDamping: 0 bodyType: Static + - uid: 8730 + components: + - type: Transform + pos: 60.5,9.5 + parent: 31 - uid: 12258 components: - type: Transform @@ -5680,13 +5620,13 @@ entities: rot: -1.5707963267948966 rad pos: 37.5,10.5 parent: 31 - - uid: 2041 + - uid: 1489 components: - type: MetaData - name: Dorms APC + name: North Maints APC - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-4.5 + rot: 3.141592653589793 rad + pos: -21.5,13.5 parent: 31 - uid: 2154 components: @@ -5818,13 +5758,6 @@ entities: parent: 31 - type: Battery startingCharge: 11999.217 - - uid: 4085 - components: - - type: MetaData - name: North Maints APC - - type: Transform - pos: -20.5,15.5 - parent: 31 - uid: 4261 components: - type: MetaData @@ -5847,14 +5780,6 @@ entities: - type: Transform pos: 7.5,12.5 parent: 31 - - uid: 5527 - components: - - type: MetaData - name: Botany APC - - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-3.5 - parent: 31 - uid: 5785 components: - type: MetaData @@ -5893,6 +5818,14 @@ entities: - type: Transform pos: -11.5,-17.5 parent: 31 + - uid: 7972 + components: + - type: MetaData + name: Dorms APC + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-2.5 + parent: 31 - uid: 8439 components: - type: MetaData @@ -5908,6 +5841,12 @@ entities: - type: Transform pos: -32.5,-25.5 parent: 31 + - uid: 8911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-25.5 + parent: 31 - uid: 10268 components: - type: MetaData @@ -5971,6 +5910,11 @@ entities: - type: Transform pos: -29.406065,9.491461 parent: 31 + - uid: 679 + components: + - type: Transform + pos: 51.32734,-29.171757 + parent: 31 - uid: 7872 components: - type: Transform @@ -5981,6 +5925,11 @@ entities: - type: Transform pos: 29.46184,-1.6702437 parent: 31 + - uid: 9219 + components: + - type: Transform + pos: 51.806507,-29.171757 + parent: 31 - proto: AppraisalTool entities: - uid: 7119 @@ -6023,11 +5972,22 @@ entities: parent: 31 - proto: AtmosDeviceFanTiny entities: - - uid: 950 + - uid: 207 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-4.5 + pos: -14.5,-5.5 + parent: 31 + - uid: 6767 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,35.5 + parent: 31 + - uid: 7480 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,34.5 parent: 31 - uid: 7566 components: @@ -6047,6 +6007,12 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-2.5 parent: 31 + - uid: 9328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,36.5 + parent: 31 - uid: 9923 components: - type: Transform @@ -6291,6 +6257,21 @@ entities: parent: 31 - proto: AtmosFixFreezerMarker entities: + - uid: 4376 + components: + - type: Transform + pos: -14.5,-3.5 + parent: 31 + - uid: 4377 + components: + - type: Transform + pos: -14.5,-4.5 + parent: 31 + - uid: 4618 + components: + - type: Transform + pos: -14.5,-4.5 + parent: 31 - uid: 5895 components: - type: Transform @@ -6341,6 +6322,11 @@ entities: - type: Transform pos: -9.5,-3.5 parent: 31 + - uid: 11308 + components: + - type: Transform + pos: -14.5,-3.5 + parent: 31 - proto: AtmosFixNitrogenMarker entities: - uid: 634 @@ -6426,17 +6412,12 @@ entities: - type: Physics angularDamping: 0 linearDamping: 0 -- proto: BannerNanotrasen +- proto: BanjoInstrument entities: - - uid: 3677 - components: - - type: Transform - pos: 53.5,-28.5 - parent: 31 - - uid: 8995 + - uid: 9995 components: - type: Transform - pos: 53.5,-20.5 + pos: -29.61864,1.6685541 parent: 31 - proto: BannerScience entities: @@ -6450,25 +6431,31 @@ entities: - type: Transform pos: 3.5,-22.5 parent: 31 -- proto: Barricade +- proto: BarberScissors entities: - - uid: 413 + - uid: 6981 components: - type: Transform - pos: -4.5,-11.5 + rot: 3.141592653589793 rad + pos: -6.283682,-11.530836 parent: 31 -- proto: BarricadeBlock +- proto: BarberSignPole entities: - - uid: 769 + - uid: 11813 components: - type: Transform - pos: -12.5,-8.5 + rot: 1.5707963267948966 rad + pos: -4.5,-13.5 parent: 31 - - uid: 3577 +- proto: BarberSignThesnip + entities: + - uid: 2596 components: - type: Transform - pos: -14.5,-9.5 + pos: -3.5,-11.5 parent: 31 +- proto: BarricadeBlock + entities: - uid: 8481 components: - type: Transform @@ -6488,6 +6475,17 @@ entities: parent: 31 - proto: BaseComputer entities: + - uid: 3658 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 24.5,15.5 + parent: 31 + - uid: 7453 + components: + - type: Transform + pos: -0.5,14.5 + parent: 31 - uid: 11453 components: - type: Transform @@ -6518,6 +6516,11 @@ entities: - data: null ReagentId: Leporazine Quantity: 40 + - uid: 10792 + components: + - type: Transform + pos: -16.76883,-1.1648301 + parent: 31 - uid: 10800 components: - type: Transform @@ -6530,31 +6533,21 @@ entities: - type: Transform pos: 29.5,8.5 parent: 31 - - uid: 475 + - uid: 425 components: - type: Transform - pos: -7.5,22.5 + pos: -11.5,7.5 parent: 31 - uid: 704 components: - type: Transform pos: -15.5,8.5 parent: 31 - - uid: 938 - components: - - type: Transform - pos: -3.5,-23.5 - parent: 31 - uid: 1621 components: - type: Transform pos: 41.5,-1.5 parent: 31 - - uid: 1956 - components: - - type: Transform - pos: -12.5,7.5 - parent: 31 - uid: 1997 components: - type: Transform @@ -6580,30 +6573,20 @@ entities: - type: Transform pos: -33.5,18.5 parent: 31 - - uid: 4086 - components: - - type: Transform - pos: -27.5,-1.5 - parent: 31 - - uid: 4087 - components: - - type: Transform - pos: -27.5,1.5 - parent: 31 - - uid: 4088 + - uid: 4150 components: - type: Transform - pos: -27.5,-4.5 + pos: -9.5,7.5 parent: 31 - uid: 7059 components: - type: Transform pos: 32.5,-10.5 parent: 31 - - uid: 7138 + - uid: 8263 components: - type: Transform - pos: -0.5,13.5 + pos: -29.5,-2.5 parent: 31 - uid: 8409 components: @@ -6615,6 +6598,16 @@ entities: - type: Transform pos: -13.5,-37.5 parent: 31 + - uid: 9507 + components: + - type: Transform + pos: -29.5,-1.5 + parent: 31 + - uid: 9542 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 31 - uid: 10533 components: - type: Transform @@ -6630,34 +6623,39 @@ entities: - type: Transform pos: 6.5,-35.5 parent: 31 - - uid: 11051 + - uid: 11157 components: - type: Transform - pos: -23.5,17.5 + pos: -13.5,7.5 parent: 31 - - uid: 11472 +- proto: BedsheetBlack + entities: + - uid: 10042 components: - type: Transform - pos: -0.5,12.5 + rot: -1.5707963267948966 rad + pos: -29.5,-2.5 parent: 31 -- proto: BedsheetBlack - entities: - uid: 10705 components: - type: Transform pos: -24.5,-27.5 parent: 31 -- proto: BedsheetBrigmedic +- proto: BedsheetBlue entities: - - uid: 12101 + - uid: 10141 components: - type: Transform - pos: -0.5,13.5 + rot: -1.5707963267948966 rad + pos: -29.5,-1.5 parent: 31 - - uid: 12102 +- proto: BedsheetBrown + entities: + - uid: 10145 components: - type: Transform - pos: -0.5,12.5 + rot: -1.5707963267948966 rad + pos: -29.5,-0.5 parent: 31 - proto: BedsheetCaptain entities: @@ -6701,14 +6699,6 @@ entities: - type: Transform pos: 10.5,16.5 parent: 31 -- proto: BedsheetHOS - entities: - - uid: 425 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,22.5 - parent: 31 - proto: BedsheetMedical entities: - uid: 7813 @@ -6723,15 +6713,28 @@ entities: parent: 31 - proto: BedsheetOrange entities: - - uid: 1998 + - uid: 1999 components: - type: Transform - pos: -12.5,7.5 + pos: -7.5,7.5 parent: 31 - - uid: 1999 + - uid: 4005 components: - type: Transform - pos: -7.5,7.5 + rot: -1.5707963267948966 rad + pos: -11.5,7.5 + parent: 31 + - uid: 8808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,7.5 + parent: 31 + - uid: 9270 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,7.5 parent: 31 - proto: BedsheetPurple entities: @@ -6749,13 +6752,6 @@ entities: rot: 3.141592653589793 rad pos: 29.5,8.5 parent: 31 -- proto: BedsheetRD - entities: - - uid: 9707 - components: - - type: Transform - pos: -3.5,-23.5 - parent: 31 - proto: BedsheetRed entities: - uid: 9464 @@ -6764,33 +6760,13 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,-37.5 parent: 31 - - uid: 11057 - components: - - type: Transform - pos: -23.5,17.5 - parent: 31 - proto: BedsheetSpawner entities: - - uid: 553 - components: - - type: Transform - pos: -27.5,1.5 - parent: 31 - uid: 1056 components: - type: Transform pos: 32.5,-10.5 parent: 31 - - uid: 3591 - components: - - type: Transform - pos: -27.5,-4.5 - parent: 31 - - uid: 3893 - components: - - type: Transform - pos: -27.5,-1.5 - parent: 31 - uid: 5629 components: - type: Transform @@ -6893,13 +6869,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-27.5 parent: 31 -- proto: BikeHornInstrument - entities: - - uid: 441 - components: - - type: Transform - pos: -19.612082,-6.8995214 - parent: 31 - proto: BiomassReclaimer entities: - uid: 11681 @@ -6941,6 +6910,46 @@ entities: - type: DeviceLinkSink links: - 1084 + - uid: 6090 + components: + - type: Transform + pos: -10.5,34.5 + parent: 31 + - type: DeviceLinkSink + links: + - 6124 + - uid: 6091 + components: + - type: Transform + pos: -10.5,35.5 + parent: 31 + - type: DeviceLinkSink + links: + - 6124 + - uid: 6121 + components: + - type: Transform + pos: -10.5,36.5 + parent: 31 + - type: DeviceLinkSink + links: + - 6124 + - uid: 6122 + components: + - type: Transform + pos: -6.5,32.5 + parent: 31 + - type: DeviceLinkSink + links: + - 6124 + - uid: 6123 + components: + - type: Transform + pos: -5.5,32.5 + parent: 31 + - type: DeviceLinkSink + links: + - 6124 - uid: 6345 components: - type: Transform @@ -6973,15 +6982,6 @@ entities: - type: DeviceLinkSink links: - 10325 - - uid: 8199 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 69.5,2.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - uid: 10095 components: - type: Transform @@ -7006,15 +7006,6 @@ entities: - type: DeviceLinkSink links: - 10218 - - uid: 11027 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 71.5,2.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - uid: 11369 components: - type: Transform @@ -7033,59 +7024,11 @@ entities: - 11371 - proto: BlastDoorOpen entities: - - uid: 3140 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,3.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - - uid: 7297 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,2.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - - uid: 7308 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,4.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - - uid: 11935 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,1.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - - uid: 11936 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,0.5 - parent: 31 - - type: DeviceLinkSink - links: - - 11939 - uid: 11938 components: - type: Transform pos: 70.5,4.5 parent: 31 - - type: DeviceLinkSink - links: - - 11939 - proto: BlockGameArcade entities: - uid: 9569 @@ -7158,11 +7101,6 @@ entities: - type: Transform pos: 12.5,-26.5 parent: 31 - - uid: 957 - components: - - type: Transform - pos: 11.5,-26.5 - parent: 31 - uid: 1037 components: - type: Transform @@ -7173,6 +7111,16 @@ entities: - type: Transform pos: 7.5,-30.5 parent: 31 + - uid: 2468 + components: + - type: Transform + pos: 11.5,-26.5 + parent: 31 + - uid: 11906 + components: + - type: Transform + pos: -3.5,14.5 + parent: 31 - proto: BoozeDispenser entities: - uid: 4180 @@ -7194,6 +7142,25 @@ entities: - type: Transform pos: -2.5,-30.5 parent: 31 + - uid: 4657 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-25.5 + parent: 31 + - uid: 5036 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-23.5 + parent: 31 +- proto: BorgModuleCleaning + entities: + - uid: 4674 + components: + - type: Transform + pos: 55.333996,-24.188694 + parent: 31 - proto: BorgModuleFireExtinguisher entities: - uid: 2856 @@ -7201,15 +7168,21 @@ entities: - type: Transform pos: 0.53372324,-27.321005 parent: 31 +- proto: BorgModulePka + entities: + - uid: 8230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.47308,-24.626493 + parent: 31 - proto: BoxBeanbag entities: - - uid: 2222 + - uid: 1064 components: - type: Transform - pos: -10.5,-6.5 + pos: -11.666326,-6.547551 parent: 31 - - type: BallisticAmmoProvider - unspawnedCount: 12 - uid: 11280 components: - type: Transform @@ -7283,12 +7256,6 @@ entities: parent: 31 - proto: BoxFolderBlack entities: - - uid: 2851 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.395054,13.6322155 - parent: 31 - uid: 4167 components: - type: Transform @@ -7307,12 +7274,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.356403,-20.931307 parent: 31 - - uid: 7232 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.671114,-5.542589 - parent: 31 - uid: 9048 components: - type: Transform @@ -7326,24 +7287,23 @@ entities: parent: 31 - proto: BoxFolderBlue entities: - - uid: 8742 + - uid: 9047 components: - - type: MetaData - name: lizard secrets - type: Transform - pos: -35.410393,-24.380575 + pos: 7.4773426,19.456753 parent: 31 - - type: ContainerContainer - containers: - storagebase: !type:Container - showEnts: False - occludes: True - ents: - - 8743 - - uid: 9047 +- proto: BoxFolderClipboard + entities: + - uid: 499 components: - type: Transform - pos: 7.4773426,19.456753 + rot: 1.5707963267948966 rad + pos: -5.369866,14.360475 + parent: 31 + - uid: 4630 + components: + - type: Transform + pos: -1.6012349,14.621384 parent: 31 - proto: BoxFolderGrey entities: @@ -7364,26 +7324,41 @@ entities: parent: 31 - proto: BoxFolderRed entities: - - uid: 7329 + - uid: 2495 components: - type: Transform - pos: 12.104875,-31.361996 + pos: -6.5519066,36.676613 parent: 31 - - uid: 8801 + - type: Storage + storedItems: + 2501: + position: 0,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 2501 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 7329 components: - type: Transform - pos: 9.497662,30.598364 + pos: 12.104875,-31.361996 parent: 31 - uid: 9046 components: - type: Transform pos: 7.2742176,19.456753 parent: 31 - - uid: 10804 + - uid: 9279 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.660394,7.554576 + rot: 1.5707963267948966 rad + pos: -3.61637,10.616192 parent: 31 - proto: BoxFolderWhite entities: @@ -7417,10 +7392,10 @@ entities: parent: 31 - proto: BoxHandcuff entities: - - uid: 9836 + - uid: 11779 components: - type: Transform - pos: -4.276994,14.694162 + pos: -3.3948944,11.522232 parent: 31 - proto: BoxLatexGloves entities: @@ -7469,13 +7444,11 @@ entities: parent: 31 - proto: BoxShotgunFlare entities: - - uid: 2219 + - uid: 4669 components: - type: Transform - pos: -10.5,-6.5 + pos: -11.775782,-6.360051 parent: 31 - - type: BallisticAmmoProvider - unspawnedCount: 12 - proto: BoxSterileMask entities: - uid: 680 @@ -7485,10 +7458,10 @@ entities: parent: 31 - proto: BoxZiptie entities: - - uid: 7737 + - uid: 11721 components: - type: Transform - pos: -4.6902046,14.635165 + pos: -3.555968,11.824245 parent: 31 - proto: BrbSign entities: @@ -7497,6 +7470,13 @@ entities: - type: Transform pos: 7.4759226,20.405302 parent: 31 +- proto: BriefcaseBrown + entities: + - uid: 7802 + components: + - type: Transform + pos: -4.4147854,-11.857406 + parent: 31 - proto: BrigTimer entities: - uid: 9951 @@ -7525,14 +7505,6 @@ entities: - Start: Close - Timer: AutoClose - Timer: Open -- proto: BrokenBottle - entities: - - uid: 10591 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.286806,-11.665175 - parent: 31 - proto: Brutepack entities: - uid: 2191 @@ -7542,20 +7514,20 @@ entities: parent: 31 - proto: Bucket entities: - - uid: 4129 + - uid: 5631 components: - type: Transform - pos: -19.764086,1.4415555 + pos: -18.884306,9.451485 parent: 31 - - uid: 5631 + - uid: 8284 components: - type: Transform - pos: -18.884306,9.451485 + pos: -20.232843,-4.3404136 parent: 31 - - uid: 8955 + - uid: 10476 components: - type: Transform - pos: -18.329012,-10.212495 + pos: -22.2306,-0.49714994 parent: 31 - uid: 10647 components: @@ -7611,6 +7583,11 @@ entities: - type: Transform pos: -13.5,10.5 parent: 31 + - uid: 30 + components: + - type: Transform + pos: -6.5,30.5 + parent: 31 - uid: 35 components: - type: Transform @@ -7636,6 +7613,11 @@ entities: - type: Transform pos: 29.5,12.5 parent: 31 + - uid: 148 + components: + - type: Transform + pos: -33.5,-32.5 + parent: 31 - uid: 164 components: - type: Transform @@ -7671,26 +7653,6 @@ entities: - type: Transform pos: -36.5,17.5 parent: 31 - - uid: 204 - components: - - type: Transform - pos: 53.5,-28.5 - parent: 31 - - uid: 207 - components: - - type: Transform - pos: 45.5,-28.5 - parent: 31 - - uid: 208 - components: - - type: Transform - pos: 45.5,-20.5 - parent: 31 - - uid: 209 - components: - - type: Transform - pos: 53.5,-20.5 - parent: 31 - uid: 218 components: - type: Transform @@ -7761,6 +7723,11 @@ entities: - type: Transform pos: -9.5,-19.5 parent: 31 + - uid: 347 + components: + - type: Transform + pos: -32.5,-32.5 + parent: 31 - uid: 397 components: - type: Transform @@ -7776,6 +7743,11 @@ entities: - type: Transform pos: -23.5,-13.5 parent: 31 + - uid: 528 + components: + - type: Transform + pos: -40.5,-28.5 + parent: 31 - uid: 531 components: - type: Transform @@ -7791,10 +7763,10 @@ entities: - type: Transform pos: 27.5,1.5 parent: 31 - - uid: 563 + - uid: 553 components: - type: Transform - pos: 31.5,24.5 + pos: -38.5,-32.5 parent: 31 - uid: 569 components: @@ -7806,6 +7778,11 @@ entities: - type: Transform pos: 31.5,20.5 parent: 31 + - uid: 582 + components: + - type: Transform + pos: -36.5,-31.5 + parent: 31 - uid: 594 components: - type: Transform @@ -7816,6 +7793,16 @@ entities: - type: Transform pos: -4.5,4.5 parent: 31 + - uid: 614 + components: + - type: Transform + pos: -32.5,-37.5 + parent: 31 + - uid: 619 + components: + - type: Transform + pos: -36.5,-34.5 + parent: 31 - uid: 645 components: - type: Transform @@ -7826,11 +7813,6 @@ entities: - type: Transform pos: 16.5,15.5 parent: 31 - - uid: 650 - components: - - type: Transform - pos: -2.5,12.5 - parent: 31 - uid: 652 components: - type: Transform @@ -7851,6 +7833,16 @@ entities: - type: Transform pos: -5.5,-31.5 parent: 31 + - uid: 713 + components: + - type: Transform + pos: 44.5,-24.5 + parent: 31 + - uid: 716 + components: + - type: Transform + pos: -14.5,14.5 + parent: 31 - uid: 719 components: - type: Transform @@ -7861,16 +7853,36 @@ entities: - type: Transform pos: -9.5,-31.5 parent: 31 + - uid: 763 + components: + - type: Transform + pos: -6.5,31.5 + parent: 31 - uid: 767 components: - type: Transform pos: 8.5,-17.5 parent: 31 + - uid: 769 + components: + - type: Transform + pos: -16.5,-6.5 + parent: 31 + - uid: 775 + components: + - type: Transform + pos: -32.5,-35.5 + parent: 31 - uid: 780 components: - type: Transform pos: 21.5,22.5 parent: 31 + - uid: 782 + components: + - type: Transform + pos: -32.5,-37.5 + parent: 31 - uid: 783 components: - type: Transform @@ -7881,6 +7893,11 @@ entities: - type: Transform pos: 19.5,16.5 parent: 31 + - uid: 807 + components: + - type: Transform + pos: -32.5,-36.5 + parent: 31 - uid: 814 components: - type: Transform @@ -7891,6 +7908,11 @@ entities: - type: Transform pos: 21.5,16.5 parent: 31 + - uid: 828 + components: + - type: Transform + pos: 3.5,34.5 + parent: 31 - uid: 862 components: - type: Transform @@ -7901,6 +7923,26 @@ entities: - type: Transform pos: 16.5,20.5 parent: 31 + - uid: 929 + components: + - type: Transform + pos: -24.5,-2.5 + parent: 31 + - uid: 930 + components: + - type: Transform + pos: -33.5,-34.5 + parent: 31 + - uid: 935 + components: + - type: Transform + pos: -32.5,-34.5 + parent: 31 + - uid: 938 + components: + - type: Transform + pos: -20.5,12.5 + parent: 31 - uid: 939 components: - type: Transform @@ -7911,11 +7953,31 @@ entities: - type: Transform pos: -41.5,2.5 parent: 31 + - uid: 957 + components: + - type: Transform + pos: -28.5,-9.5 + parent: 31 - uid: 971 components: - type: Transform pos: -40.5,2.5 parent: 31 + - uid: 977 + components: + - type: Transform + pos: -6.5,33.5 + parent: 31 + - uid: 979 + components: + - type: Transform + pos: -12.5,14.5 + parent: 31 + - uid: 983 + components: + - type: Transform + pos: -21.5,12.5 + parent: 31 - uid: 992 components: - type: Transform @@ -7981,10 +8043,10 @@ entities: - type: Transform pos: 9.5,-17.5 parent: 31 - - uid: 1017 + - uid: 1013 components: - type: Transform - pos: -4.5,-11.5 + pos: 3.5,33.5 parent: 31 - uid: 1023 components: @@ -7996,6 +8058,11 @@ entities: - type: Transform pos: -37.5,0.5 parent: 31 + - uid: 1040 + components: + - type: Transform + pos: -6.5,29.5 + parent: 31 - uid: 1041 components: - type: Transform @@ -8016,20 +8083,20 @@ entities: - type: Transform pos: 21.5,-23.5 parent: 31 - - uid: 1050 + - uid: 1054 components: - type: Transform - pos: -28.5,-2.5 + pos: -6.5,32.5 parent: 31 - - uid: 1065 + - uid: 1071 components: - type: Transform - pos: -26.5,-5.5 + pos: -32.5,-41.5 parent: 31 - uid: 1079 components: - type: Transform - pos: -27.5,-5.5 + pos: -32.5,-40.5 parent: 31 - uid: 1081 components: @@ -8049,18 +8116,23 @@ entities: - uid: 1097 components: - type: Transform - pos: -26.5,0.5 + pos: -32.5,-42.5 parent: 31 - uid: 1111 components: - type: Transform - pos: 31.5,25.5 + pos: 0.5,32.5 parent: 31 - uid: 1114 components: - type: Transform pos: -3.5,-19.5 parent: 31 + - uid: 1115 + components: + - type: Transform + pos: -18.5,16.5 + parent: 31 - uid: 1116 components: - type: Transform @@ -8091,21 +8163,46 @@ entities: - type: Transform pos: 61.5,7.5 parent: 31 + - uid: 1132 + components: + - type: Transform + pos: -32.5,-43.5 + parent: 31 - uid: 1134 components: - type: Transform pos: 56.5,5.5 parent: 31 + - uid: 1135 + components: + - type: Transform + pos: -19.5,14.5 + parent: 31 + - uid: 1138 + components: + - type: Transform + pos: -32.5,-38.5 + parent: 31 - uid: 1139 components: - type: Transform pos: 32.5,17.5 parent: 31 + - uid: 1142 + components: + - type: Transform + pos: -32.5,-39.5 + parent: 31 - uid: 1145 components: - type: Transform pos: 22.5,-4.5 parent: 31 + - uid: 1149 + components: + - type: Transform + pos: -5.5,32.5 + parent: 31 - uid: 1159 components: - type: Transform @@ -8191,6 +8288,16 @@ entities: - type: Transform pos: -5.5,4.5 parent: 31 + - uid: 1253 + components: + - type: Transform + pos: -37.5,-34.5 + parent: 31 + - uid: 1269 + components: + - type: Transform + pos: -2.5,11.5 + parent: 31 - uid: 1282 components: - type: Transform @@ -8201,6 +8308,16 @@ entities: - type: Transform pos: -31.5,-12.5 parent: 31 + - uid: 1322 + components: + - type: Transform + pos: 46.5,11.5 + parent: 31 + - uid: 1325 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 31 - uid: 1327 components: - type: Transform @@ -8211,6 +8328,11 @@ entities: - type: Transform pos: -12.5,8.5 parent: 31 + - uid: 1355 + components: + - type: Transform + pos: -32.5,-47.5 + parent: 31 - uid: 1369 components: - type: Transform @@ -8226,11 +8348,21 @@ entities: - type: Transform pos: 52.5,15.5 parent: 31 + - uid: 1414 + components: + - type: Transform + pos: -13.5,14.5 + parent: 31 - uid: 1421 components: - type: Transform pos: -40.5,0.5 parent: 31 + - uid: 1426 + components: + - type: Transform + pos: -35.5,-34.5 + parent: 31 - uid: 1428 components: - type: Transform @@ -8251,6 +8383,16 @@ entities: - type: Transform pos: -43.5,10.5 parent: 31 + - uid: 1440 + components: + - type: Transform + pos: -23.5,-5.5 + parent: 31 + - uid: 1444 + components: + - type: Transform + pos: -34.5,-34.5 + parent: 31 - uid: 1466 components: - type: Transform @@ -8276,11 +8418,21 @@ entities: - type: Transform pos: -4.5,-22.5 parent: 31 + - uid: 1522 + components: + - type: Transform + pos: -17.5,-5.5 + parent: 31 - uid: 1528 components: - type: Transform pos: 18.5,16.5 parent: 31 + - uid: 1530 + components: + - type: Transform + pos: -13.5,-7.5 + parent: 31 - uid: 1531 components: - type: Transform @@ -8301,6 +8453,11 @@ entities: - type: Transform pos: 29.5,20.5 parent: 31 + - uid: 1549 + components: + - type: Transform + pos: -35.5,-31.5 + parent: 31 - uid: 1553 components: - type: Transform @@ -8336,6 +8493,11 @@ entities: - type: Transform pos: -38.5,0.5 parent: 31 + - uid: 1579 + components: + - type: Transform + pos: -32.5,-44.5 + parent: 31 - uid: 1580 components: - type: Transform @@ -8356,6 +8518,11 @@ entities: - type: Transform pos: -41.5,0.5 parent: 31 + - uid: 1596 + components: + - type: Transform + pos: -12.5,-7.5 + parent: 31 - uid: 1597 components: - type: Transform @@ -8366,6 +8533,16 @@ entities: - type: Transform pos: 13.5,19.5 parent: 31 + - uid: 1599 + components: + - type: Transform + pos: -32.5,-45.5 + parent: 31 + - uid: 1606 + components: + - type: Transform + pos: -32.5,-46.5 + parent: 31 - uid: 1654 components: - type: Transform @@ -8386,11 +8563,6 @@ entities: - type: Transform pos: -18.5,18.5 parent: 31 - - uid: 1694 - components: - - type: Transform - pos: -18.5,16.5 - parent: 31 - uid: 1702 components: - type: Transform @@ -8436,11 +8608,6 @@ entities: - type: Transform pos: -13.5,8.5 parent: 31 - - uid: 1764 - components: - - type: Transform - pos: 44.5,-24.5 - parent: 31 - uid: 1769 components: - type: Transform @@ -8461,6 +8628,16 @@ entities: - type: Transform pos: -10.5,-38.5 parent: 31 + - uid: 1808 + components: + - type: Transform + pos: -22.5,-5.5 + parent: 31 + - uid: 1823 + components: + - type: Transform + pos: -38.5,-29.5 + parent: 31 - uid: 1838 components: - type: Transform @@ -8481,6 +8658,11 @@ entities: - type: Transform pos: -14.5,-38.5 parent: 31 + - uid: 1958 + components: + - type: Transform + pos: -46.5,-28.5 + parent: 31 - uid: 1973 components: - type: Transform @@ -8491,6 +8673,11 @@ entities: - type: Transform pos: -24.5,4.5 parent: 31 + - uid: 2030 + components: + - type: Transform + pos: -35.5,-32.5 + parent: 31 - uid: 2052 components: - type: Transform @@ -8506,6 +8693,11 @@ entities: - type: Transform pos: 1.5,6.5 parent: 31 + - uid: 2070 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 31 - uid: 2082 components: - type: Transform @@ -8551,6 +8743,11 @@ entities: - type: Transform pos: -5.5,-21.5 parent: 31 + - uid: 2300 + components: + - type: Transform + pos: 13.5,21.5 + parent: 31 - uid: 2304 components: - type: Transform @@ -8561,6 +8758,11 @@ entities: - type: Transform pos: -4.5,-21.5 parent: 31 + - uid: 2320 + components: + - type: Transform + pos: 49.5,-22.5 + parent: 31 - uid: 2323 components: - type: Transform @@ -8571,21 +8773,11 @@ entities: - type: Transform pos: -28.5,-20.5 parent: 31 - - uid: 2330 - components: - - type: Transform - pos: 13.5,17.5 - parent: 31 - uid: 2339 components: - type: Transform pos: -1.5,-27.5 parent: 31 - - uid: 2341 - components: - - type: Transform - pos: -27.5,-2.5 - parent: 31 - uid: 2342 components: - type: Transform @@ -8641,21 +8833,11 @@ entities: - type: Transform pos: -4.5,6.5 parent: 31 - - uid: 2402 - components: - - type: Transform - pos: -15.5,-9.5 - parent: 31 - uid: 2453 components: - type: Transform pos: 10.5,-39.5 parent: 31 - - uid: 2482 - components: - - type: Transform - pos: -17.5,16.5 - parent: 31 - uid: 2483 components: - type: Transform @@ -8671,16 +8853,6 @@ entities: - type: Transform pos: 43.5,-5.5 parent: 31 - - uid: 2491 - components: - - type: Transform - pos: 6.5,29.5 - parent: 31 - - uid: 2495 - components: - - type: Transform - pos: -24.5,0.5 - parent: 31 - uid: 2496 components: - type: Transform @@ -8786,11 +8958,6 @@ entities: - type: Transform pos: -18.5,14.5 parent: 31 - - uid: 2536 - components: - - type: Transform - pos: -13.5,14.5 - parent: 31 - uid: 2538 components: - type: Transform @@ -8886,11 +9053,6 @@ entities: - type: Transform pos: -13.5,11.5 parent: 31 - - uid: 2558 - components: - - type: Transform - pos: -9.5,8.5 - parent: 31 - uid: 2560 components: - type: Transform @@ -9001,11 +9163,6 @@ entities: - type: Transform pos: 8.5,-36.5 parent: 31 - - uid: 2584 - components: - - type: Transform - pos: -26.5,-2.5 - parent: 31 - uid: 2585 components: - type: Transform @@ -9056,21 +9213,6 @@ entities: - type: Transform pos: -5.5,14.5 parent: 31 - - uid: 2595 - components: - - type: Transform - pos: -6.5,14.5 - parent: 31 - - uid: 2596 - components: - - type: Transform - pos: -7.5,14.5 - parent: 31 - - uid: 2597 - components: - - type: Transform - pos: -8.5,14.5 - parent: 31 - uid: 2598 components: - type: Transform @@ -9086,11 +9228,6 @@ entities: - type: Transform pos: -11.5,14.5 parent: 31 - - uid: 2601 - components: - - type: Transform - pos: -12.5,14.5 - parent: 31 - uid: 2602 components: - type: Transform @@ -9101,16 +9238,6 @@ entities: - type: Transform pos: -12.5,16.5 parent: 31 - - uid: 2604 - components: - - type: Transform - pos: -7.5,15.5 - parent: 31 - - uid: 2605 - components: - - type: Transform - pos: -7.5,16.5 - parent: 31 - uid: 2606 components: - type: Transform @@ -9386,75 +9513,25 @@ entities: - type: Transform pos: -38.5,4.5 parent: 31 - - uid: 2672 - components: - - type: Transform - pos: -25.5,-2.5 - parent: 31 - - uid: 2673 - components: - - type: Transform - pos: -25.5,-1.5 - parent: 31 - uid: 2674 components: - type: Transform - pos: -25.5,-0.5 - parent: 31 - - uid: 2675 - components: - - type: Transform - pos: -25.5,0.5 + pos: -39.5,-28.5 parent: 31 - uid: 2676 components: - type: Transform - pos: -30.5,-7.5 - parent: 31 - - uid: 2677 - components: - - type: Transform - pos: -29.5,-7.5 - parent: 31 - - uid: 2678 - components: - - type: Transform - pos: -28.5,-7.5 - parent: 31 - - uid: 2679 - components: - - type: Transform - pos: -27.5,-7.5 - parent: 31 - - uid: 2680 - components: - - type: Transform - pos: -26.5,-7.5 - parent: 31 - - uid: 2681 - components: - - type: Transform - pos: -25.5,-7.5 - parent: 31 - - uid: 2682 - components: - - type: Transform - pos: -25.5,-8.5 + pos: -42.5,-28.5 parent: 31 - uid: 2683 components: - type: Transform - pos: -24.5,-7.5 + pos: -53.5,-28.5 parent: 31 - uid: 2684 components: - type: Transform - pos: -23.5,-7.5 - parent: 31 - - uid: 2685 - components: - - type: Transform - pos: -23.5,-8.5 + pos: -55.5,-28.5 parent: 31 - uid: 2686 components: @@ -9464,42 +9541,7 @@ entities: - uid: 2687 components: - type: Transform - pos: -29.5,-2.5 - parent: 31 - - uid: 2688 - components: - - type: Transform - pos: -18.5,-3.5 - parent: 31 - - uid: 2689 - components: - - type: Transform - pos: -18.5,-2.5 - parent: 31 - - uid: 2690 - components: - - type: Transform - pos: -18.5,-1.5 - parent: 31 - - uid: 2691 - components: - - type: Transform - pos: -18.5,-0.5 - parent: 31 - - uid: 2692 - components: - - type: Transform - pos: -29.5,0.5 - parent: 31 - - uid: 2693 - components: - - type: Transform - pos: -28.5,0.5 - parent: 31 - - uid: 2694 - components: - - type: Transform - pos: -27.5,0.5 + pos: -49.5,-28.5 parent: 31 - uid: 2695 components: @@ -9551,6 +9593,11 @@ entities: - type: Transform pos: -32.5,0.5 parent: 31 + - uid: 2707 + components: + - type: Transform + pos: -34.5,-32.5 + parent: 31 - uid: 2710 components: - type: Transform @@ -9561,65 +9608,10 @@ entities: - type: Transform pos: -22.5,-12.5 parent: 31 - - uid: 2717 - components: - - type: Transform - pos: -14.5,-8.5 - parent: 31 - - uid: 2718 - components: - - type: Transform - pos: -14.5,-9.5 - parent: 31 - - uid: 2719 - components: - - type: Transform - pos: -11.5,8.5 - parent: 31 - - uid: 2720 - components: - - type: Transform - pos: -14.5,-10.5 - parent: 31 - - uid: 2722 - components: - - type: Transform - pos: -13.5,-11.5 - parent: 31 - - uid: 2723 - components: - - type: Transform - pos: -12.5,-11.5 - parent: 31 - uid: 2724 components: - type: Transform - pos: -11.5,-11.5 - parent: 31 - - uid: 2725 - components: - - type: Transform - pos: -12.5,-10.5 - parent: 31 - - uid: 2726 - components: - - type: Transform - pos: -12.5,-9.5 - parent: 31 - - uid: 2727 - components: - - type: Transform - pos: -13.5,-12.5 - parent: 31 - - uid: 2728 - components: - - type: Transform - pos: -12.5,-8.5 - parent: 31 - - uid: 2729 - components: - - type: Transform - pos: -16.5,-7.5 + pos: 44.5,-25.5 parent: 31 - uid: 2730 components: @@ -9631,91 +9623,21 @@ entities: - type: Transform pos: -14.5,-7.5 parent: 31 - - uid: 2732 - components: - - type: Transform - pos: -17.5,-7.5 - parent: 31 - uid: 2733 components: - type: Transform - pos: -18.5,-7.5 - parent: 31 - - uid: 2734 - components: - - type: Transform - pos: -19.5,-7.5 - parent: 31 - - uid: 2735 - components: - - type: Transform - pos: -20.5,-7.5 - parent: 31 - - uid: 2736 - components: - - type: Transform - pos: -18.5,-6.5 - parent: 31 - - uid: 2737 - components: - - type: Transform - pos: -18.5,-5.5 + pos: -41.5,-28.5 parent: 31 - uid: 2740 components: - type: Transform pos: -4.5,-38.5 parent: 31 - - uid: 2742 - components: - - type: Transform - pos: -22.5,-4.5 - parent: 31 - - uid: 2743 - components: - - type: Transform - pos: -22.5,-3.5 - parent: 31 - - uid: 2745 - components: - - type: Transform - pos: -22.5,-2.5 - parent: 31 - - uid: 2746 - components: - - type: Transform - pos: -22.5,-1.5 - parent: 31 - - uid: 2747 - components: - - type: Transform - pos: -22.5,-0.5 - parent: 31 - - uid: 2748 - components: - - type: Transform - pos: -22.5,0.5 - parent: 31 - - uid: 2750 - components: - - type: Transform - pos: -23.5,0.5 - parent: 31 - uid: 2751 components: - type: Transform pos: -15.5,-6.5 parent: 31 - - uid: 2752 - components: - - type: Transform - pos: -15.5,-5.5 - parent: 31 - - uid: 2753 - components: - - type: Transform - pos: -15.5,-4.5 - parent: 31 - uid: 2754 components: - type: Transform @@ -9786,41 +9708,6 @@ entities: - type: Transform pos: -16.5,0.5 parent: 31 - - uid: 2770 - components: - - type: Transform - pos: -17.5,0.5 - parent: 31 - - uid: 2771 - components: - - type: Transform - pos: -18.5,0.5 - parent: 31 - - uid: 2772 - components: - - type: Transform - pos: -19.5,0.5 - parent: 31 - - uid: 2773 - components: - - type: Transform - pos: -20.5,0.5 - parent: 31 - - uid: 2774 - components: - - type: Transform - pos: -20.5,1.5 - parent: 31 - - uid: 2775 - components: - - type: Transform - pos: -16.5,-0.5 - parent: 31 - - uid: 2776 - components: - - type: Transform - pos: -16.5,-1.5 - parent: 31 - uid: 2778 components: - type: Transform @@ -9834,17 +9721,7 @@ entities: - uid: 2781 components: - type: Transform - pos: -20.5,-0.5 - parent: 31 - - uid: 2782 - components: - - type: Transform - pos: -20.5,-1.5 - parent: 31 - - uid: 2783 - components: - - type: Transform - pos: -20.5,-2.5 + pos: -29.5,-9.5 parent: 31 - uid: 2784 components: @@ -9991,20 +9868,10 @@ entities: - type: Transform pos: -5.5,-9.5 parent: 31 - - uid: 2814 - components: - - type: Transform - pos: -5.5,-10.5 - parent: 31 - uid: 2816 components: - type: Transform - pos: -4.5,-10.5 - parent: 31 - - uid: 2817 - components: - - type: Transform - pos: -3.5,-10.5 + pos: -24.5,-5.5 parent: 31 - uid: 2818 components: @@ -10096,26 +9963,11 @@ entities: - type: Transform pos: -28.5,-21.5 parent: 31 - - uid: 2860 - components: - - type: Transform - pos: -3.5,-12.5 - parent: 31 - uid: 2865 components: - type: Transform pos: -14.5,-29.5 parent: 31 - - uid: 2867 - components: - - type: Transform - pos: -4.5,-12.5 - parent: 31 - - uid: 2869 - components: - - type: Transform - pos: -5.5,-12.5 - parent: 31 - uid: 2870 components: - type: Transform @@ -10131,6 +9983,11 @@ entities: - type: Transform pos: -13.5,-35.5 parent: 31 + - uid: 2874 + components: + - type: Transform + pos: -38.5,-30.5 + parent: 31 - uid: 2875 components: - type: Transform @@ -10141,6 +9998,11 @@ entities: - type: Transform pos: -3.5,-27.5 parent: 31 + - uid: 2877 + components: + - type: Transform + pos: 1.5,34.5 + parent: 31 - uid: 2879 components: - type: Transform @@ -10381,11 +10243,6 @@ entities: - type: Transform pos: 18.5,-17.5 parent: 31 - - uid: 2944 - components: - - type: Transform - pos: -22.5,-8.5 - parent: 31 - uid: 2946 components: - type: Transform @@ -11056,6 +10913,11 @@ entities: - type: Transform pos: 24.5,-18.5 parent: 31 + - uid: 3107 + components: + - type: Transform + pos: 3.5,32.5 + parent: 31 - uid: 3119 components: - type: Transform @@ -11111,6 +10973,11 @@ entities: - type: Transform pos: 27.5,7.5 parent: 31 + - uid: 3138 + components: + - type: Transform + pos: -21.5,-6.5 + parent: 31 - uid: 3149 components: - type: Transform @@ -11136,6 +11003,11 @@ entities: - type: Transform pos: 20.5,13.5 parent: 31 + - uid: 3158 + components: + - type: Transform + pos: -18.5,-5.5 + parent: 31 - uid: 3159 components: - type: Transform @@ -11341,16 +11213,6 @@ entities: - type: Transform pos: 12.5,14.5 parent: 31 - - uid: 3204 - components: - - type: Transform - pos: 13.5,14.5 - parent: 31 - - uid: 3208 - components: - - type: Transform - pos: 13.5,16.5 - parent: 31 - uid: 3209 components: - type: Transform @@ -11491,41 +11353,6 @@ entities: - type: Transform pos: 6.5,24.5 parent: 31 - - uid: 3242 - components: - - type: Transform - pos: 9.5,28.5 - parent: 31 - - uid: 3243 - components: - - type: Transform - pos: 9.5,29.5 - parent: 31 - - uid: 3244 - components: - - type: Transform - pos: 9.5,30.5 - parent: 31 - - uid: 3245 - components: - - type: Transform - pos: 8.5,30.5 - parent: 31 - - uid: 3246 - components: - - type: Transform - pos: 7.5,30.5 - parent: 31 - - uid: 3247 - components: - - type: Transform - pos: 6.5,30.5 - parent: 31 - - uid: 3248 - components: - - type: Transform - pos: 6.5,31.5 - parent: 31 - uid: 3249 components: - type: Transform @@ -11631,11 +11458,6 @@ entities: - type: Transform pos: -1.5,23.5 parent: 31 - - uid: 3305 - components: - - type: Transform - pos: 31.5,26.5 - parent: 31 - uid: 3318 components: - type: Transform @@ -11656,6 +11478,11 @@ entities: - type: Transform pos: -7.5,-19.5 parent: 31 + - uid: 3400 + components: + - type: Transform + pos: -15.5,-8.5 + parent: 31 - uid: 3418 components: - type: Transform @@ -11666,11 +11493,6 @@ entities: - type: Transform pos: 43.5,11.5 parent: 31 - - uid: 3536 - components: - - type: Transform - pos: 12.5,19.5 - parent: 31 - uid: 3570 components: - type: Transform @@ -11686,11 +11508,6 @@ entities: - type: Transform pos: 24.5,17.5 parent: 31 - - uid: 3617 - components: - - type: Transform - pos: -26.5,-4.5 - parent: 31 - uid: 3619 components: - type: Transform @@ -11706,30 +11523,25 @@ entities: - type: Transform pos: 25.5,9.5 parent: 31 - - uid: 3703 + - uid: 3677 components: - type: Transform - pos: -4.5,15.5 + pos: 13.5,20.5 parent: 31 - - uid: 3727 + - uid: 3703 components: - type: Transform - pos: -16.5,16.5 + pos: -4.5,15.5 parent: 31 - uid: 3729 components: - type: Transform pos: -28.5,-26.5 parent: 31 - - uid: 3768 - components: - - type: Transform - pos: -28.5,-5.5 - parent: 31 - - uid: 3769 + - uid: 3781 components: - type: Transform - pos: -29.5,-5.5 + pos: -29.5,-10.5 parent: 31 - uid: 3787 components: @@ -11751,11 +11563,6 @@ entities: - type: Transform pos: -18.5,17.5 parent: 31 - - uid: 3843 - components: - - type: Transform - pos: -4.5,12.5 - parent: 31 - uid: 3845 components: - type: Transform @@ -11786,6 +11593,11 @@ entities: - type: Transform pos: 15.5,15.5 parent: 31 + - uid: 3917 + components: + - type: Transform + pos: -38.5,-34.5 + parent: 31 - uid: 3918 components: - type: Transform @@ -11891,6 +11703,11 @@ entities: - type: Transform pos: 21.5,19.5 parent: 31 + - uid: 3972 + components: + - type: Transform + pos: -8.5,35.5 + parent: 31 - uid: 3979 components: - type: Transform @@ -11901,6 +11718,11 @@ entities: - type: Transform pos: 23.5,-18.5 parent: 31 + - uid: 3997 + components: + - type: Transform + pos: -54.5,-28.5 + parent: 31 - uid: 4012 components: - type: Transform @@ -11924,7 +11746,7 @@ entities: - uid: 4037 components: - type: Transform - pos: -20.5,13.5 + pos: -21.5,14.5 parent: 31 - uid: 4039 components: @@ -11939,12 +11761,7 @@ entities: - uid: 4043 components: - type: Transform - pos: -26.5,4.5 - parent: 31 - - uid: 4047 - components: - - type: Transform - pos: -19.5,13.5 + pos: -3.5,-9.5 parent: 31 - uid: 4048 components: @@ -11956,11 +11773,46 @@ entities: - type: Transform pos: -22.5,19.5 parent: 31 + - uid: 4066 + components: + - type: Transform + pos: -37.5,-31.5 + parent: 31 + - uid: 4067 + components: + - type: Transform + pos: -45.5,-28.5 + parent: 31 + - uid: 4068 + components: + - type: Transform + pos: -44.5,-28.5 + parent: 31 + - uid: 4070 + components: + - type: Transform + pos: -43.5,-28.5 + parent: 31 - uid: 4111 components: - type: Transform pos: 27.5,16.5 parent: 31 + - uid: 4122 + components: + - type: Transform + pos: 47.5,11.5 + parent: 31 + - uid: 4127 + components: + - type: Transform + pos: -38.5,-31.5 + parent: 31 + - uid: 4129 + components: + - type: Transform + pos: -52.5,-28.5 + parent: 31 - uid: 4132 components: - type: Transform @@ -12036,10 +11888,15 @@ entities: - type: Transform pos: 36.5,-12.5 parent: 31 - - uid: 4383 + - uid: 4457 components: - type: Transform - pos: 33.5,-22.5 + pos: -6.5,28.5 + parent: 31 + - uid: 4470 + components: + - type: Transform + pos: -9.5,36.5 parent: 31 - uid: 4491 components: @@ -12076,6 +11933,16 @@ entities: - type: Transform pos: 29.5,-9.5 parent: 31 + - uid: 4515 + components: + - type: Transform + pos: -20.5,3.5 + parent: 31 + - uid: 4583 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 31 - uid: 4591 components: - type: Transform @@ -12096,16 +11963,6 @@ entities: - type: Transform pos: 37.5,-9.5 parent: 31 - - uid: 4630 - components: - - type: Transform - pos: 42.5,-24.5 - parent: 31 - - uid: 4633 - components: - - type: Transform - pos: 43.5,-24.5 - parent: 31 - uid: 4643 components: - type: Transform @@ -12126,45 +11983,30 @@ entities: - type: Transform pos: 32.5,-9.5 parent: 31 - - uid: 4665 - components: - - type: Transform - pos: 39.5,-24.5 - parent: 31 - - uid: 4666 - components: - - type: Transform - pos: 38.5,-24.5 - parent: 31 - - uid: 4667 + - uid: 4656 components: - type: Transform - pos: 37.5,-24.5 + pos: 51.5,-22.5 parent: 31 - - uid: 4668 + - uid: 4661 components: - type: Transform - pos: 36.5,-24.5 + pos: 51.5,-24.5 parent: 31 - - uid: 4669 + - uid: 4663 components: - type: Transform - pos: 35.5,-24.5 + pos: 51.5,-23.5 parent: 31 - uid: 4670 components: - type: Transform - pos: 34.5,-24.5 - parent: 31 - - uid: 4671 - components: - - type: Transform - pos: 33.5,-24.5 + pos: -7.5,16.5 parent: 31 - - uid: 4672 + - uid: 4712 components: - type: Transform - pos: 33.5,-23.5 + pos: -38.5,-28.5 parent: 31 - uid: 4720 components: @@ -12306,11 +12148,6 @@ entities: - type: Transform pos: 6.5,-25.5 parent: 31 - - uid: 4829 - components: - - type: Transform - pos: 31.5,23.5 - parent: 31 - uid: 4832 components: - type: Transform @@ -12321,21 +12158,6 @@ entities: - type: Transform pos: -15.5,-36.5 parent: 31 - - uid: 4859 - components: - - type: Transform - pos: -15.5,-10.5 - parent: 31 - - uid: 4861 - components: - - type: Transform - pos: -13.5,-10.5 - parent: 31 - - uid: 4864 - components: - - type: Transform - pos: 12.5,20.5 - parent: 31 - uid: 4865 components: - type: Transform @@ -12621,6 +12443,11 @@ entities: - type: Transform pos: -17.5,-35.5 parent: 31 + - uid: 5549 + components: + - type: Transform + pos: -22.5,3.5 + parent: 31 - uid: 5707 components: - type: Transform @@ -12646,15 +12473,15 @@ entities: - type: Transform pos: -39.5,-11.5 parent: 31 - - uid: 5938 + - uid: 5882 components: - type: Transform - pos: 46.5,24.5 + pos: 2.5,34.5 parent: 31 - - uid: 5976 + - uid: 5938 components: - type: Transform - pos: -22.5,-9.5 + pos: 46.5,24.5 parent: 31 - uid: 5977 components: @@ -12671,6 +12498,31 @@ entities: - type: Transform pos: -11.5,-18.5 parent: 31 + - uid: 6083 + components: + - type: Transform + pos: -50.5,-28.5 + parent: 31 + - uid: 6085 + components: + - type: Transform + pos: -46.5,-28.5 + parent: 31 + - uid: 6086 + components: + - type: Transform + pos: -51.5,-28.5 + parent: 31 + - uid: 6087 + components: + - type: Transform + pos: -48.5,-28.5 + parent: 31 + - uid: 6088 + components: + - type: Transform + pos: -47.5,-28.5 + parent: 31 - uid: 6115 components: - type: Transform @@ -13186,20 +13038,15 @@ entities: - type: Transform pos: -9.5,-37.5 parent: 31 - - uid: 6981 - components: - - type: Transform - pos: 41.5,-24.5 - parent: 31 - - uid: 6982 + - uid: 6967 components: - type: Transform - pos: 40.5,-24.5 + pos: -16.5,-5.5 parent: 31 - - uid: 7010 + - uid: 7009 components: - type: Transform - pos: 45.5,-24.5 + pos: -9.5,-14.5 parent: 31 - uid: 7026 components: @@ -13226,10 +13073,20 @@ entities: - type: Transform pos: 36.5,-9.5 parent: 31 + - uid: 7051 + components: + - type: Transform + pos: 47.5,-22.5 + parent: 31 - uid: 7054 components: - type: Transform - pos: 33.5,-21.5 + pos: 47.5,-25.5 + parent: 31 + - uid: 7061 + components: + - type: Transform + pos: 49.5,-26.5 parent: 31 - uid: 7064 components: @@ -13401,11 +13258,6 @@ entities: - type: Transform pos: -15.5,-25.5 parent: 31 - - uid: 7428 - components: - - type: Transform - pos: -19.5,16.5 - parent: 31 - uid: 7439 components: - type: Transform @@ -13421,11 +13273,21 @@ entities: - type: Transform pos: -22.5,-13.5 parent: 31 + - uid: 7471 + components: + - type: Transform + pos: -7.5,-16.5 + parent: 31 - uid: 7474 components: - type: Transform pos: 3.5,-29.5 parent: 31 + - uid: 7526 + components: + - type: Transform + pos: -6.5,-16.5 + parent: 31 - uid: 7637 components: - type: Transform @@ -13441,26 +13303,6 @@ entities: - type: Transform pos: -23.5,-29.5 parent: 31 - - uid: 7648 - components: - - type: Transform - pos: -25.5,-6.5 - parent: 31 - - uid: 7649 - components: - - type: Transform - pos: -25.5,-5.5 - parent: 31 - - uid: 7650 - components: - - type: Transform - pos: -25.5,-4.5 - parent: 31 - - uid: 7671 - components: - - type: Transform - pos: -14.5,14.5 - parent: 31 - uid: 7680 components: - type: Transform @@ -13616,11 +13458,6 @@ entities: - type: Transform pos: -24.5,3.5 parent: 31 - - uid: 7773 - components: - - type: Transform - pos: -24.5,2.5 - parent: 31 - uid: 7833 components: - type: Transform @@ -13661,6 +13498,11 @@ entities: - type: Transform pos: 53.5,16.5 parent: 31 + - uid: 7946 + components: + - type: Transform + pos: -21.5,-5.5 + parent: 31 - uid: 8040 components: - type: Transform @@ -13871,285 +13713,180 @@ entities: - type: Transform pos: 60.5,4.5 parent: 31 - - uid: 8226 - components: - - type: Transform - pos: 53.5,-24.5 - parent: 31 - - uid: 8227 - components: - - type: Transform - pos: 54.5,-24.5 - parent: 31 - - uid: 8228 - components: - - type: Transform - pos: 54.5,-23.5 - parent: 31 - - uid: 8229 - components: - - type: Transform - pos: 54.5,-22.5 - parent: 31 - - uid: 8230 - components: - - type: Transform - pos: 54.5,-25.5 - parent: 31 - - uid: 8231 - components: - - type: Transform - pos: 54.5,-26.5 - parent: 31 - - uid: 8233 - components: - - type: Transform - pos: 49.5,-28.5 - parent: 31 - - uid: 8234 - components: - - type: Transform - pos: 49.5,-29.5 - parent: 31 - - uid: 8235 - components: - - type: Transform - pos: 48.5,-29.5 - parent: 31 - - uid: 8236 - components: - - type: Transform - pos: 47.5,-29.5 - parent: 31 - - uid: 8237 - components: - - type: Transform - pos: 50.5,-29.5 - parent: 31 - - uid: 8238 - components: - - type: Transform - pos: 51.5,-29.5 - parent: 31 - - uid: 8240 - components: - - type: Transform - pos: 49.5,-20.5 - parent: 31 - - uid: 8241 - components: - - type: Transform - pos: 49.5,-19.5 - parent: 31 - - uid: 8242 - components: - - type: Transform - pos: 48.5,-19.5 - parent: 31 - - uid: 8243 - components: - - type: Transform - pos: 47.5,-19.5 - parent: 31 - - uid: 8244 - components: - - type: Transform - pos: 50.5,-19.5 - parent: 31 - - uid: 8245 - components: - - type: Transform - pos: 51.5,-19.5 - parent: 31 - - uid: 8246 - components: - - type: Transform - pos: 44.5,-25.5 - parent: 31 - - uid: 8247 - components: - - type: Transform - pos: 44.5,-26.5 - parent: 31 - - uid: 8248 + - uid: 8201 components: - type: Transform - pos: 44.5,-23.5 + pos: -2.5,-9.5 parent: 31 - uid: 8249 components: - type: Transform - pos: 44.5,-22.5 - parent: 31 - - uid: 8250 - components: - - type: Transform - pos: 45.5,-22.5 + pos: 49.5,-30.5 parent: 31 - - uid: 8251 + - uid: 8260 components: - type: Transform - pos: 45.5,-21.5 + pos: -16.5,-4.5 parent: 31 - - uid: 8252 + - uid: 8282 components: - type: Transform - pos: 47.5,-20.5 + pos: 38.5,-13.5 parent: 31 - - uid: 8253 + - uid: 8295 components: - type: Transform - pos: 46.5,-20.5 + pos: -2.5,-26.5 parent: 31 - - uid: 8254 + - uid: 8297 components: - type: Transform - pos: 51.5,-20.5 + pos: -40.5,-9.5 parent: 31 - - uid: 8255 + - uid: 8298 components: - type: Transform - pos: 52.5,-20.5 + pos: -39.5,-9.5 parent: 31 - - uid: 8256 + - uid: 8313 components: - type: Transform - pos: 53.5,-22.5 + pos: 47.5,-23.5 parent: 31 - - uid: 8257 + - uid: 8315 components: - type: Transform - pos: 53.5,-21.5 + pos: 46.5,15.5 parent: 31 - - uid: 8258 + - uid: 8338 components: - type: Transform - pos: 53.5,-26.5 + pos: 48.5,-26.5 parent: 31 - - uid: 8259 + - uid: 8339 components: - type: Transform - pos: 53.5,-27.5 + pos: 51.5,-26.5 parent: 31 - - uid: 8260 + - uid: 8348 components: - type: Transform - pos: 51.5,-28.5 + pos: 33.5,19.5 parent: 31 - - uid: 8261 + - uid: 8359 components: - type: Transform - pos: 52.5,-28.5 + pos: 33.5,23.5 parent: 31 - - uid: 8262 + - uid: 8360 components: - type: Transform - pos: 47.5,-28.5 + pos: 33.5,20.5 parent: 31 - - uid: 8263 + - uid: 8361 components: - type: Transform - pos: 46.5,-28.5 + pos: 33.5,21.5 parent: 31 - - uid: 8264 + - uid: 8394 components: - type: Transform - pos: 45.5,-26.5 + pos: 47.5,-24.5 parent: 31 - - uid: 8265 + - uid: 8395 components: - type: Transform - pos: 45.5,-27.5 + pos: 48.5,-22.5 parent: 31 - - uid: 8282 + - uid: 8403 components: - type: Transform - pos: 38.5,-13.5 + pos: 47.5,-26.5 parent: 31 - - uid: 8295 + - uid: 8404 components: - type: Transform - pos: -2.5,-26.5 + pos: 48.5,-29.5 parent: 31 - - uid: 8297 + - uid: 8405 components: - type: Transform - pos: -40.5,-9.5 + pos: 33.5,-18.5 parent: 31 - - uid: 8298 + - uid: 8406 components: - type: Transform - pos: -39.5,-9.5 + pos: -23.5,4.5 parent: 31 - - uid: 8315 + - uid: 8407 components: - type: Transform - pos: 46.5,15.5 + pos: -29.5,5.5 parent: 31 - - uid: 8348 + - uid: 8447 components: - type: Transform - pos: 33.5,19.5 + pos: -20.5,14.5 parent: 31 - - uid: 8359 + - uid: 8474 components: - type: Transform - pos: 33.5,23.5 + pos: 48.5,-28.5 parent: 31 - - uid: 8360 + - uid: 8487 components: - type: Transform - pos: 33.5,20.5 + pos: -25.5,-29.5 parent: 31 - - uid: 8361 + - uid: 8501 components: - type: Transform - pos: 33.5,21.5 + pos: -28.5,-29.5 parent: 31 - - uid: 8403 + - uid: 8508 components: - type: Transform - pos: 33.5,-20.5 + pos: -19.5,-29.5 parent: 31 - - uid: 8404 + - uid: 8509 components: - type: Transform - pos: 33.5,-19.5 + pos: -19.5,-30.5 parent: 31 - - uid: 8405 + - uid: 8515 components: - type: Transform - pos: 33.5,-18.5 + pos: 48.5,-21.5 parent: 31 - - uid: 8406 + - uid: 8525 components: - type: Transform - pos: -23.5,4.5 + pos: 50.5,-22.5 parent: 31 - - uid: 8407 + - uid: 8532 components: - type: Transform - pos: -29.5,5.5 + pos: 55.5,-25.5 parent: 31 - - uid: 8487 + - uid: 8538 components: - type: Transform - pos: -25.5,-29.5 + pos: 48.5,-19.5 parent: 31 - - uid: 8501 + - uid: 8575 components: - type: Transform - pos: -28.5,-29.5 + pos: 43.5,-24.5 parent: 31 - - uid: 8508 + - uid: 8614 components: - type: Transform - pos: -19.5,-29.5 + pos: 48.5,-18.5 parent: 31 - - uid: 8509 + - uid: 8618 components: - type: Transform - pos: -19.5,-30.5 + pos: 49.5,-18.5 parent: 31 - uid: 8677 components: @@ -14191,15 +13928,10 @@ entities: - type: Transform pos: -35.5,-26.5 parent: 31 - - uid: 8685 - components: - - type: Transform - pos: -35.5,-25.5 - parent: 31 - uid: 8686 components: - type: Transform - pos: -35.5,-24.5 + pos: 53.5,-25.5 parent: 31 - uid: 8687 components: @@ -14209,17 +13941,7 @@ entities: - uid: 8688 components: - type: Transform - pos: -35.5,-27.5 - parent: 31 - - uid: 8689 - components: - - type: Transform - pos: -35.5,-28.5 - parent: 31 - - uid: 8690 - components: - - type: Transform - pos: -35.5,-29.5 + pos: 49.5,-29.5 parent: 31 - uid: 8691 components: @@ -14266,6 +13988,26 @@ entities: - type: Transform pos: -30.5,-32.5 parent: 31 + - uid: 8718 + components: + - type: Transform + pos: 54.5,-25.5 + parent: 31 + - uid: 8727 + components: + - type: Transform + pos: 51.5,-25.5 + parent: 31 + - uid: 8737 + components: + - type: Transform + pos: 45.5,-25.5 + parent: 31 + - uid: 8739 + components: + - type: Transform + pos: -25.5,-2.5 + parent: 31 - uid: 8750 components: - type: Transform @@ -14276,11 +14018,6 @@ entities: - type: Transform pos: -24.5,-29.5 parent: 31 - - uid: 8757 - components: - - type: Transform - pos: -20.5,12.5 - parent: 31 - uid: 8761 components: - type: Transform @@ -14306,6 +14043,21 @@ entities: - type: Transform pos: -16.5,8.5 parent: 31 + - uid: 8782 + components: + - type: Transform + pos: -9.5,-13.5 + parent: 31 + - uid: 8810 + components: + - type: Transform + pos: -11.5,-14.5 + parent: 31 + - uid: 8813 + components: + - type: Transform + pos: -9.5,35.5 + parent: 31 - uid: 8821 components: - type: Transform @@ -14351,20 +14103,30 @@ entities: - type: Transform pos: 4.5,28.5 parent: 31 - - uid: 8830 + - uid: 8882 components: - type: Transform - pos: 5.5,28.5 + pos: -13.5,6.5 parent: 31 - - uid: 8831 + - uid: 8902 components: - type: Transform - pos: 6.5,28.5 + pos: 50.5,-26.5 parent: 31 - - uid: 8882 + - uid: 8910 components: - type: Transform - pos: -13.5,6.5 + pos: 46.5,-25.5 + parent: 31 + - uid: 8912 + components: + - type: Transform + pos: 52.5,-25.5 + parent: 31 + - uid: 8916 + components: + - type: Transform + pos: 48.5,-20.5 parent: 31 - uid: 8957 components: @@ -14521,11 +14283,6 @@ entities: - type: Transform pos: 3.5,8.5 parent: 31 - - uid: 9033 - components: - - type: Transform - pos: -22.5,-10.5 - parent: 31 - uid: 9133 components: - type: Transform @@ -14546,6 +14303,11 @@ entities: - type: Transform pos: -43.5,8.5 parent: 31 + - uid: 9180 + components: + - type: Transform + pos: -7.5,15.5 + parent: 31 - uid: 9210 components: - type: Transform @@ -14601,6 +14363,16 @@ entities: - type: Transform pos: -22.5,-29.5 parent: 31 + - uid: 9332 + components: + - type: Transform + pos: -10.5,26.5 + parent: 31 + - uid: 9366 + components: + - type: Transform + pos: -7.5,35.5 + parent: 31 - uid: 9367 components: - type: Transform @@ -14656,6 +14428,16 @@ entities: - type: Transform pos: -3.5,-21.5 parent: 31 + - uid: 9563 + components: + - type: Transform + pos: -6.5,35.5 + parent: 31 + - uid: 9571 + components: + - type: Transform + pos: -0.5,34.5 + parent: 31 - uid: 9575 components: - type: Transform @@ -14691,6 +14473,11 @@ entities: - type: Transform pos: -21.5,16.5 parent: 31 + - uid: 9794 + components: + - type: Transform + pos: -21.5,13.5 + parent: 31 - uid: 9828 components: - type: Transform @@ -14746,16 +14533,6 @@ entities: - type: Transform pos: 33.5,22.5 parent: 31 - - uid: 9937 - components: - - type: Transform - pos: 33.5,27.5 - parent: 31 - - uid: 9939 - components: - - type: Transform - pos: 34.5,27.5 - parent: 31 - uid: 9947 components: - type: Transform @@ -14791,15 +14568,45 @@ entities: - type: Transform pos: 22.5,26.5 parent: 31 - - uid: 10100 + - uid: 10154 components: - type: Transform - pos: 31.5,27.5 + pos: 3.5,35.5 parent: 31 - - uid: 10101 + - uid: 10160 components: - type: Transform - pos: 32.5,27.5 + pos: 12.5,16.5 + parent: 31 + - uid: 10161 + components: + - type: Transform + pos: -26.5,4.5 + parent: 31 + - uid: 10162 + components: + - type: Transform + pos: 12.5,18.5 + parent: 31 + - uid: 10168 + components: + - type: Transform + pos: 12.5,17.5 + parent: 31 + - uid: 10169 + components: + - type: Transform + pos: 12.5,15.5 + parent: 31 + - uid: 10173 + components: + - type: Transform + pos: -30.5,-1.5 + parent: 31 + - uid: 10174 + components: + - type: Transform + pos: 48.5,11.5 parent: 31 - uid: 10222 components: @@ -14926,6 +14733,11 @@ entities: - type: Transform pos: -3.5,-38.5 parent: 31 + - uid: 10397 + components: + - type: Transform + pos: -10.5,25.5 + parent: 31 - uid: 10496 components: - type: Transform @@ -15026,15 +14838,10 @@ entities: - type: Transform pos: -28.5,-11.5 parent: 31 - - uid: 10577 - components: - - type: Transform - pos: -27.5,-11.5 - parent: 31 - uid: 10578 components: - type: Transform - pos: -26.5,-11.5 + pos: -17.5,0.5 parent: 31 - uid: 10579 components: @@ -15046,6 +14853,31 @@ entities: - type: Transform pos: -28.5,-18.5 parent: 31 + - uid: 10581 + components: + - type: Transform + pos: -17.5,-0.5 + parent: 31 + - uid: 10582 + components: + - type: Transform + pos: -17.5,-1.5 + parent: 31 + - uid: 10586 + components: + - type: Transform + pos: -17.5,-1.5 + parent: 31 + - uid: 10587 + components: + - type: Transform + pos: -18.5,-0.5 + parent: 31 + - uid: 10588 + components: + - type: Transform + pos: -19.5,-0.5 + parent: 31 - uid: 10608 components: - type: Transform @@ -15191,16 +15023,6 @@ entities: - type: Transform pos: -13.5,9.5 parent: 31 - - uid: 10740 - components: - - type: Transform - pos: -11.5,7.5 - parent: 31 - - uid: 10741 - components: - - type: Transform - pos: -9.5,7.5 - parent: 31 - uid: 10742 components: - type: Transform @@ -15326,6 +15148,11 @@ entities: - type: Transform pos: 3.5,-25.5 parent: 31 + - uid: 10827 + components: + - type: Transform + pos: -26.5,-2.5 + parent: 31 - uid: 10832 components: - type: Transform @@ -15486,6 +15313,11 @@ entities: - type: Transform pos: 55.5,-6.5 parent: 31 + - uid: 10909 + components: + - type: Transform + pos: -26.5,-1.5 + parent: 31 - uid: 10966 components: - type: Transform @@ -15561,6 +15393,46 @@ entities: - type: Transform pos: 45.5,12.5 parent: 31 + - uid: 11049 + components: + - type: Transform + pos: -26.5,-0.5 + parent: 31 + - uid: 11106 + components: + - type: Transform + pos: -26.5,0.5 + parent: 31 + - uid: 11107 + components: + - type: Transform + pos: -27.5,0.5 + parent: 31 + - uid: 11120 + components: + - type: Transform + pos: -6.5,34.5 + parent: 31 + - uid: 11122 + components: + - type: Transform + pos: 0.5,34.5 + parent: 31 + - uid: 11126 + components: + - type: Transform + pos: 0.5,33.5 + parent: 31 + - uid: 11181 + components: + - type: Transform + pos: -26.5,-3.5 + parent: 31 + - uid: 11194 + components: + - type: Transform + pos: -9.5,34.5 + parent: 31 - uid: 11195 components: - type: Transform @@ -15581,10 +15453,15 @@ entities: - type: Transform pos: -5.5,28.5 parent: 31 - - uid: 11199 + - uid: 11200 components: - type: Transform - pos: -6.5,28.5 + pos: -28.5,0.5 + parent: 31 + - uid: 11201 + components: + - type: Transform + pos: -29.5,0.5 parent: 31 - uid: 11205 components: @@ -15611,6 +15488,31 @@ entities: - type: Transform pos: -28.5,-15.5 parent: 31 + - uid: 11225 + components: + - type: Transform + pos: -26.5,-4.5 + parent: 31 + - uid: 11226 + components: + - type: Transform + pos: -27.5,-4.5 + parent: 31 + - uid: 11227 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 31 + - uid: 11228 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 31 + - uid: 11229 + components: + - type: Transform + pos: -29.5,-5.5 + parent: 31 - uid: 11232 components: - type: Transform @@ -15671,6 +15573,11 @@ entities: - type: Transform pos: -20.5,-15.5 parent: 31 + - uid: 11244 + components: + - type: Transform + pos: -25.5,-4.5 + parent: 31 - uid: 11251 components: - type: Transform @@ -15686,6 +15593,21 @@ entities: - type: Transform pos: -32.5,7.5 parent: 31 + - uid: 11254 + components: + - type: Transform + pos: -25.5,-5.5 + parent: 31 + - uid: 11255 + components: + - type: Transform + pos: -25.5,-6.5 + parent: 31 + - uid: 11256 + components: + - type: Transform + pos: -25.5,-7.5 + parent: 31 - uid: 11257 components: - type: Transform @@ -15721,6 +15643,16 @@ entities: - type: Transform pos: -16.5,-16.5 parent: 31 + - uid: 11284 + components: + - type: Transform + pos: -25.5,-8.5 + parent: 31 + - uid: 11296 + components: + - type: Transform + pos: -20.5,-0.5 + parent: 31 - uid: 11305 components: - type: Transform @@ -15751,6 +15683,11 @@ entities: - type: Transform pos: 20.5,-23.5 parent: 31 + - uid: 11335 + components: + - type: Transform + pos: -14.5,-10.5 + parent: 31 - uid: 11350 components: - type: Transform @@ -15826,11 +15763,6 @@ entities: - type: Transform pos: 60.5,11.5 parent: 31 - - uid: 11445 - components: - - type: Transform - pos: -25.5,-3.5 - parent: 31 - uid: 11454 components: - type: Transform @@ -15881,6 +15813,11 @@ entities: - type: Transform pos: 52.5,21.5 parent: 31 + - uid: 11490 + components: + - type: Transform + pos: -13.5,-10.5 + parent: 31 - uid: 11515 components: - type: Transform @@ -16021,6 +15958,16 @@ entities: - type: Transform pos: -33.5,-21.5 parent: 31 + - uid: 11545 + components: + - type: Transform + pos: -15.5,-9.5 + parent: 31 + - uid: 11546 + components: + - type: Transform + pos: -12.5,-10.5 + parent: 31 - uid: 11613 components: - type: Transform @@ -16091,6 +16038,36 @@ entities: - type: Transform pos: 3.5,-33.5 parent: 31 + - uid: 11826 + components: + - type: Transform + pos: 48.5,-27.5 + parent: 31 + - uid: 11829 + components: + - type: Transform + pos: 50.5,-18.5 + parent: 31 + - uid: 11855 + components: + - type: Transform + pos: -7.5,14.5 + parent: 31 + - uid: 11857 + components: + - type: Transform + pos: -8.5,14.5 + parent: 31 + - uid: 11858 + components: + - type: Transform + pos: -7.5,14.5 + parent: 31 + - uid: 11859 + components: + - type: Transform + pos: -6.5,14.5 + parent: 31 - uid: 11942 components: - type: Transform @@ -16551,11 +16528,6 @@ entities: - type: Transform pos: -44.5,10.5 parent: 31 - - uid: 12526 - components: - - type: Transform - pos: 35.5,27.5 - parent: 31 - proto: CableApcStack entities: - uid: 94 @@ -16573,6 +16545,11 @@ entities: - type: Transform pos: 48.373375,5.713002 parent: 31 + - uid: 4620 + components: + - type: Transform + pos: 47.25442,-29.18218 + parent: 31 - proto: CableApcStack1 entities: - uid: 4263 @@ -16580,6 +16557,12 @@ entities: - type: Transform pos: 49.699306,-5.6046276 parent: 31 + - uid: 6731 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.259155,16.568325 + parent: 31 - uid: 9664 components: - type: Transform @@ -16591,12 +16574,23 @@ entities: rot: -1.5707963267948966 rad pos: -3.0297182,-43.247223 parent: 31 + - uid: 10063 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.89733,-9.702441 + parent: 31 - uid: 10901 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.31561,-5.6046276 parent: 31 + - uid: 11119 + components: + - type: Transform + pos: -24.27628,16.630825 + parent: 31 - proto: CableApcStack10 entities: - uid: 2048 @@ -16631,6 +16625,11 @@ entities: - type: Transform pos: -22.5,21.5 parent: 31 + - uid: 155 + components: + - type: Transform + pos: 13.5,21.5 + parent: 31 - uid: 202 components: - type: Transform @@ -16646,6 +16645,11 @@ entities: - type: Transform pos: -21.5,22.5 parent: 31 + - uid: 441 + components: + - type: Transform + pos: -33.5,9.5 + parent: 31 - uid: 544 components: - type: Transform @@ -16716,15 +16720,15 @@ entities: - type: Transform pos: -27.5,-31.5 parent: 31 - - uid: 805 + - uid: 803 components: - type: Transform - pos: -27.5,-30.5 + pos: -5.5,-9.5 parent: 31 - - uid: 840 + - uid: 805 components: - type: Transform - pos: -12.5,-10.5 + pos: -27.5,-30.5 parent: 31 - uid: 872 components: @@ -16746,11 +16750,6 @@ entities: - type: Transform pos: -28.5,-23.5 parent: 31 - - uid: 1057 - components: - - type: Transform - pos: -12.5,-12.5 - parent: 31 - uid: 1070 components: - type: Transform @@ -16786,6 +16785,16 @@ entities: - type: Transform pos: -9.5,-14.5 parent: 31 + - uid: 1161 + components: + - type: Transform + pos: -18.5,16.5 + parent: 31 + - uid: 1170 + components: + - type: Transform + pos: -12.5,14.5 + parent: 31 - uid: 1175 components: - type: Transform @@ -16866,6 +16875,11 @@ entities: - type: Transform pos: -28.5,-26.5 parent: 31 + - uid: 1425 + components: + - type: Transform + pos: -13.5,14.5 + parent: 31 - uid: 1458 components: - type: Transform @@ -16941,6 +16955,11 @@ entities: - type: Transform pos: 31.5,-45.5 parent: 31 + - uid: 1926 + components: + - type: Transform + pos: -36.5,-34.5 + parent: 31 - uid: 2000 components: - type: Transform @@ -16961,6 +16980,11 @@ entities: - type: Transform pos: -26.5,-13.5 parent: 31 + - uid: 2059 + components: + - type: Transform + pos: -33.5,5.5 + parent: 31 - uid: 2120 components: - type: Transform @@ -17011,25 +17035,70 @@ entities: - type: Transform pos: 27.5,-10.5 parent: 31 + - uid: 2461 + components: + - type: Transform + pos: -38.5,-33.5 + parent: 31 - uid: 2534 components: - type: Transform pos: -18.5,15.5 parent: 31 - - uid: 2707 + - uid: 2672 components: - type: Transform - pos: -27.5,-11.5 + pos: -29.5,-10.5 parent: 31 - - uid: 2713 + - uid: 2688 components: - type: Transform - pos: -13.5,-12.5 + pos: -28.5,-9.5 parent: 31 - - uid: 2714 + - uid: 2693 components: - type: Transform - pos: -14.5,-12.5 + pos: -35.5,7.5 + parent: 31 + - uid: 2732 + components: + - type: Transform + pos: -38.5,-32.5 + parent: 31 + - uid: 2742 + components: + - type: Transform + pos: -34.5,5.5 + parent: 31 + - uid: 2743 + components: + - type: Transform + pos: -35.5,5.5 + parent: 31 + - uid: 2745 + components: + - type: Transform + pos: -34.5,8.5 + parent: 31 + - uid: 2746 + components: + - type: Transform + pos: -34.5,9.5 + parent: 31 + - uid: 2747 + components: + - type: Transform + pos: -34.5,7.5 + parent: 31 + - uid: 2748 + components: + - type: Transform + pos: -35.5,6.5 + parent: 31 + - uid: 2770 + components: + - type: Transform + pos: -38.5,-34.5 parent: 31 - uid: 2834 components: @@ -17046,11 +17115,6 @@ entities: - type: Transform pos: -19.5,-31.5 parent: 31 - - uid: 2850 - components: - - type: Transform - pos: -15.5,-12.5 - parent: 31 - uid: 2937 components: - type: Transform @@ -17071,6 +17135,11 @@ entities: - type: Transform pos: 53.5,4.5 parent: 31 + - uid: 3115 + components: + - type: Transform + pos: -4.5,-9.5 + parent: 31 - uid: 3123 components: - type: Transform @@ -17081,6 +17150,11 @@ entities: - type: Transform pos: 32.5,8.5 parent: 31 + - uid: 3204 + components: + - type: Transform + pos: 44.5,-23.5 + parent: 31 - uid: 3272 components: - type: Transform @@ -17446,16 +17520,6 @@ entities: - type: Transform pos: -19.5,-34.5 parent: 31 - - uid: 3365 - components: - - type: Transform - pos: -10.5,-10.5 - parent: 31 - - uid: 3374 - components: - - type: Transform - pos: -11.5,-10.5 - parent: 31 - uid: 3391 components: - type: Transform @@ -17476,35 +17540,10 @@ entities: - type: Transform pos: -9.5,-10.5 parent: 31 - - uid: 3395 - components: - - type: Transform - pos: -8.5,-10.5 - parent: 31 - uid: 3396 components: - type: Transform - pos: -7.5,-10.5 - parent: 31 - - uid: 3397 - components: - - type: Transform - pos: -6.5,-10.5 - parent: 31 - - uid: 3398 - components: - - type: Transform - pos: -5.5,-10.5 - parent: 31 - - uid: 3399 - components: - - type: Transform - pos: -4.5,-10.5 - parent: 31 - - uid: 3400 - components: - - type: Transform - pos: -3.5,-10.5 + pos: -8.5,-9.5 parent: 31 - uid: 3401 components: @@ -17526,11 +17565,6 @@ entities: - type: Transform pos: -0.5,-9.5 parent: 31 - - uid: 3426 - components: - - type: Transform - pos: -26.5,-11.5 - parent: 31 - uid: 3429 components: - type: Transform @@ -17651,11 +17685,6 @@ entities: - type: Transform pos: -32.5,5.5 parent: 31 - - uid: 3453 - components: - - type: Transform - pos: -32.5,6.5 - parent: 31 - uid: 3454 components: - type: Transform @@ -17741,11 +17770,6 @@ entities: - type: Transform pos: -23.5,14.5 parent: 31 - - uid: 3472 - components: - - type: Transform - pos: -22.5,14.5 - parent: 31 - uid: 3473 components: - type: Transform @@ -17761,21 +17785,6 @@ entities: - type: Transform pos: -19.5,14.5 parent: 31 - - uid: 3482 - components: - - type: Transform - pos: -18.5,16.5 - parent: 31 - - uid: 3483 - components: - - type: Transform - pos: -17.5,16.5 - parent: 31 - - uid: 3484 - components: - - type: Transform - pos: -16.5,16.5 - parent: 31 - uid: 3486 components: - type: Transform @@ -17981,11 +17990,6 @@ entities: - type: Transform pos: 11.5,19.5 parent: 31 - - uid: 3532 - components: - - type: Transform - pos: 12.5,20.5 - parent: 31 - uid: 3533 components: - type: Transform @@ -18201,6 +18205,11 @@ entities: - type: Transform pos: 7.5,-19.5 parent: 31 + - uid: 3783 + components: + - type: Transform + pos: -29.5,-9.5 + parent: 31 - uid: 3851 components: - type: Transform @@ -18221,11 +18230,26 @@ entities: - type: Transform pos: 65.5,7.5 parent: 31 + - uid: 4018 + components: + - type: Transform + pos: -9.5,-9.5 + parent: 31 + - uid: 4130 + components: + - type: Transform + pos: -37.5,-34.5 + parent: 31 - uid: 4233 components: - type: Transform pos: -21.5,24.5 parent: 31 + - uid: 4235 + components: + - type: Transform + pos: 13.5,19.5 + parent: 31 - uid: 4242 components: - type: Transform @@ -18401,6 +18425,11 @@ entities: - type: Transform pos: 55.5,1.5 parent: 31 + - uid: 4599 + components: + - type: Transform + pos: 13.5,20.5 + parent: 31 - uid: 4652 components: - type: Transform @@ -18716,6 +18745,11 @@ entities: - type: Transform pos: -4.5,25.5 parent: 31 + - uid: 5987 + components: + - type: Transform + pos: -7.5,-9.5 + parent: 31 - uid: 6198 components: - type: Transform @@ -19081,6 +19115,26 @@ entities: - type: Transform pos: 50.5,3.5 parent: 31 + - uid: 6992 + components: + - type: Transform + pos: -8.5,14.5 + parent: 31 + - uid: 7011 + components: + - type: Transform + pos: 43.5,-24.5 + parent: 31 + - uid: 7025 + components: + - type: Transform + pos: -8.5,13.5 + parent: 31 + - uid: 7038 + components: + - type: Transform + pos: 44.5,-25.5 + parent: 31 - uid: 7173 components: - type: Transform @@ -19101,11 +19155,6 @@ entities: - type: Transform pos: 0.5,-8.5 parent: 31 - - uid: 7384 - components: - - type: Transform - pos: -12.5,-11.5 - parent: 31 - uid: 7385 components: - type: Transform @@ -19176,6 +19225,11 @@ entities: - type: Transform pos: 63.5,6.5 parent: 31 + - uid: 8200 + components: + - type: Transform + pos: -3.5,-9.5 + parent: 31 - uid: 8351 components: - type: Transform @@ -19191,6 +19245,16 @@ entities: - type: Transform pos: 36.5,-45.5 parent: 31 + - uid: 8378 + components: + - type: Transform + pos: 44.5,-26.5 + parent: 31 + - uid: 8379 + components: + - type: Transform + pos: 43.5,-25.5 + parent: 31 - uid: 8452 components: - type: Transform @@ -19296,30 +19360,10 @@ entities: - type: Transform pos: -35.5,-34.5 parent: 31 - - uid: 8614 - components: - - type: Transform - pos: -35.5,-33.5 - parent: 31 - - uid: 8615 - components: - - type: Transform - pos: -35.5,-32.5 - parent: 31 - - uid: 8616 - components: - - type: Transform - pos: -35.5,-31.5 - parent: 31 - uid: 8617 components: - type: Transform - pos: -36.5,-31.5 - parent: 31 - - uid: 8618 - components: - - type: Transform - pos: -37.5,-31.5 + pos: 44.5,-22.5 parent: 31 - uid: 8619 components: @@ -19431,6 +19475,16 @@ entities: - type: Transform pos: -31.5,-31.5 parent: 31 + - uid: 8913 + components: + - type: Transform + pos: 43.5,-23.5 + parent: 31 + - uid: 8928 + components: + - type: Transform + pos: -6.5,-9.5 + parent: 31 - uid: 9000 components: - type: Transform @@ -19446,6 +19500,16 @@ entities: - type: Transform pos: 54.5,7.5 parent: 31 + - uid: 9220 + components: + - type: Transform + pos: -8.5,12.5 + parent: 31 + - uid: 9275 + components: + - type: Transform + pos: -8.5,11.5 + parent: 31 - uid: 9390 components: - type: Transform @@ -19586,6 +19650,16 @@ entities: - type: Transform pos: 43.5,0.5 parent: 31 + - uid: 9550 + components: + - type: Transform + pos: -20.5,13.5 + parent: 31 + - uid: 9551 + components: + - type: Transform + pos: -20.5,12.5 + parent: 31 - uid: 9591 components: - type: Transform @@ -19611,6 +19685,11 @@ entities: - type: Transform pos: 24.5,-13.5 parent: 31 + - uid: 9969 + components: + - type: Transform + pos: -19.5,12.5 + parent: 31 - uid: 10230 components: - type: Transform @@ -19691,16 +19770,6 @@ entities: - type: Transform pos: -14.5,14.5 parent: 31 - - uid: 10715 - components: - - type: Transform - pos: -13.5,14.5 - parent: 31 - - uid: 10716 - components: - - type: Transform - pos: -12.5,14.5 - parent: 31 - uid: 10717 components: - type: Transform @@ -19721,31 +19790,6 @@ entities: - type: Transform pos: -9.5,15.5 parent: 31 - - uid: 10721 - components: - - type: Transform - pos: -8.5,15.5 - parent: 31 - - uid: 10722 - components: - - type: Transform - pos: -8.5,14.5 - parent: 31 - - uid: 10723 - components: - - type: Transform - pos: -8.5,13.5 - parent: 31 - - uid: 10724 - components: - - type: Transform - pos: -8.5,12.5 - parent: 31 - - uid: 10725 - components: - - type: Transform - pos: -8.5,11.5 - parent: 31 - uid: 10726 components: - type: Transform @@ -19811,6 +19855,11 @@ entities: - type: Transform pos: -16.5,6.5 parent: 31 + - uid: 11131 + components: + - type: Transform + pos: -22.5,14.5 + parent: 31 - uid: 11204 components: - type: Transform @@ -19861,6 +19910,16 @@ entities: - type: Transform pos: -31.5,7.5 parent: 31 + - uid: 11549 + components: + - type: Transform + pos: -2.5,-9.5 + parent: 31 + - uid: 11854 + components: + - type: Transform + pos: -8.5,15.5 + parent: 31 - uid: 12256 components: - type: Transform @@ -20883,18 +20942,23 @@ entities: - type: Transform pos: 29.54536,1.7105546 parent: 31 - - uid: 6023 + - uid: 2368 components: - type: Transform - pos: 48.339085,5.504549 + pos: 47.462757,-29.494898 parent: 31 - - uid: 7634 + - uid: 6023 components: - type: Transform - pos: -20.539572,25.33725 + pos: 48.339085,5.504549 parent: 31 - proto: CableMV entities: + - uid: 72 + components: + - type: Transform + pos: -25.5,-4.5 + parent: 31 - uid: 96 components: - type: Transform @@ -20905,6 +20969,11 @@ entities: - type: Transform pos: -36.5,-6.5 parent: 31 + - uid: 396 + components: + - type: Transform + pos: -34.5,-5.5 + parent: 31 - uid: 407 components: - type: Transform @@ -20960,26 +21029,11 @@ entities: - type: Transform pos: 37.5,3.5 parent: 31 - - uid: 675 - components: - - type: Transform - pos: -12.5,-10.5 - parent: 31 - uid: 678 components: - type: Transform pos: 22.5,-11.5 parent: 31 - - uid: 679 - components: - - type: Transform - pos: -14.5,-10.5 - parent: 31 - - uid: 694 - components: - - type: Transform - pos: -13.5,-10.5 - parent: 31 - uid: 724 components: - type: Transform @@ -21010,11 +21064,31 @@ entities: - type: Transform pos: 12.5,21.5 parent: 31 + - uid: 906 + components: + - type: Transform + pos: -27.5,-4.5 + parent: 31 + - uid: 920 + components: + - type: Transform + pos: -21.5,13.5 + parent: 31 - uid: 931 components: - type: Transform pos: 8.5,26.5 parent: 31 + - uid: 950 + components: + - type: Transform + pos: -28.5,-4.5 + parent: 31 + - uid: 952 + components: + - type: Transform + pos: -26.5,-4.5 + parent: 31 - uid: 986 components: - type: Transform @@ -21040,6 +21114,16 @@ entities: - type: Transform pos: 12.5,22.5 parent: 31 + - uid: 1344 + components: + - type: Transform + pos: -21.5,14.5 + parent: 31 + - uid: 1396 + components: + - type: Transform + pos: -13.5,14.5 + parent: 31 - uid: 1569 components: - type: Transform @@ -21055,11 +21139,6 @@ entities: - type: Transform pos: 35.5,3.5 parent: 31 - - uid: 1599 - components: - - type: Transform - pos: -20.5,15.5 - parent: 31 - uid: 1601 components: - type: Transform @@ -21075,6 +21154,21 @@ entities: - type: Transform pos: 56.5,7.5 parent: 31 + - uid: 1741 + components: + - type: Transform + pos: -16.5,-5.5 + parent: 31 + - uid: 1763 + components: + - type: Transform + pos: -17.5,-1.5 + parent: 31 + - uid: 1764 + components: + - type: Transform + pos: -17.5,-2.5 + parent: 31 - uid: 1844 components: - type: Transform @@ -21085,6 +21179,26 @@ entities: - type: Transform pos: 60.5,7.5 parent: 31 + - uid: 1964 + components: + - type: Transform + pos: -21.5,12.5 + parent: 31 + - uid: 2071 + components: + - type: Transform + pos: -35.5,-5.5 + parent: 31 + - uid: 2088 + components: + - type: Transform + pos: -32.5,-5.5 + parent: 31 + - uid: 2099 + components: + - type: Transform + pos: -20.5,14.5 + parent: 31 - uid: 2182 components: - type: Transform @@ -21095,10 +21209,10 @@ entities: - type: Transform pos: -12.5,-27.5 parent: 31 - - uid: 2264 + - uid: 2297 components: - type: Transform - pos: -11.5,-10.5 + pos: -19.5,14.5 parent: 31 - uid: 2432 components: @@ -21135,15 +21249,25 @@ entities: - type: Transform pos: -11.5,-35.5 parent: 31 - - uid: 2738 + - uid: 2744 components: - type: Transform - pos: -16.5,-1.5 + pos: -3.5,-21.5 parent: 31 - - uid: 2744 + - uid: 2750 components: - type: Transform - pos: -3.5,-21.5 + pos: -29.5,-10.5 + parent: 31 + - uid: 2783 + components: + - type: Transform + pos: -29.5,-9.5 + parent: 31 + - uid: 2817 + components: + - type: Transform + pos: -15.5,-8.5 parent: 31 - uid: 2822 components: @@ -21195,11 +21319,6 @@ entities: - type: Transform pos: 14.5,-8.5 parent: 31 - - uid: 2908 - components: - - type: Transform - pos: -12.5,-11.5 - parent: 31 - uid: 3068 components: - type: Transform @@ -21300,21 +21419,31 @@ entities: - type: Transform pos: -10.5,-35.5 parent: 31 - - uid: 3479 + - uid: 3398 components: - type: Transform - pos: -19.5,15.5 + pos: -17.5,0.5 parent: 31 - uid: 3481 components: - type: Transform pos: 12.5,16.5 parent: 31 + - uid: 3577 + components: + - type: Transform + pos: -16.5,-6.5 + parent: 31 - uid: 3589 components: - type: Transform pos: 12.5,24.5 parent: 31 + - uid: 3591 + components: + - type: Transform + pos: -17.5,-0.5 + parent: 31 - uid: 3597 components: - type: Transform @@ -21885,20 +22014,10 @@ entities: - type: Transform pos: -9.5,-9.5 parent: 31 - - uid: 3770 - components: - - type: Transform - pos: -18.5,-3.5 - parent: 31 - - uid: 3771 - components: - - type: Transform - pos: -18.5,-2.5 - parent: 31 - - uid: 3772 + - uid: 3769 components: - type: Transform - pos: -17.5,-2.5 + pos: -28.5,-9.5 parent: 31 - uid: 3773 components: @@ -21935,31 +22054,6 @@ entities: - type: Transform pos: -11.5,2.5 parent: 31 - - uid: 3781 - components: - - type: Transform - pos: -26.5,-4.5 - parent: 31 - - uid: 3782 - components: - - type: Transform - pos: -25.5,-4.5 - parent: 31 - - uid: 3783 - components: - - type: Transform - pos: -25.5,-6.5 - parent: 31 - - uid: 3784 - components: - - type: Transform - pos: -25.5,-7.5 - parent: 31 - - uid: 3785 - components: - - type: Transform - pos: -25.5,-5.5 - parent: 31 - uid: 3786 components: - type: Transform @@ -21970,56 +22064,11 @@ entities: - type: Transform pos: -15.5,-9.5 parent: 31 - - uid: 3790 - components: - - type: Transform - pos: -14.5,-9.5 - parent: 31 - - uid: 3791 - components: - - type: Transform - pos: -14.5,-8.5 - parent: 31 - uid: 3792 components: - type: Transform pos: -32.5,-6.5 parent: 31 - - uid: 3796 - components: - - type: Transform - pos: -33.5,-6.5 - parent: 31 - - uid: 3798 - components: - - type: Transform - pos: -25.5,-8.5 - parent: 31 - - uid: 3799 - components: - - type: Transform - pos: -26.5,-8.5 - parent: 31 - - uid: 3800 - components: - - type: Transform - pos: -27.5,-8.5 - parent: 31 - - uid: 3801 - components: - - type: Transform - pos: -28.5,-8.5 - parent: 31 - - uid: 3802 - components: - - type: Transform - pos: -29.5,-8.5 - parent: 31 - - uid: 3803 - components: - - type: Transform - pos: -34.5,-6.5 - parent: 31 - uid: 3804 components: - type: Transform @@ -22100,26 +22149,11 @@ entities: - type: Transform pos: 21.5,-13.5 parent: 31 - - uid: 3846 - components: - - type: Transform - pos: -6.5,15.5 - parent: 31 - uid: 3847 components: - type: Transform pos: -5.5,15.5 parent: 31 - - uid: 3848 - components: - - type: Transform - pos: -15.5,-4.5 - parent: 31 - - uid: 3850 - components: - - type: Transform - pos: -16.5,16.5 - parent: 31 - uid: 3870 components: - type: Transform @@ -22130,16 +22164,6 @@ entities: - type: Transform pos: -31.5,-12.5 parent: 31 - - uid: 3896 - components: - - type: Transform - pos: -7.5,15.5 - parent: 31 - - uid: 3919 - components: - - type: Transform - pos: -15.5,-5.5 - parent: 31 - uid: 3920 components: - type: Transform @@ -22150,6 +22174,11 @@ entities: - type: Transform pos: -5.5,-7.5 parent: 31 + - uid: 4120 + components: + - type: Transform + pos: -19.5,12.5 + parent: 31 - uid: 4139 components: - type: Transform @@ -22165,6 +22194,11 @@ entities: - type: Transform pos: 18.5,-13.5 parent: 31 + - uid: 4375 + components: + - type: Transform + pos: -30.5,-7.5 + parent: 31 - uid: 4467 components: - type: Transform @@ -22190,6 +22224,11 @@ entities: - type: Transform pos: 1.5,-30.5 parent: 31 + - uid: 4958 + components: + - type: Transform + pos: -33.5,-5.5 + parent: 31 - uid: 4999 components: - type: Transform @@ -22450,6 +22489,21 @@ entities: - type: Transform pos: 46.5,10.5 parent: 31 + - uid: 7002 + components: + - type: Transform + pos: -29.5,-5.5 + parent: 31 + - uid: 7013 + components: + - type: Transform + pos: 44.5,-26.5 + parent: 31 + - uid: 7023 + components: + - type: Transform + pos: 13.5,21.5 + parent: 31 - uid: 7057 components: - type: Transform @@ -22475,11 +22529,6 @@ entities: - type: Transform pos: 0.5,-8.5 parent: 31 - - uid: 7209 - components: - - type: Transform - pos: -26.5,-11.5 - parent: 31 - uid: 7255 components: - type: Transform @@ -22490,10 +22539,15 @@ entities: - type: Transform pos: -5.5,-21.5 parent: 31 - - uid: 7404 + - uid: 7321 components: - type: Transform - pos: -16.5,-0.5 + pos: -8.5,15.5 + parent: 31 + - uid: 7437 + components: + - type: Transform + pos: -29.5,-7.5 parent: 31 - uid: 7456 components: @@ -22525,11 +22579,26 @@ entities: - type: Transform pos: 7.5,13.5 parent: 31 + - uid: 7816 + components: + - type: Transform + pos: -11.5,-13.5 + parent: 31 + - uid: 7832 + components: + - type: Transform + pos: -11.5,-12.5 + parent: 31 - uid: 7860 components: - type: Transform pos: 7.5,12.5 parent: 31 + - uid: 7896 + components: + - type: Transform + pos: -11.5,-11.5 + parent: 31 - uid: 8029 components: - type: Transform @@ -22555,15 +22624,10 @@ entities: - type: Transform pos: -16.5,0.5 parent: 31 - - uid: 8071 - components: - - type: Transform - pos: -18.5,16.5 - parent: 31 - - uid: 8077 + - uid: 8045 components: - type: Transform - pos: 12.5,20.5 + pos: -31.5,-7.5 parent: 31 - uid: 8078 components: @@ -22680,6 +22744,66 @@ entities: - type: Transform pos: -6.5,-26.5 parent: 31 + - uid: 8229 + components: + - type: Transform + pos: 13.5,19.5 + parent: 31 + - uid: 8234 + components: + - type: Transform + pos: -10.5,-14.5 + parent: 31 + - uid: 8251 + components: + - type: Transform + pos: -9.5,-13.5 + parent: 31 + - uid: 8255 + components: + - type: Transform + pos: -9.5,-14.5 + parent: 31 + - uid: 8256 + components: + - type: Transform + pos: -11.5,-14.5 + parent: 31 + - uid: 8257 + components: + - type: Transform + pos: -9.5,-11.5 + parent: 31 + - uid: 8258 + components: + - type: Transform + pos: -9.5,-12.5 + parent: 31 + - uid: 8294 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 31 + - uid: 8299 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 31 + - uid: 8335 + components: + - type: Transform + pos: 45.5,-25.5 + parent: 31 + - uid: 8336 + components: + - type: Transform + pos: 44.5,-25.5 + parent: 31 + - uid: 8440 + components: + - type: Transform + pos: -29.5,-6.5 + parent: 31 - uid: 8491 components: - type: Transform @@ -22725,10 +22849,20 @@ entities: - type: Transform pos: -32.5,-25.5 parent: 31 - - uid: 8782 + - uid: 8738 components: - type: Transform - pos: -8.5,15.5 + pos: -24.5,-4.5 + parent: 31 + - uid: 8740 + components: + - type: Transform + pos: -24.5,-3.5 + parent: 31 + - uid: 8742 + components: + - type: Transform + pos: 13.5,20.5 parent: 31 - uid: 9050 components: @@ -22750,21 +22884,26 @@ entities: - type: Transform pos: -18.5,14.5 parent: 31 - - uid: 9083 + - uid: 9084 components: - type: Transform - pos: -17.5,16.5 + pos: -17.5,14.5 parent: 31 - - uid: 9084 + - uid: 9088 components: - type: Transform - pos: -17.5,14.5 + pos: -12.5,14.5 parent: 31 - uid: 9141 components: - type: Transform pos: 21.5,-11.5 parent: 31 + - uid: 9181 + components: + - type: Transform + pos: -5.5,15.5 + parent: 31 - uid: 9202 components: - type: Transform @@ -22775,10 +22914,15 @@ entities: - type: Transform pos: -9.5,-10.5 parent: 31 - - uid: 9278 + - uid: 9284 components: - type: Transform - pos: -10.5,-10.5 + pos: -6.5,15.5 + parent: 31 + - uid: 9331 + components: + - type: Transform + pos: -7.5,15.5 parent: 31 - uid: 9505 components: @@ -22800,11 +22944,6 @@ entities: - type: Transform pos: -14.5,14.5 parent: 31 - - uid: 9621 - components: - - type: Transform - pos: -13.5,14.5 - parent: 31 - uid: 9625 components: - type: Transform @@ -22830,15 +22969,15 @@ entities: - type: Transform pos: 44.5,8.5 parent: 31 - - uid: 9869 + - uid: 9870 components: - type: Transform - pos: -12.5,14.5 + pos: -12.5,13.5 parent: 31 - - uid: 9870 + - uid: 9933 components: - type: Transform - pos: -12.5,13.5 + pos: -20.5,12.5 parent: 31 - uid: 10229 components: @@ -22870,21 +23009,11 @@ entities: - type: Transform pos: 53.5,-2.5 parent: 31 - - uid: 10356 - components: - - type: Transform - pos: -15.5,-12.5 - parent: 31 - uid: 10357 components: - type: Transform pos: -26.5,-13.5 parent: 31 - - uid: 10360 - components: - - type: Transform - pos: -27.5,-11.5 - parent: 31 - uid: 10361 components: - type: Transform @@ -22925,31 +23054,6 @@ entities: - type: Transform pos: -32.5,-8.5 parent: 31 - - uid: 10369 - components: - - type: Transform - pos: -31.5,-8.5 - parent: 31 - - uid: 10370 - components: - - type: Transform - pos: -30.5,-8.5 - parent: 31 - - uid: 10442 - components: - - type: Transform - pos: -12.5,-12.5 - parent: 31 - - uid: 10445 - components: - - type: Transform - pos: -14.5,-12.5 - parent: 31 - - uid: 10447 - components: - - type: Transform - pos: -13.5,-12.5 - parent: 31 - uid: 10525 components: - type: Transform @@ -23005,6 +23109,11 @@ entities: - type: Transform pos: 49.5,-4.5 parent: 31 + - uid: 10820 + components: + - type: Transform + pos: -24.5,-2.5 + parent: 31 - uid: 10848 components: - type: Transform @@ -23185,11 +23294,36 @@ entities: - type: Transform pos: 26.5,14.5 parent: 31 + - uid: 11450 + components: + - type: Transform + pos: -11.5,-10.5 + parent: 31 + - uid: 11472 + components: + - type: Transform + pos: -13.5,-10.5 + parent: 31 + - uid: 11482 + components: + - type: Transform + pos: -12.5,-10.5 + parent: 31 - uid: 11483 components: - type: Transform pos: -12.5,-35.5 parent: 31 + - uid: 11484 + components: + - type: Transform + pos: -14.5,-10.5 + parent: 31 + - uid: 11486 + components: + - type: Transform + pos: -15.5,-10.5 + parent: 31 - uid: 11487 components: - type: Transform @@ -23277,6 +23411,19 @@ entities: - type: Transform pos: 48.35775,5.619252 parent: 31 + - uid: 2727 + components: + - type: Transform + pos: 47.63984,-29.244724 + parent: 31 +- proto: CableMVStack1 + entities: + - uid: 3246 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.078724,16.10648 + parent: 31 - proto: CableTerminal entities: - uid: 4327 @@ -23347,6 +23494,11 @@ entities: rot: 3.141592653589793 rad pos: 55.5,3.5 parent: 31 + - uid: 8337 + components: + - type: Transform + pos: 43.5,-24.5 + parent: 31 - uid: 8573 components: - type: Transform @@ -23387,13 +23539,6 @@ entities: - type: Transform pos: 5.6265216,-33.554047 parent: 31 -- proto: CaptainIDCard - entities: - - uid: 4684 - components: - - type: Transform - pos: 6.5105124,24.655684 - parent: 31 - proto: CarbonDioxideCanister entities: - uid: 10010 @@ -23516,100 +23661,36 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-5.5 parent: 31 - - uid: 4700 - components: - - type: Transform - pos: -7.5,21.5 - parent: 31 - - uid: 8271 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,22.5 - parent: 31 - - uid: 8919 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-5.5 - parent: 31 - - uid: 8920 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-6.5 - parent: 31 - - uid: 8921 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-7.5 - parent: 31 - - uid: 8922 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-7.5 - parent: 31 - - uid: 8923 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-7.5 - parent: 31 - - uid: 8924 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-6.5 - parent: 31 - - uid: 8925 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-6.5 - parent: 31 - - uid: 8926 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-5.5 - parent: 31 - - uid: 8927 + - uid: 4383 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-5.5 + pos: -11.5,-11.5 parent: 31 - - uid: 8928 + - uid: 4700 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-4.5 + pos: -7.5,21.5 parent: 31 - - uid: 8929 + - uid: 7000 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-4.5 + pos: -12.5,-10.5 parent: 31 - - uid: 8931 + - uid: 8271 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,-5.5 + pos: -7.5,22.5 parent: 31 - - uid: 8932 + - uid: 8492 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-6.5 + pos: -12.5,-11.5 parent: 31 - - uid: 8933 + - uid: 8496 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-7.5 + pos: -11.5,-10.5 parent: 31 - uid: 9887 components: @@ -23659,18 +23740,6 @@ entities: rot: 1.5707963267948966 rad pos: -12.5,-39.5 parent: 31 - - uid: 10321 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-8.5 - parent: 31 - - uid: 10322 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-8.5 - parent: 31 - uid: 11039 components: - type: Transform @@ -23731,11 +23800,27 @@ entities: parent: 31 - proto: CarpetBlack entities: - - uid: 1449 + - uid: 754 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,16.5 + pos: 2.5,31.5 + parent: 31 + - uid: 984 + components: + - type: Transform + pos: 1.5,31.5 + parent: 31 + - uid: 1109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,33.5 + parent: 31 + - uid: 2278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,32.5 parent: 31 - uid: 4184 components: @@ -23837,17 +23922,11 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-2.5 parent: 31 - - uid: 6281 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,17.5 - parent: 31 - - uid: 6309 + - uid: 6132 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,17.5 + rot: -1.5707963267948966 rad + pos: 1.5,32.5 parent: 31 - uid: 7360 components: @@ -23873,6 +23952,34 @@ entities: rot: 3.141592653589793 rad pos: -10.5,-7.5 parent: 31 + - uid: 10149 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-0.5 + parent: 31 + - uid: 10151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-1.5 + parent: 31 + - uid: 10152 + components: + - type: Transform + pos: -30.5,-1.5 + parent: 31 + - uid: 10153 + components: + - type: Transform + pos: -30.5,-0.5 + parent: 31 + - uid: 11162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,33.5 + parent: 31 - uid: 11464 components: - type: Transform @@ -23943,26 +24050,6 @@ entities: - type: Transform pos: 7.5,24.5 parent: 31 - - uid: 4107 - components: - - type: Transform - pos: -29.5,-1.5 - parent: 31 - - uid: 4108 - components: - - type: Transform - pos: -29.5,-2.5 - parent: 31 - - uid: 4109 - components: - - type: Transform - pos: -28.5,-1.5 - parent: 31 - - uid: 4110 - components: - - type: Transform - pos: -28.5,-2.5 - parent: 31 - uid: 4922 components: - type: Transform @@ -24019,37 +24106,35 @@ entities: rot: 3.141592653589793 rad pos: -0.5,0.5 parent: 31 - - uid: 4058 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,0.5 - parent: 31 - - uid: 4062 + - uid: 2863 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,1.5 + rot: -1.5707963267948966 rad + pos: -24.5,-0.5 parent: 31 - - uid: 4099 + - uid: 3782 components: - type: Transform - pos: -29.5,1.5 + rot: -1.5707963267948966 rad + pos: -24.5,0.5 parent: 31 - - uid: 4100 + - uid: 4058 components: - type: Transform - pos: -29.5,0.5 + rot: 3.141592653589793 rad + pos: 0.5,0.5 parent: 31 - - uid: 4101 + - uid: 4062 components: - type: Transform - pos: -28.5,1.5 + rot: 3.141592653589793 rad + pos: -0.5,1.5 parent: 31 - - uid: 4102 + - uid: 4072 components: - type: Transform - pos: -28.5,0.5 + rot: -1.5707963267948966 rad + pos: -24.5,-1.5 parent: 31 - uid: 8423 components: @@ -24057,56 +24142,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,1.5 parent: 31 - - uid: 8726 - components: - - type: Transform - pos: -34.5,-29.5 - parent: 31 - - uid: 8727 - components: - - type: Transform - pos: -34.5,-28.5 - parent: 31 - - uid: 8728 - components: - - type: Transform - pos: -35.5,-28.5 - parent: 31 - - uid: 8729 - components: - - type: Transform - pos: -36.5,-28.5 - parent: 31 - - uid: 8730 - components: - - type: Transform - pos: -36.5,-29.5 - parent: 31 - - uid: 8731 - components: - - type: Transform - pos: -35.5,-29.5 - parent: 31 - - uid: 8911 - components: - - type: Transform - pos: -24.5,-2.5 - parent: 31 - - uid: 8912 - components: - - type: Transform - pos: -23.5,-2.5 - parent: 31 - - uid: 8913 - components: - - type: Transform - pos: -23.5,-1.5 - parent: 31 - - uid: 8914 - components: - - type: Transform - pos: -24.5,-1.5 - parent: 31 - proto: CarpetOrange entities: - uid: 832 @@ -24154,53 +24189,49 @@ entities: - type: Transform pos: 41.5,-1.5 parent: 31 -- proto: CarpetPink +- proto: CarpetPurple entities: - - uid: 4103 - components: - - type: Transform - pos: -29.5,-4.5 - parent: 31 - - uid: 4104 + - uid: 1698 components: - type: Transform - pos: -29.5,-5.5 + rot: -1.5707963267948966 rad + pos: -4.5,-23.5 parent: 31 - - uid: 4105 + - uid: 2087 components: - type: Transform - pos: -28.5,-4.5 + rot: -1.5707963267948966 rad + pos: -3.5,-23.5 parent: 31 - - uid: 4106 + - uid: 2125 components: - type: Transform - pos: -28.5,-5.5 + rot: 1.5707963267948966 rad + pos: -21.5,-22.5 parent: 31 -- proto: CarpetPurple - entities: - - uid: 1686 + - uid: 2380 components: - type: Transform rot: 1.5707963267948966 rad - pos: 7.5,-25.5 + pos: 8.5,-25.5 parent: 31 - - uid: 1698 + - uid: 2430 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-23.5 + rot: 1.5707963267948966 rad + pos: 8.5,-23.5 parent: 31 - - uid: 2087 + - uid: 2431 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-23.5 + rot: 1.5707963267948966 rad + pos: 8.5,-24.5 parent: 31 - - uid: 2125 + - uid: 2434 components: - type: Transform rot: 1.5707963267948966 rad - pos: -21.5,-22.5 + pos: 8.5,-22.5 parent: 31 - uid: 4718 components: @@ -24238,12 +24269,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,-23.5 parent: 31 - - uid: 5706 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,-22.5 - parent: 31 - uid: 5737 components: - type: Transform @@ -24292,42 +24317,12 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,-23.5 parent: 31 - - uid: 6232 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-25.5 - parent: 31 - - uid: 6299 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-26.5 - parent: 31 - - uid: 6300 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-26.5 - parent: 31 - uid: 6310 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-26.5 parent: 31 - - uid: 6318 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-24.5 - parent: 31 - - uid: 6321 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-23.5 - parent: 31 - uid: 6325 components: - type: Transform @@ -24354,54 +24349,12 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,-22.5 parent: 31 - - uid: 7816 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,-17.5 - parent: 31 - - uid: 8474 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-25.5 - parent: 31 - - uid: 8475 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-26.5 - parent: 31 - - uid: 8479 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,-22.5 - parent: 31 - uid: 8502 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-21.5 parent: 31 - - uid: 8506 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,-17.5 - parent: 31 - - uid: 8520 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,-21.5 - parent: 31 - - uid: 8523 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,-21.5 - parent: 31 - uid: 9457 components: - type: Transform @@ -24438,30 +24391,6 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-26.5 parent: 31 - - uid: 11482 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-21.5 - parent: 31 - - uid: 11484 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,-21.5 - parent: 31 - - uid: 11485 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,-22.5 - parent: 31 - - uid: 11486 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-22.5 - parent: 31 - uid: 11623 components: - type: Transform @@ -24516,66 +24445,12 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,-21.5 parent: 31 - - uid: 11632 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-21.5 - parent: 31 - - uid: 11633 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-21.5 - parent: 31 - - uid: 11634 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-21.5 - parent: 31 - - uid: 11635 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-21.5 - parent: 31 - - uid: 11636 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-22.5 - parent: 31 - - uid: 11637 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-22.5 - parent: 31 - - uid: 11638 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-22.5 - parent: 31 - - uid: 11639 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-22.5 - parent: 31 - uid: 11640 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,-22.5 parent: 31 - - uid: 11641 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-20.5 - parent: 31 - uid: 11642 components: - type: Transform @@ -24588,30 +24463,6 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,-18.5 parent: 31 - - uid: 11644 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-17.5 - parent: 31 - - uid: 11645 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-16.5 - parent: 31 - - uid: 11646 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-16.5 - parent: 31 - - uid: 11647 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-17.5 - parent: 31 - uid: 11648 components: - type: Transform @@ -24624,18 +24475,6 @@ entities: rot: -1.5707963267948966 rad pos: -22.5,-19.5 parent: 31 - - uid: 11650 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-20.5 - parent: 31 - - uid: 11654 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-22.5 - parent: 31 - uid: 11655 components: - type: Transform @@ -24648,42 +24487,6 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-27.5 parent: 31 - - uid: 11657 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-27.5 - parent: 31 - - uid: 11658 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-27.5 - parent: 31 - - uid: 11659 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-27.5 - parent: 31 - - uid: 11660 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,-27.5 - parent: 31 - - uid: 11661 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-27.5 - parent: 31 - - uid: 11662 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,-27.5 - parent: 31 - uid: 11671 components: - type: Transform @@ -24820,6 +24623,17 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-28.5 parent: 31 + - uid: 204 + components: + - type: Transform + pos: -21.5,-29.5 + parent: 31 + - uid: 272 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,16.5 + parent: 31 - uid: 402 components: - type: Transform @@ -24846,20 +24660,15 @@ entities: - type: Transform pos: -1.5,21.5 parent: 31 - - uid: 705 - components: - - type: Transform - pos: -9.5,-10.5 - parent: 31 - - uid: 710 + - uid: 626 components: - type: Transform - pos: -7.5,-10.5 + pos: -4.5,-9.5 parent: 31 - - uid: 713 + - uid: 705 components: - type: Transform - pos: -4.5,-10.5 + pos: -9.5,-10.5 parent: 31 - uid: 722 components: @@ -24878,6 +24687,12 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-12.5 parent: 31 + - uid: 792 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,14.5 + parent: 31 - uid: 808 components: - type: Transform @@ -24941,10 +24756,11 @@ entities: - type: Transform pos: -0.5,21.5 parent: 31 - - uid: 1388 + - uid: 1248 components: - type: Transform - pos: 32.5,27.5 + rot: -1.5707963267948966 rad + pos: -18.5,17.5 parent: 31 - uid: 1427 components: @@ -24956,31 +24772,16 @@ entities: - type: Transform pos: -0.5,-10.5 parent: 31 - - uid: 1437 - components: - - type: Transform - pos: -8.5,-10.5 - parent: 31 - - uid: 1438 - components: - - type: Transform - pos: -5.5,-10.5 - parent: 31 - - uid: 1440 - components: - - type: Transform - pos: -3.5,-10.5 - parent: 31 - uid: 1483 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,7.5 parent: 31 - - uid: 1492 + - uid: 1524 components: - type: Transform - pos: 6.5,14.5 + pos: -36.5,-31.5 parent: 31 - uid: 1552 components: @@ -25007,6 +24808,26 @@ entities: - type: Transform pos: 27.5,-12.5 parent: 31 + - uid: 2031 + components: + - type: Transform + pos: -55.5,-28.5 + parent: 31 + - uid: 2041 + components: + - type: Transform + pos: 7.5,13.5 + parent: 31 + - uid: 2047 + components: + - type: Transform + pos: 6.5,13.5 + parent: 31 + - uid: 2051 + components: + - type: Transform + pos: 12.5,19.5 + parent: 31 - uid: 2146 components: - type: Transform @@ -25022,21 +24843,54 @@ entities: - type: Transform pos: 12.5,18.5 parent: 31 + - uid: 2275 + components: + - type: Transform + pos: -2.5,-9.5 + parent: 31 + - uid: 2285 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,14.5 + parent: 31 - uid: 2329 components: - type: Transform pos: 27.5,-13.5 parent: 31 + - uid: 2491 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,14.5 + parent: 31 - uid: 2866 components: - type: Transform pos: 22.5,-19.5 parent: 31 + - uid: 2869 + components: + - type: Transform + pos: -9.5,-9.5 + parent: 31 - uid: 3110 components: - type: Transform pos: 59.5,12.5 parent: 31 + - uid: 3140 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,14.5 + parent: 31 + - uid: 3152 + components: + - type: Transform + pos: -7.5,-9.5 + parent: 31 - uid: 3279 components: - type: Transform @@ -25052,21 +24906,39 @@ entities: - type: Transform pos: -19.5,-30.5 parent: 31 - - uid: 3656 + - uid: 3427 components: - type: Transform - pos: 55.5,7.5 + rot: -1.5707963267948966 rad + pos: -16.5,14.5 parent: 31 - - uid: 3725 + - uid: 3472 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-38.5 + rot: -1.5707963267948966 rad + pos: -17.5,14.5 parent: 31 - - uid: 3750 + - uid: 3532 components: - type: Transform - pos: -37.5,37.5 + rot: -1.5707963267948966 rad + pos: -33.5,-6.5 + parent: 31 + - uid: 3656 + components: + - type: Transform + pos: 55.5,7.5 + parent: 31 + - uid: 3725 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-38.5 + parent: 31 + - uid: 3750 + components: + - type: Transform + pos: -37.5,37.5 parent: 31 - uid: 3751 components: @@ -25108,11 +24980,38 @@ entities: - type: Transform pos: -36.5,33.5 parent: 31 + - uid: 3928 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-32.5 + parent: 31 - uid: 3958 components: - type: Transform pos: 16.5,20.5 parent: 31 + - uid: 4065 + components: + - type: Transform + pos: -32.5,-47.5 + parent: 31 + - uid: 4100 + components: + - type: Transform + pos: -35.5,-31.5 + parent: 31 + - uid: 4191 + components: + - type: Transform + pos: 9.5,14.5 + parent: 31 + - uid: 4209 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,15.5 + parent: 31 - uid: 4218 components: - type: Transform @@ -25179,6 +25078,11 @@ entities: - type: Transform pos: 47.5,-9.5 parent: 31 + - uid: 4532 + components: + - type: Transform + pos: 9.5,13.5 + parent: 31 - uid: 4537 components: - type: Transform @@ -25189,6 +25093,16 @@ entities: - type: Transform pos: 30.5,-31.5 parent: 31 + - uid: 4597 + components: + - type: Transform + pos: 13.5,21.5 + parent: 31 + - uid: 4619 + components: + - type: Transform + pos: 8.5,13.5 + parent: 31 - uid: 5017 components: - type: Transform @@ -25461,11 +25375,6 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-20.5 parent: 31 - - uid: 5940 - components: - - type: Transform - pos: 31.5,26.5 - parent: 31 - uid: 6020 components: - type: Transform @@ -25502,11 +25411,6 @@ entities: - type: Transform pos: 34.5,-41.5 parent: 31 - - uid: 6523 - components: - - type: Transform - pos: 31.5,25.5 - parent: 31 - uid: 6609 components: - type: Transform @@ -25592,6 +25496,12 @@ entities: - type: Transform pos: 55.5,-10.5 parent: 31 + - uid: 7122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,14.5 + parent: 31 - uid: 7163 components: - type: Transform @@ -25608,11 +25518,6 @@ entities: - type: Transform pos: 12.5,15.5 parent: 31 - - uid: 7235 - components: - - type: Transform - pos: 7.5,14.5 - parent: 31 - uid: 7236 components: - type: Transform @@ -25623,26 +25528,11 @@ entities: - type: Transform pos: 10.5,14.5 parent: 31 - - uid: 7238 - components: - - type: Transform - pos: 8.5,14.5 - parent: 31 - uid: 7239 components: - type: Transform pos: 12.5,16.5 parent: 31 - - uid: 7240 - components: - - type: Transform - pos: 9.5,14.5 - parent: 31 - - uid: 7241 - components: - - type: Transform - pos: 12.5,19.5 - parent: 31 - uid: 7494 components: - type: Transform @@ -25653,26 +25543,11 @@ entities: - type: Transform pos: 14.5,-31.5 parent: 31 - - uid: 7499 - components: - - type: Transform - pos: -9.5,-12.5 - parent: 31 - uid: 7500 components: - type: Transform pos: -9.5,-11.5 parent: 31 - - uid: 7510 - components: - - type: Transform - pos: -26.5,-11.5 - parent: 31 - - uid: 7511 - components: - - type: Transform - pos: -27.5,-11.5 - parent: 31 - uid: 7512 components: - type: Transform @@ -25733,11 +25608,6 @@ entities: - type: Transform pos: -33.5,-7.5 parent: 31 - - uid: 7526 - components: - - type: Transform - pos: -33.5,-6.5 - parent: 31 - uid: 7527 components: - type: Transform @@ -25899,11 +25769,6 @@ entities: - type: Transform pos: -18.5,20.5 parent: 31 - - uid: 7667 - components: - - type: Transform - pos: -18.5,21.5 - parent: 31 - uid: 7668 components: - type: Transform @@ -26292,11 +26157,10 @@ entities: - type: Transform pos: -32.5,-34.5 parent: 31 - - uid: 8751 + - uid: 8724 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-28.5 + pos: -5.5,-9.5 parent: 31 - uid: 8754 components: @@ -26320,10 +26184,10 @@ entities: - type: Transform pos: -30.5,-26.5 parent: 31 - - uid: 9010 + - uid: 9036 components: - type: Transform - pos: -29.5,-27.5 + pos: -3.5,-9.5 parent: 31 - uid: 9060 components: @@ -26340,15 +26204,10 @@ entities: - type: Transform pos: 53.5,7.5 parent: 31 - - uid: 9088 - components: - - type: Transform - pos: -29.5,-28.5 - parent: 31 - - uid: 9252 + - uid: 9114 components: - type: Transform - pos: -29.5,-29.5 + pos: -8.5,-9.5 parent: 31 - uid: 9264 components: @@ -26549,6 +26408,11 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-16.5 parent: 31 + - uid: 10172 + components: + - type: Transform + pos: 13.5,19.5 + parent: 31 - uid: 10231 components: - type: Transform @@ -26609,11 +26473,6 @@ entities: - type: Transform pos: 45.5,-7.5 parent: 31 - - uid: 10711 - components: - - type: Transform - pos: 31.5,27.5 - parent: 31 - uid: 10799 components: - type: Transform @@ -26985,11 +26844,6 @@ entities: - type: Transform pos: 73.5,-3.5 parent: 31 - - uid: 12016 - components: - - type: Transform - pos: 72.5,-4.5 - parent: 31 - uid: 12017 components: - type: Transform @@ -27190,6 +27044,16 @@ entities: - type: Transform pos: 57.5,23.5 parent: 31 + - uid: 12680 + components: + - type: Transform + pos: -19.5,-29.5 + parent: 31 + - uid: 12681 + components: + - type: Transform + pos: -20.5,-29.5 + parent: 31 - uid: 12714 components: - type: Transform @@ -27287,23 +27151,11 @@ entities: rot: 3.141592653589793 rad pos: 45.5,-3.5 parent: 31 - - uid: 2003 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,14.5 - parent: 31 - - uid: 2047 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,13.5 - parent: 31 - - uid: 2051 + - uid: 2722 components: - type: Transform rot: 1.5707963267948966 rad - pos: -5.5,12.5 + pos: -6.5,15.5 parent: 31 - uid: 3379 components: @@ -27311,18 +27163,18 @@ entities: rot: 1.5707963267948966 rad pos: 17.5,-13.5 parent: 31 - - uid: 3908 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 50.5,-30.5 - parent: 31 - uid: 3961 components: - type: Transform rot: 1.5707963267948966 rad pos: 17.5,-12.5 parent: 31 + - uid: 4071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-29.5 + parent: 31 - uid: 4192 components: - type: Transform @@ -27341,28 +27193,17 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,-12.5 parent: 31 - - uid: 4709 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,-17.5 - parent: 31 - - uid: 4714 - components: - - type: Transform - pos: -24.5,-4.5 - parent: 31 - - uid: 4715 + - uid: 4634 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,-7.5 + pos: 31.5,-19.5 parent: 31 - - uid: 5004 + - uid: 4709 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-2.5 + rot: 1.5707963267948966 rad + pos: -17.5,-17.5 parent: 31 - uid: 6258 components: @@ -27408,28 +27249,12 @@ entities: - type: Transform pos: 8.5,1.5 parent: 31 - - uid: 7341 - components: - - type: Transform - pos: -18.5,-4.5 - parent: 31 - - uid: 7365 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 48.5,-30.5 - parent: 31 - uid: 7627 components: - type: Transform rot: -1.5707963267948966 rad pos: -28.5,17.5 parent: 31 - - uid: 7646 - components: - - type: Transform - pos: -28.5,-7.5 - parent: 31 - uid: 7774 components: - type: Transform @@ -27459,48 +27284,17 @@ entities: - type: Transform pos: 27.5,6.5 parent: 31 - - uid: 8283 - components: - - type: Transform - pos: 50.5,-18.5 - parent: 31 - - uid: 8284 - components: - - type: Transform - pos: 48.5,-18.5 - parent: 31 - - uid: 8285 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,-23.5 - parent: 31 - - uid: 8286 + - uid: 8392 components: - type: Transform rot: -1.5707963267948966 rad - pos: 55.5,-25.5 - parent: 31 - - uid: 8290 - components: - - type: Transform - pos: 37.5,-23.5 - parent: 31 - - uid: 8291 - components: - - type: Transform - pos: 35.5,-23.5 - parent: 31 - - uid: 8299 - components: - - type: Transform - pos: 36.5,-23.5 + pos: -4.5,14.5 parent: 31 - - uid: 8812 + - uid: 8520 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,29.5 + rot: 1.5707963267948966 rad + pos: -6.5,13.5 parent: 31 - uid: 8869 components: @@ -27633,6 +27427,14 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-3.5 parent: 31 +- proto: ChairBarber + entities: + - uid: 650 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-12.5 + parent: 31 - proto: ChairCursed entities: - uid: 11691 @@ -27654,18 +27456,54 @@ entities: rot: 3.141592653589793 rad pos: -9.5,-19.5 parent: 31 + - uid: 1331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.3603764,-11.375768 + parent: 31 - uid: 2309 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,-19.5 parent: 31 + - uid: 4384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.403637,-10.42971 + parent: 31 + - uid: 5214 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.122922,-10.39846 + parent: 31 - uid: 7079 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,9.5 parent: 31 + - uid: 7344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.060375,-11.21096 + parent: 31 + - uid: 7404 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.247271,-11.070335 + parent: 31 + - uid: 7499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.76348,-23.148035 + parent: 31 - uid: 10755 components: - type: Transform @@ -27693,6 +27531,18 @@ entities: - type: Transform pos: -41.5,-9.5 parent: 31 +- proto: ChairFoldingSpawnFolded + entities: + - uid: 7037 + components: + - type: Transform + pos: -12.43491,-9.039085 + parent: 31 + - uid: 8475 + components: + - type: Transform + pos: -12.450546,-9.476585 + parent: 31 - proto: ChairOfficeDark entities: - uid: 953 @@ -27724,6 +27574,12 @@ entities: rot: 4.71238902409608 rad pos: -0.5,24.5 parent: 31 + - uid: 1281 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.2550097,34.693558 + parent: 31 - uid: 2211 components: - type: Transform @@ -27736,16 +27592,23 @@ entities: rot: 3.141592653589793 rad pos: -16.5,-26.5 parent: 31 - - uid: 2777 + - uid: 2533 components: - type: Transform - pos: -29.5,-1.5 + rot: 3.141592653589793 rad + pos: 3.5066853,34.521683 parent: 31 - - uid: 2815 + - uid: 2535 components: - type: Transform rot: 3.141592653589793 rad - pos: -30.5,0.5 + pos: 2.459031,34.724808 + parent: 31 + - uid: 2723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.45630848,13.598008 parent: 31 - uid: 3154 components: @@ -27769,29 +27632,12 @@ entities: rot: 3.141592653589793 rad pos: -1.5,23.5 parent: 31 - - uid: 4150 - components: - - type: Transform - pos: -10.5,8.5 - parent: 31 - uid: 4179 components: - type: Transform rot: 3.141592653589793 rad pos: 23.5,12.5 parent: 31 - - uid: 4186 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,31.5 - parent: 31 - - uid: 4191 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,31.5 - parent: 31 - uid: 4268 components: - type: Transform @@ -27809,6 +27655,12 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-29.5 parent: 31 + - uid: 5870 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.569232,32.631058 + parent: 31 - uid: 6017 components: - type: Transform @@ -27843,47 +27695,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-31.5 parent: 31 - - uid: 8695 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-25.5 - parent: 31 - - uid: 8701 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -34.5,-25.5 - parent: 31 - - uid: 8702 - components: - - type: Transform - pos: -35.5,-23.5 - parent: 31 - - uid: 8706 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -34.5,-24.5 - parent: 31 - - uid: 8707 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-24.5 - parent: 31 - - uid: 8769 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,13.5 - parent: 31 - - uid: 8811 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,29.5 - parent: 31 - uid: 8865 components: - type: Transform @@ -27896,11 +27707,6 @@ entities: rot: 3.141592653589793 rad pos: 41.5,3.5 parent: 31 - - uid: 9002 - components: - - type: Transform - pos: -20.5,-1.5 - parent: 31 - uid: 9023 components: - type: Transform @@ -27922,6 +27728,23 @@ entities: - type: Transform pos: 49.5,-4.5 parent: 31 + - uid: 10715 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.41063166,34.756058 + parent: 31 + - uid: 11164 + components: + - type: Transform + pos: 0.4262681,32.677933 + parent: 31 + - uid: 11659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.487721,10.757132 + parent: 31 - uid: 11711 components: - type: Transform @@ -28022,14 +27845,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-20.5 parent: 31 -- proto: ChairPilotSeat - entities: - - uid: 1039 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,31.5 - parent: 31 - proto: ChairRitual entities: - uid: 9690 @@ -28075,6 +27890,12 @@ entities: - type: Transform pos: 11.5,-22.5 parent: 31 + - uid: 2358 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.318367,0.5019118 + parent: 31 - uid: 2391 components: - type: Transform @@ -28092,12 +27913,30 @@ entities: rot: 3.141592653589793 rad pos: 11.5,-25.5 parent: 31 + - uid: 2854 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.318367,-1.4199631 + parent: 31 - uid: 3153 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-25.5 parent: 31 + - uid: 4928 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.819687,-11.769954 + parent: 31 + - uid: 4957 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.037855,-11.004329 + parent: 31 - uid: 6600 components: - type: Transform @@ -28186,6 +28025,14 @@ entities: rot: -1.5707963267948966 rad pos: -5.749122,-0.57288134 parent: 31 +- proto: CheapLighter + entities: + - uid: 11191 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.481464,-25.364504 + parent: 31 - proto: CheapRollerBed entities: - uid: 7252 @@ -28249,6 +28096,13 @@ entities: rot: 3.141592653589793 rad pos: 4.515862,-26.37586 parent: 31 +- proto: ChiliSeeds + entities: + - uid: 10402 + components: + - type: Transform + pos: -17.215282,1.4631176 + parent: 31 - proto: Cigar entities: - uid: 12197 @@ -28344,14 +28198,26 @@ entities: parent: 31 - proto: CleanerDispenser entities: - - uid: 554 + - uid: 8706 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-13.5 + rot: -1.5707963267948966 rad + pos: -19.5,-7.5 parent: 31 - proto: ClockworkGrilleBroken entities: + - uid: 8801 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,17.5 + parent: 31 + - uid: 9834 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,17.5 + parent: 31 - uid: 10513 components: - type: Transform @@ -28367,463 +28233,445 @@ entities: parent: 31 - proto: ClosetChefFilled entities: - - uid: 799 + - uid: 8732 components: - type: Transform - pos: -12.5,1.5 + pos: -13.5,-3.5 parent: 31 - proto: ClosetEmergencyFilledRandom entities: - - uid: 759 + - uid: 2061 components: - type: Transform - pos: 5.5,-21.5 + pos: -36.5,-32.5 parent: 31 - - 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 - - uid: 761 + - uid: 4102 components: - type: Transform - pos: -23.5,11.5 + pos: 6.5,14.5 parent: 31 - - uid: 828 + - uid: 10754 components: - type: Transform - pos: 54.5,-5.5 + pos: -53.5,-9.5 parent: 31 - - uid: 2181 +- proto: ClosetFireFilled + entities: + - uid: 10753 components: - type: Transform - pos: 15.5,14.5 + pos: -53.5,-10.5 parent: 31 - - uid: 3736 +- proto: ClosetL3VirologyFilled + entities: + - uid: 6695 components: - type: Transform - pos: -0.5,-17.5 + pos: 14.5,-7.5 parent: 31 - - uid: 4381 +- proto: ClosetMaintenanceFilledRandom + entities: + - uid: 6892 components: - type: Transform - pos: 33.5,-10.5 + pos: -17.5,13.5 parent: 31 - - uid: 6907 +- proto: ClosetWallEmergency + entities: + - uid: 8729 components: - type: Transform - pos: 30.5,14.5 + rot: 1.5707963267948966 rad + pos: -27.5,-10.5 parent: 31 - - uid: 7161 + - uid: 9865 components: - type: Transform - pos: 23.5,7.5 + rot: -1.5707963267948966 rad + pos: -34.5,0.5 parent: 31 - - uid: 7497 +- proto: ClosetWallEmergencyFilledRandom + entities: + - uid: 1388 components: - type: Transform - pos: 14.5,-29.5 + rot: -1.5707963267948966 rad + pos: 6.5,-21.5 parent: 31 - - uid: 7791 + - uid: 1393 components: - type: Transform - pos: -20.5,22.5 + rot: -1.5707963267948966 rad + pos: 17.5,15.5 parent: 31 - - uid: 8805 + - uid: 1394 components: - type: Transform - pos: 7.5,28.5 + rot: 3.141592653589793 rad + pos: -0.5,-18.5 parent: 31 - - uid: 9323 + - uid: 1395 components: - type: Transform - pos: -34.5,7.5 + rot: 3.141592653589793 rad + pos: 33.5,-11.5 parent: 31 - - uid: 9447 + - uid: 1397 components: - type: Transform - pos: -22.5,-31.5 + rot: -1.5707963267948966 rad + pos: 24.5,7.5 parent: 31 - - uid: 9740 + - uid: 1398 components: - type: Transform - pos: 15.5,-21.5 + rot: 3.141592653589793 rad + pos: 14.5,-30.5 parent: 31 - - uid: 9790 + - uid: 1400 components: - type: Transform - pos: -18.5,-36.5 + rot: 3.141592653589793 rad + pos: 1.5,27.5 parent: 31 - - uid: 9791 + - uid: 1402 components: - type: Transform - pos: 9.5,-32.5 + pos: -22.5,-30.5 parent: 31 - - uid: 10645 + - uid: 1404 components: - type: Transform - pos: 39.5,-14.5 + rot: -1.5707963267948966 rad + pos: -17.5,-36.5 parent: 31 - - uid: 10754 + - uid: 1405 components: - type: Transform - pos: -53.5,-9.5 + rot: -1.5707963267948966 rad + pos: -19.5,22.5 parent: 31 -- proto: ClosetEmergencyN2FilledRandom - entities: - - uid: 11448 + - uid: 1406 components: - type: Transform - pos: 15.5,-23.5 + rot: -1.5707963267948966 rad + pos: 40.5,-14.5 parent: 31 - - uid: 11449 + - uid: 1520 components: - type: Transform - pos: 42.5,-13.5 + rot: -1.5707963267948966 rad + pos: 16.5,-21.5 parent: 31 - - uid: 11450 + - uid: 1843 components: - type: Transform - pos: -20.5,12.5 + rot: -1.5707963267948966 rad + pos: 10.5,-32.5 parent: 31 -- proto: ClosetFireFilled - entities: - - uid: 3507 + - uid: 1881 components: - type: Transform - pos: 30.5,13.5 + rot: -1.5707963267948966 rad + pos: -10.5,-12.5 parent: 31 - - uid: 3922 + - uid: 2679 components: - type: Transform - pos: -1.5,-17.5 + rot: -1.5707963267948966 rad + pos: -3.5,27.5 parent: 31 - - uid: 4237 + - uid: 6607 components: - type: Transform - pos: 54.5,-3.5 + rot: 1.5707963267948966 rad + pos: 29.5,14.5 parent: 31 - - uid: 7792 + - uid: 7301 components: - type: Transform - pos: -20.5,23.5 + pos: -5.5,-24.5 parent: 31 - - uid: 7912 + - uid: 7460 components: - type: Transform - pos: 23.5,0.5 + pos: -31.5,6.5 parent: 31 - - uid: 8804 + - uid: 7497 components: - type: Transform - pos: 8.5,28.5 + pos: -23.5,12.5 parent: 31 - - uid: 9739 + - uid: 9132 components: - type: Transform - pos: 15.5,-22.5 + rot: 3.141592653589793 rad + pos: 54.5,-6.5 parent: 31 - - uid: 9792 + - uid: 9868 components: - type: Transform - pos: -6.5,-37.5 + pos: 28.5,7.5 parent: 31 - - uid: 10132 + - uid: 12529 components: - type: Transform - pos: 16.5,14.5 + pos: -8.5,-8.5 parent: 31 - - uid: 10753 +- proto: ClosetWallFireFilledRandom + entities: + - uid: 339 components: - type: Transform - pos: -53.5,-10.5 + rot: -1.5707963267948966 rad + pos: -33.5,8.5 parent: 31 -- proto: ClosetJanitorFilled - entities: - - uid: 2189 + - uid: 1403 components: - type: Transform - pos: -17.5,-10.5 + rot: -1.5707963267948966 rad + pos: 16.5,-22.5 parent: 31 -- proto: ClosetL3VirologyFilled - entities: - - uid: 6695 + - uid: 1424 components: - type: Transform - pos: 14.5,-7.5 + rot: 3.141592653589793 rad + pos: -2.5,-18.5 parent: 31 -- proto: ClosetMaintenanceFilledRandom - entities: - - uid: 550 + - uid: 1443 components: - type: Transform - pos: 46.5,-0.5 + rot: -1.5707963267948966 rad + pos: -19.5,23.5 parent: 31 - - uid: 1412 + - uid: 1449 components: - type: Transform - pos: -7.5,-8.5 + rot: -1.5707963267948966 rad + pos: 24.5,0.5 parent: 31 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14963 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - uid: 7058 + - uid: 1538 components: - type: Transform - pos: 29.5,-9.5 + pos: -6.5,-36.5 parent: 31 - - uid: 7518 + - uid: 1577 components: - type: Transform - pos: -11.5,-12.5 + rot: -1.5707963267948966 rad + pos: 17.5,14.5 parent: 31 - - uid: 7789 + - uid: 1883 components: - type: Transform - pos: -19.5,12.5 + rot: 3.141592653589793 rad + pos: 52.5,0.5 parent: 31 - - uid: 7911 + - uid: 3135 components: - type: Transform - pos: 23.5,1.5 + rot: -1.5707963267948966 rad + pos: 55.5,-5.5 parent: 31 - - uid: 7948 + - uid: 7105 components: - type: Transform - pos: 24.5,-25.5 + rot: -1.5707963267948966 rad + pos: -34.5,-0.5 parent: 31 - - uid: 9465 + - uid: 7107 components: - type: Transform - pos: -9.5,-39.5 + pos: 30.5,15.5 parent: 31 - - uid: 9570 + - uid: 7302 components: - type: Transform - pos: -27.5,13.5 + pos: -6.5,-24.5 parent: 31 - - uid: 9571 + - uid: 11127 components: - type: Transform - pos: -5.5,20.5 + pos: 0.5,30.5 parent: 31 - - uid: 9572 +- proto: ClosetWallMaintenanceFilledRandom + entities: + - uid: 1399 components: - type: Transform - pos: 27.5,-18.5 + rot: 3.141592653589793 rad + pos: -31.5,8.5 parent: 31 - - uid: 9675 + - uid: 1410 components: - type: Transform - pos: -1.5,-41.5 + pos: 42.5,-11.5 parent: 31 - - uid: 9793 + - uid: 1631 components: - type: Transform - pos: 5.5,-37.5 + rot: -1.5707963267948966 rad + pos: 47.5,-0.5 parent: 31 - - uid: 9794 + - uid: 1641 components: - type: Transform - pos: -11.5,-36.5 + pos: -7.5,-7.5 parent: 31 - - uid: 9862 + - uid: 1657 components: - type: Transform - pos: 11.5,-19.5 + pos: 29.5,-8.5 parent: 31 - - uid: 10221 + - uid: 1672 components: - type: Transform - pos: -30.5,-13.5 + rot: -1.5707963267948966 rad + pos: 24.5,1.5 parent: 31 - - uid: 10646 + - uid: 1673 components: - type: Transform - pos: 45.5,-13.5 + rot: -1.5707963267948966 rad + pos: 25.5,-24.5 parent: 31 - - uid: 11123 + - uid: 1674 components: - type: Transform - pos: -4.5,29.5 + rot: 1.5707963267948966 rad + pos: -10.5,-39.5 parent: 31 - - uid: 11229 + - uid: 1694 components: - type: Transform - pos: -27.5,-15.5 + pos: -28.5,15.5 parent: 31 - - type: Fixtures - fixtures: - fix1: - shape: !type:PolygonShape - radius: 0.01 - vertices: - - -0.25,-0.48 - - 0.25,-0.48 - - 0.25,0.48 - - -0.25,0.48 - mask: - - Impassable - - TableLayer - - LowImpassable - layer: - - BulletImpassable - - Opaque - density: 75 - hard: True - restitution: 0 - friction: 0.4 - - type: EntityStorage - open: True - removedMasks: 20 - - type: PlaceableSurface - isPlaceable: True - - uid: 11244 + - uid: 1840 components: - type: Transform - pos: -31.5,9.5 + rot: 1.5707963267948966 rad + pos: -6.5,20.5 parent: 31 -- proto: ClosetRadiationSuitFilled - entities: - - uid: 5127 + - uid: 1841 components: - type: Transform - pos: 52.5,1.5 + rot: 3.141592653589793 rad + pos: 27.5,-19.5 parent: 31 - - uid: 7068 + - uid: 1845 components: - type: Transform - pos: 53.5,1.5 + rot: 1.5707963267948966 rad + pos: 4.5,-37.5 parent: 31 - - uid: 7571 + - uid: 1874 components: - type: Transform - pos: -11.5,-11.5 + pos: -1.5,-40.5 parent: 31 - - uid: 8159 + - uid: 1875 components: - type: Transform - pos: -7.5,-25.5 + pos: 11.5,-18.5 parent: 31 - - uid: 12046 + - uid: 1876 components: - type: Transform - pos: 59.5,6.5 + rot: 3.141592653589793 rad + pos: -11.5,-37.5 parent: 31 -- proto: ClosetSteelBase - entities: - - uid: 7853 + - uid: 1877 components: - type: Transform - pos: 27.5,-22.5 + rot: -1.5707963267948966 rad + pos: 46.5,-13.5 parent: 31 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - 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: - - 7856 - - 7859 - - 7854 - - 7857 - - 7855 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null -- proto: ClosetWallEmergency - entities: - - uid: 9865 + - uid: 1880 components: - type: Transform rot: -1.5707963267948966 rad - pos: -34.5,0.5 + pos: -26.5,-15.5 parent: 31 -- proto: ClosetWallEmergencyFilledRandom - entities: - - uid: 7301 + - uid: 1887 components: - type: Transform - pos: -5.5,-24.5 + pos: 27.5,-21.5 parent: 31 - - uid: 9868 + - uid: 7297 components: - type: Transform - pos: 28.5,7.5 + pos: -30.5,-12.5 parent: 31 -- proto: ClosetWallFireFilledRandom + - uid: 9864 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-3.5 + parent: 31 +- proto: ClosetWallMixed entities: - - uid: 339 + - uid: 10002 components: - type: Transform rot: -1.5707963267948966 rad - pos: -33.5,8.5 + pos: -28.5,-5.5 parent: 31 - - uid: 7105 +- proto: ClosetWallOrange + entities: + - uid: 274 components: - type: Transform rot: -1.5707963267948966 rad - pos: -34.5,-0.5 + pos: -6.5,7.5 parent: 31 - - uid: 7302 + - uid: 1274 components: - type: Transform - pos: -6.5,-24.5 + rot: 1.5707963267948966 rad + pos: -14.5,7.5 parent: 31 -- proto: ClosetWallMaintenanceFilledRandom +- proto: ClosetWallRadiationFilled entities: - - uid: 9864 + - uid: 723 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,0.5 + parent: 31 + - uid: 1061 + components: + - type: Transform + pos: 60.5,8.5 + parent: 31 + - uid: 1882 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,0.5 + parent: 31 + - uid: 1886 + components: + - type: Transform + pos: 59.5,8.5 + parent: 31 + - uid: 2467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -34.5,-28.5 + parent: 31 + - uid: 3245 components: - type: Transform rot: -1.5707963267948966 rad - pos: -31.5,-3.5 + pos: -4.5,-26.5 + parent: 31 +- proto: ClosetWallWhite + entities: + - uid: 1890 + components: + - type: Transform + pos: 15.5,-12.5 parent: 31 - proto: ClothingBeltChampion entities: @@ -28844,6 +28692,11 @@ entities: parent: 31 - proto: ClothingBeltUtilityFilled entities: + - uid: 4494 + components: + - type: Transform + pos: 48.497185,-30.365786 + parent: 31 - uid: 7482 components: - type: Transform @@ -28858,12 +28711,6 @@ entities: parent: 31 - proto: ClothingEyesGlasses entities: - - uid: 7107 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - uid: 11264 components: - type: Transform @@ -28879,26 +28726,26 @@ entities: - type: Transform pos: -9.162952,-18.20927 parent: 31 -- proto: ClothingEyesGlassesMeson +- proto: ClothingEyesGlassesJensen entities: - - uid: 8213 + - uid: 8722 components: - type: Transform - pos: 35.614624,-3.264578 + pos: -9.60229,-7.281926 parent: 31 -- proto: ClothingEyesGlassesSunglasses +- proto: ClothingEyesGlassesMeson entities: - - uid: 4235 + - uid: 8213 components: - type: Transform - pos: -10.276402,-6.3744125 + pos: 35.614624,-3.264578 parent: 31 - proto: ClothingEyesHudDiagnostic entities: - - uid: 7580 + - uid: 8705 components: - type: Transform - pos: 32.538,-3.0937886 + pos: 32.395454,-3.0351868 parent: 31 - proto: ClothingEyesHudMedical entities: @@ -28907,12 +28754,12 @@ entities: - type: Transform pos: 16.646324,-6.5235434 parent: 31 -- proto: ClothingHandsGlovesColorBlack +- proto: ClothingHandsGlovesColorRed entities: - - uid: 11225 + - uid: 12229 components: - type: Transform - pos: -29.520256,-9.469171 + pos: -28.53424,-7.1807466 parent: 31 - proto: ClothingHandsGlovesColorYellow entities: @@ -28921,11 +28768,6 @@ entities: - type: Transform pos: -29.506107,7.62424 parent: 31 - - uid: 7572 - components: - - type: Transform - pos: -11.565304,-10.576338 - parent: 31 - uid: 7581 components: - type: Transform @@ -28938,6 +28780,13 @@ entities: - type: Transform pos: 51.410316,17.602825 parent: 31 +- proto: ClothingHandsGlovesFingerlessInsulated + entities: + - uid: 108 + components: + - type: Transform + pos: -20.576214,18.40477 + parent: 31 - proto: ClothingHandsGlovesLatex entities: - uid: 2212 @@ -28945,12 +28794,6 @@ entities: - type: Transform pos: 19.45916,-20.403913 parent: 31 - - uid: 7102 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - proto: ClothingHandsGlovesLeather entities: - uid: 9670 @@ -28958,13 +28801,6 @@ entities: - type: Transform pos: -4.544421,-41.335396 parent: 31 -- proto: ClothingHandsGlovesMercFingerless - entities: - - uid: 988 - components: - - type: Transform - pos: 30.104523,-19.311977 - parent: 31 - proto: ClothingHandsGlovesNitrile entities: - uid: 10029 @@ -28979,13 +28815,6 @@ entities: - type: Transform pos: 26.502825,-1.4970446 parent: 31 -- proto: ClothingHeadHatAnimalHeadslime - entities: - - uid: 3367 - components: - - type: Transform - pos: -4.5089555,-12.629585 - parent: 31 - proto: ClothingHeadHatBeret entities: - uid: 819 @@ -28993,13 +28822,6 @@ entities: - type: Transform pos: -22.754051,9.462572 parent: 31 -- proto: ClothingHeadHatBeretBrigmedic - entities: - - uid: 6607 - components: - - type: Transform - pos: 14.371354,-5.1023016 - parent: 31 - proto: ClothingHeadHatBowlerHat entities: - uid: 9261 @@ -29007,27 +28829,6 @@ entities: - type: Transform pos: 0.36587167,-19.353008 parent: 31 -- proto: ClothingHeadHatFedoraBrown - entities: - - uid: 7484 - components: - - type: Transform - pos: -21.550486,17.73303 - parent: 31 - - uid: 7857 - components: - - type: Transform - parent: 7853 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingHeadHatFlowerWreath - entities: - - uid: 3235 - components: - - type: Transform - pos: 49.449142,-25.427004 - parent: 31 - proto: ClothingHeadHatHardhatOrange entities: - uid: 10803 @@ -29035,31 +28836,19 @@ entities: - type: Transform pos: 23.016964,-16.05082 parent: 31 -- proto: ClothingHeadHatPirate - entities: - - uid: 4503 - components: - - type: Transform - pos: 36.423782,-15.13722 - parent: 31 -- proto: ClothingHeadHatPumpkin +- proto: ClothingHeadHatMagician entities: - - uid: 7407 + - uid: 11909 components: - type: Transform - pos: 48.273617,-26.666399 + pos: -20.343632,-10.914085 parent: 31 -- proto: ClothingHeadHatUshanka +- proto: ClothingHeadHatPirate entities: - - uid: 844 - components: - - type: Transform - pos: -15.464306,-10.5187645 - parent: 31 - - uid: 7570 + - uid: 4503 components: - type: Transform - pos: -15.5245695,-10.430269 + pos: 36.423782,-15.13722 parent: 31 - proto: ClothingHeadHatWelding entities: @@ -29102,13 +28891,6 @@ entities: - type: Transform pos: 37.548763,-3.266727 parent: 31 -- proto: ClothingMaskGasMerc - entities: - - uid: 952 - components: - - type: Transform - pos: 29.33713,-19.311977 - parent: 31 - proto: ClothingMaskGasSecurity entities: - uid: 7139 @@ -29123,14 +28905,15 @@ entities: - type: Transform pos: 4.570995,-42.497837 parent: 31 -- proto: ClothingMaskSterile +- proto: ClothingMaskPlague entities: - - uid: 7101 + - uid: 12228 components: - type: Transform - parent: 7110 - - type: Physics - canCollide: False + pos: -30.67646,-5.5401216 + parent: 31 +- proto: ClothingMaskSterile + entities: - uid: 9034 components: - type: Transform @@ -29167,13 +28950,6 @@ entities: - type: Transform pos: -13.566107,24.548891 parent: 31 -- proto: ClothingNeckScarfStripedGreen - entities: - - uid: 9028 - components: - - type: Transform - pos: 54.455875,-22.53784 - parent: 31 - proto: ClothingNeckScarfStripedRed entities: - uid: 10690 @@ -29182,29 +28958,6 @@ entities: rot: 1.5707963267948966 rad pos: -16.557934,-39.78134 parent: 31 -- proto: ClothingNeckScarfStripedZebra - entities: - - uid: 7895 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.198872,-5.9850674 - parent: 31 -- proto: ClothingNeckTieRed - entities: - - uid: 7109 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - - uid: 7856 - components: - - type: Transform - parent: 7853 - - type: Physics - canCollide: False - - type: InsideEntityStorage - proto: ClothingOuterArmorBasic entities: - uid: 1206 @@ -29241,20 +28994,6 @@ entities: - type: Transform pos: -11.209741,19.672714 parent: 31 -- proto: ClothingOuterCoatDetective - entities: - - uid: 7480 - components: - - type: Transform - pos: -21.602036,17.352358 - parent: 31 - - uid: 7854 - components: - - type: Transform - parent: 7853 - - type: Physics - canCollide: False - - type: InsideEntityStorage - proto: ClothingOuterCoatJensen entities: - uid: 9758 @@ -29267,14 +29006,6 @@ entities: - type: Transform pos: -31.464373,10.564828 parent: 31 -- proto: ClothingOuterCoatLab - entities: - - uid: 4231 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - proto: ClothingOuterCoatPirate entities: - uid: 7065 @@ -29282,47 +29013,12 @@ entities: - type: Transform pos: 36.486282,-15.465345 parent: 31 -- proto: ClothingOuterSanta +- proto: ClothingOuterCsCorporateJacket entities: - - uid: 108 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 4166 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 4457 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 8422 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 8447 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 11334 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 11335 - components: - - type: Transform - pos: -11.396052,16.59143 - parent: 31 - - uid: 11336 + - uid: 4633 components: - type: Transform - pos: -11.396052,16.59143 + pos: -30.285543,-6.4463716 parent: 31 - proto: ClothingOuterVestHazard entities: @@ -29344,13 +29040,6 @@ entities: - type: Transform pos: 38.383812,-0.3536343 parent: 31 -- proto: ClothingOuterWinterCentcom - entities: - - uid: 9036 - components: - - type: Transform - pos: 49.408,-22.48963 - parent: 31 - proto: ClothingOuterWinterCMO entities: - uid: 7088 @@ -29366,11 +29055,6 @@ entities: - type: Transform pos: 7.310254,-13.535391 parent: 31 - - uid: 11226 - components: - - type: Transform - pos: -30.51289,-9.469171 - parent: 31 - proto: ClothingOuterWinterHoP entities: - uid: 10828 @@ -29436,13 +29120,6 @@ entities: - type: Transform pos: 58.78938,-5.6705165 parent: 31 -- proto: ClothingShoesBootsMerc - entities: - - uid: 1109 - components: - - type: Transform - pos: -6.4295473,32.285225 - parent: 31 - proto: ClothingShoesBootsPerformer entities: - uid: 8319 @@ -29466,12 +29143,6 @@ entities: parent: 31 - proto: ClothingShoesLeather entities: - - uid: 7098 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - uid: 10585 components: - type: Transform @@ -29498,17 +29169,18 @@ entities: parent: 31 - proto: ClothingUniformJumpskirtDetective entities: - - uid: 7972 + - uid: 13043 components: - type: Transform - pos: 14.57035,20.510712 + rot: -1.5707963267948966 rad + pos: 14.603168,16.430943 parent: 31 - proto: ClothingUniformJumpsuitAncient entities: - - uid: 8953 + - uid: 8707 components: - type: Transform - pos: -27.587215,7.5242066 + pos: -29.677063,7.9308863 parent: 31 - proto: ClothingUniformJumpsuitBartender entities: @@ -29518,26 +29190,12 @@ entities: rot: 1.5707963267948966 rad pos: -34.617214,17.30891 parent: 31 -- proto: ClothingUniformJumpsuitDetective - entities: - - uid: 7108 - components: - - type: Transform - parent: 7110 - - type: Physics - canCollide: False - - uid: 7973 - components: - - type: Transform - pos: 14.460975,20.651337 - parent: 31 -- proto: ClothingUniformJumpsuitMercenary +- proto: ClothingUniformJumpsuitHawaiRed entities: - - uid: 3571 + - uid: 6972 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 30.429188,-19.665958 + pos: -30.379364,-6.1807466 parent: 31 - proto: ComfyChair entities: @@ -29576,10 +29234,11 @@ entities: rot: 3.141592653589793 rad pos: -22.5,8.5 parent: 31 - - uid: 1209 + - uid: 988 components: - type: Transform - pos: -30.5,-4.5 + rot: 1.5707963267948966 rad + pos: -10.5,-7.5 parent: 31 - uid: 1715 components: @@ -29587,12 +29246,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-1.5 parent: 31 - - uid: 2131 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-7.5 - parent: 31 - uid: 2439 components: - type: Transform @@ -29660,24 +29313,6 @@ entities: - type: Transform pos: 27.5,-24.5 parent: 31 - - uid: 8721 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-28.5 - parent: 31 - - uid: 8722 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,-29.5 - parent: 31 - - uid: 8723 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-29.5 - parent: 31 - uid: 10202 components: - type: Transform @@ -29701,11 +29336,11 @@ entities: linearDamping: 0 - proto: ComputerAlert entities: - - uid: 8800 + - uid: 4119 components: - type: Transform rot: -1.5707963267948966 rad - pos: 7.5,31.5 + pos: 4.5,32.5 parent: 31 - uid: 12050 components: @@ -29733,6 +29368,14 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-15.5 parent: 31 +- proto: ComputerBroken + entities: + - uid: 4629 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-30.5 + parent: 31 - proto: ComputerCargoBounty entities: - uid: 8796 @@ -29743,6 +29386,11 @@ entities: parent: 31 - proto: ComputerCargoOrders entities: + - uid: 2044 + components: + - type: Transform + pos: 23.5,13.5 + parent: 31 - uid: 3602 components: - type: Transform @@ -29755,13 +29403,11 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,9.5 parent: 31 -- proto: ComputerCargoShuttle - entities: - - uid: 4254 + - uid: 7110 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,15.5 + rot: 3.141592653589793 rad + pos: 3.5,31.5 parent: 31 - proto: ComputerCloningConsole entities: @@ -29779,10 +29425,11 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,23.5 parent: 31 - - uid: 2721 + - uid: 10062 components: - type: Transform - pos: 3.5,32.5 + rot: 1.5707963267948966 rad + pos: -0.5,34.5 parent: 31 - proto: ComputerCrewMonitoring entities: @@ -29791,10 +29438,11 @@ entities: - type: Transform pos: 23.5,-9.5 parent: 31 - - uid: 2448 + - uid: 6820 components: - type: Transform - pos: 0.5,32.5 + rot: 1.5707963267948966 rad + pos: -0.5,33.5 parent: 31 - uid: 7674 components: @@ -29810,10 +29458,10 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,7.5 parent: 31 - - uid: 8803 + - uid: 9926 components: - type: Transform - pos: 8.5,30.5 + pos: 2.5,35.5 parent: 31 - proto: ComputerId entities: @@ -29822,12 +29470,6 @@ entities: - type: Transform pos: 7.5,21.5 parent: 31 - - uid: 870 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,31.5 - parent: 31 - uid: 1113 components: - type: Transform @@ -29844,6 +29486,12 @@ entities: - type: Transform pos: 29.5,10.5 parent: 31 + - uid: 2536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,32.5 + parent: 31 - uid: 6840 components: - type: Transform @@ -29855,6 +29503,13 @@ entities: rot: 1.5707963267948966 rad pos: 37.5,0.5 parent: 31 +- proto: ComputerMedicalRecords + entities: + - uid: 5812 + components: + - type: Transform + pos: 0.5,35.5 + parent: 31 - proto: ComputerPalletConsole entities: - uid: 6865 @@ -29865,6 +29520,18 @@ entities: parent: 31 - proto: ComputerPowerMonitoring entities: + - uid: 809 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,33.5 + parent: 31 + - uid: 2728 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-24.5 + parent: 31 - uid: 4306 components: - type: Transform @@ -29884,13 +29551,19 @@ entities: rot: -1.5707963267948966 rad pos: 32.5,22.5 parent: 31 - - uid: 2447 + - uid: 4371 components: - type: Transform - pos: 6.5,32.5 + rot: -1.5707963267948966 rad + pos: 4.5,34.5 parent: 31 - proto: ComputerResearchAndDevelopment entities: + - uid: 4025 + components: + - type: Transform + pos: 3.5,35.5 + parent: 31 - uid: 4244 components: - type: Transform @@ -29902,12 +29575,12 @@ entities: rot: 1.5707963267948966 rad pos: -17.5,-19.5 parent: 31 -- proto: ComputerShuttleCargo +- proto: ComputerRoboticsControl entities: - - uid: 2374 + - uid: 4672 components: - type: Transform - pos: 23.5,13.5 + pos: 54.5,-22.5 parent: 31 - proto: ComputerShuttleSalvage entities: @@ -29942,16 +29615,10 @@ entities: parent: 31 - proto: ComputerStationRecords entities: - - uid: 8515 - components: - - type: Transform - pos: -3.5,14.5 - parent: 31 - - uid: 9752 + - uid: 9791 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,29.5 + pos: 1.5,35.5 parent: 31 - uid: 11431 components: @@ -29959,20 +29626,25 @@ entities: rot: 3.141592653589793 rad pos: -13.5,-39.5 parent: 31 -- proto: ComputerSurveillanceCameraMonitor - entities: - - uid: 534 + - uid: 11657 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,29.5 + pos: -2.5,11.5 parent: 31 +- proto: ComputerSurveillanceCameraMonitor + entities: - uid: 2218 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,-4.5 parent: 31 + - uid: 7101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,31.5 + parent: 31 - proto: ComputerTechnologyDiskTerminal entities: - uid: 591 @@ -30277,12 +29949,7 @@ entities: parent: 31 - proto: CrateEmptySpawner entities: - - uid: 3135 - components: - - type: Transform - pos: -17.5,13.5 - parent: 31 - - uid: 8045 + - uid: 4126 components: - type: Transform pos: 10.5,13.5 @@ -30292,13 +29959,37 @@ entities: - type: Transform pos: 18.5,15.5 parent: 31 +- proto: CrateEngineeringCableBulk + entities: + - uid: 3553 + components: + - type: Transform + pos: -34.5,-23.5 + parent: 31 - proto: CrateEngineeringCableHV entities: + - uid: 2098 + components: + - type: Transform + pos: -20.5,22.5 + parent: 31 - uid: 11208 components: - type: Transform pos: 16.5,-29.5 parent: 31 +- proto: CrateEngineeringSolar + entities: + - uid: 2436 + components: + - type: Transform + pos: -32.5,-27.5 + parent: 31 + - uid: 2437 + components: + - type: Transform + pos: -32.5,-28.5 + parent: 31 - proto: CrateEngineeringTeslaCoil entities: - uid: 11373 @@ -30383,13 +30074,6 @@ entities: - type: Transform pos: 20.5,-17.5 parent: 31 -- proto: CrateNPCHamlet - entities: - - uid: 2458 - components: - - type: Transform - pos: 0.5,29.5 - parent: 31 - proto: CratePrivateSecure entities: - uid: 2363 @@ -30438,36 +30122,49 @@ entities: - type: Transform pos: 40.5,-3.5 parent: 31 - - uid: 6904 +- proto: CrateTrashCartFilled + entities: + - uid: 10468 components: - type: Transform - pos: 23.5,-18.5 + pos: -31.5,-13.5 parent: 31 - - uid: 7087 +- proto: CrateTrashCartJani + entities: + - uid: 1438 components: - type: Transform - pos: -7.5,-12.5 + pos: -21.5,-4.5 parent: 31 -- proto: CrateTrashCartFilled +- proto: CrateUranium entities: - - uid: 10468 + - uid: 7792 components: - type: Transform - pos: -31.5,-13.5 + pos: 46.5,9.5 parent: 31 -- proto: CrateTrashCartJani +- proto: CrayonBlack entities: - - uid: 125 + - uid: 8531 components: - type: Transform - pos: -20.5,-11.5 + rot: 3.141592653589793 rad + pos: -5.8501306,15.505665 parent: 31 -- proto: CrayonBox +- proto: CrayonBlue entities: - - uid: 263 + - uid: 8632 + components: + - type: Transform + pos: -5.568251,15.1432495 + parent: 31 +- proto: CrayonRed + entities: + - uid: 2720 components: - type: Transform - pos: -19.62684,-5.2181053 + rot: -1.5707963267948966 rad + pos: -5.3669076,15.646605 parent: 31 - proto: Crematorium entities: @@ -30489,29 +30186,24 @@ entities: available: False - proto: CrowbarRed entities: - - uid: 2093 - components: - - type: Transform - pos: -3.7752368,12.511271 - parent: 31 - uid: 7562 components: - type: Transform rot: -1.5707963267948966 rad pos: -52.74314,-11.621845 parent: 31 - - uid: 8834 + - uid: 11832 components: - type: Transform - pos: 8.498364,31.458696 + pos: -9.430286,-7.422551 parent: 31 - - uid: 9114 +- proto: CryogenicSleepUnit + entities: + - uid: 8027 components: - type: Transform - pos: -10.463156,-6.5336485 + pos: -42.5,-5.5 parent: 31 -- proto: CryogenicSleepUnit - entities: - uid: 9172 components: - type: Transform @@ -30529,13 +30221,6 @@ entities: - type: Transform pos: -40.5,-5.5 parent: 31 -- proto: CryogenicSleepUnitSpawnerPrisoner - entities: - - uid: 7306 - components: - - type: Transform - pos: -15.5,9.5 - parent: 31 - proto: CryoPod entities: - uid: 5231 @@ -30557,76 +30242,13 @@ entities: - type: Transform pos: 7.5,-41.5 parent: 31 -- proto: CurtainsBlackOpen +- proto: CurtainsPurple entities: - - uid: 4977 - components: - - type: Transform - pos: -15.5,-0.5 - parent: 31 - - uid: 12222 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,2.5 - parent: 31 - - uid: 12223 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,2.5 - parent: 31 - - uid: 12224 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,2.5 - parent: 31 - - uid: 12225 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,2.5 - parent: 31 - - uid: 12226 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,2.5 - parent: 31 - - uid: 12227 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,2.5 - parent: 31 - - uid: 12228 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-0.5 - parent: 31 - - uid: 12229 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-1.5 - parent: 31 - - uid: 12230 + - uid: 9271 components: - type: Transform rot: 3.141592653589793 rad - pos: 1.5,-2.5 - parent: 31 - - uid: 12231 - components: - - type: Transform - pos: -15.5,0.5 - parent: 31 - - uid: 12232 - components: - - type: Transform - pos: -15.5,1.5 + pos: -21.5,-27.5 parent: 31 - proto: CurtainsPurpleOpen entities: @@ -30642,18 +30264,6 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-17.5 parent: 31 - - uid: 7344 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,-22.5 - parent: 31 - - uid: 8100 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,-21.5 - parent: 31 - uid: 8500 components: - type: Transform @@ -30666,34 +30276,6 @@ entities: rot: -1.5707963267948966 rad pos: -21.5,-17.5 parent: 31 - - uid: 10706 - components: - - type: Transform - pos: -25.5,-25.5 - parent: 31 - - uid: 10707 - components: - - type: Transform - pos: -26.5,-25.5 - parent: 31 - - uid: 11712 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-20.5 - parent: 31 - - uid: 11713 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,-21.5 - parent: 31 - - uid: 11714 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,-22.5 - parent: 31 - proto: CurtainsRedOpen entities: - uid: 175 @@ -30708,12 +30290,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-31.5 parent: 31 - - uid: 7317 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-31.5 - parent: 31 - uid: 11690 components: - type: Transform @@ -30729,11 +30305,6 @@ entities: parent: 31 - proto: d20Dice entities: - - uid: 2357 - components: - - type: Transform - pos: -23.834803,-5.3811545 - parent: 31 - uid: 4723 components: - type: Transform @@ -30751,24682 +30322,24590 @@ entities: - type: Transform pos: 10.46357,-23.664734 parent: 31 -- proto: d8Dice - entities: - - uid: 2358 + - uid: 11848 components: - type: Transform - pos: -24.287928,-6.3967795 + pos: -17.469051,-6.3893943 parent: 31 + - uid: 11849 + components: + - type: Transform + pos: -17.281412,-6.4675193 + parent: 31 +- proto: d8Dice + entities: - uid: 7293 components: - type: Transform pos: 11.27607,-24.265812 parent: 31 -- proto: DefaultStationBeacon +- proto: DecorBarrels entities: - - uid: 774 + - uid: 8708 components: - type: Transform - pos: -39.5,5.5 + rot: -1.5707963267948966 rad + pos: 35.5,-6.5 parent: 31 - - type: NavMapBeacon - text: evac - - uid: 1374 + - uid: 8709 components: - type: Transform - pos: 44.5,-24.5 + rot: -1.5707963267948966 rad + pos: -24.5,15.5 parent: 31 - - type: NavMapBeacon - text: observatory -- proto: DefaultStationBeaconAME +- proto: DecorFloorBoard10 entities: - - uid: 7280 + - uid: 12642 components: - type: Transform - pos: 47.5,8.5 + rot: -1.5707963267948966 rad + pos: 7.5,-22.5 parent: 31 -- proto: DefaultStationBeaconAnomalyGenerator - entities: - - uid: 11361 + - type: Fixtures + fixtures: {} + - uid: 12674 components: - type: Transform - pos: -5.5,-30.5 + rot: -1.5707963267948966 rad + pos: 3.5,-34.5 parent: 31 -- proto: DefaultStationBeaconArmory + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard11 entities: - - uid: 10088 + - uid: 12431 components: - type: Transform - pos: -12.5,19.5 + pos: -19.5,-12.5 parent: 31 -- proto: DefaultStationBeaconArrivals - entities: - - uid: 812 + - type: Fixtures + fixtures: {} + - uid: 12525 components: - type: Transform - pos: -44.5,-10.5 + pos: -2.5,0.5 parent: 31 -- proto: DefaultStationBeaconArtifactLab + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard12 entities: - - uid: 11363 + - uid: 12650 components: - type: Transform - pos: -12.5,-29.5 + rot: -1.5707963267948966 rad + pos: 5.5,-29.5 parent: 31 -- proto: DefaultStationBeaconAtmospherics + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard17 entities: - - uid: 11312 + - uid: 12232 components: - type: Transform - pos: 31.5,12.5 + pos: -12.5,-9.5 parent: 31 -- proto: DefaultStationBeaconBar + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard18 entities: - - uid: 11319 + - uid: 12639 components: - type: Transform - pos: -5.5,-5.5 + rot: -1.5707963267948966 rad + pos: -5.5,-23.5 parent: 31 -- proto: DefaultStationBeaconBotany + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard2 entities: - - uid: 11320 + - uid: 12638 components: - type: Transform - pos: -18.5,-0.5 + rot: -1.5707963267948966 rad + pos: 3.5,-25.5 parent: 31 -- proto: DefaultStationBeaconBridge + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard20 entities: - - uid: 11269 + - uid: 6922 components: - type: Transform - pos: 3.5,30.5 + rot: -1.5707963267948966 rad + pos: -19.5,-26.5 parent: 31 -- proto: DefaultStationBeaconBrig + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard21 entities: - - uid: 8881 + - uid: 10794 components: - type: Transform - pos: -10.5,8.5 + pos: -22.5,-1.5 parent: 31 -- proto: DefaultStationBeaconCaptainsQuarters - entities: - - uid: 11268 + - type: Fixtures + fixtures: {} + - uid: 12536 components: - type: Transform - pos: 8.5,25.5 + rot: -1.5707963267948966 rad + pos: -20.5,-0.5 parent: 31 -- proto: DefaultStationBeaconCargoBay + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard3 entities: - - uid: 3509 + - uid: 12526 components: - type: Transform - pos: 21.5,16.5 + pos: -7.5,-3.5 parent: 31 -- proto: DefaultStationBeaconCargoReception + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard4 entities: - - uid: 2494 + - uid: 6958 components: - type: Transform - pos: 14.5,10.5 + rot: -1.5707963267948966 rad + pos: -29.5,-23.5 parent: 31 -- proto: DefaultStationBeaconCERoom - entities: - - uid: 3513 + - type: Fixtures + fixtures: {} + - uid: 12102 components: - type: Transform - pos: 39.5,-0.5 + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 parent: 31 -- proto: DefaultStationBeaconChapel - entities: - - uid: 11653 + - type: Fixtures + fixtures: {} + - uid: 12676 components: - type: Transform - pos: -21.5,-20.5 + rot: -1.5707963267948966 rad + pos: -25.5,-25.5 parent: 31 -- proto: DefaultStationBeaconChemistry - entities: - - uid: 7256 + - type: Fixtures + fixtures: {} + - uid: 12678 components: - type: Transform - pos: 16.5,-0.5 + rot: -1.5707963267948966 rad + pos: -19.5,-20.5 parent: 31 -- proto: DefaultStationBeaconCMORoom + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard6 entities: - - uid: 7276 + - uid: 10158 components: - type: Transform - pos: 23.5,-10.5 + rot: 3.141592653589793 rad + pos: -30.5,0.5 parent: 31 -- proto: DefaultStationBeaconCryonics - entities: - - uid: 8316 + - type: Fixtures + fixtures: {} + - uid: 12537 components: - type: Transform - pos: 8.5,-15.5 + rot: -1.5707963267948966 rad + pos: 10.5,-27.5 parent: 31 -- proto: DefaultStationBeaconCryosleep - entities: - - uid: 9207 + - type: Fixtures + fixtures: {} + - uid: 13038 components: - type: Transform - pos: -41.5,-4.5 + rot: 3.141592653589793 rad + pos: -34.5,12.5 parent: 31 -- proto: DefaultStationBeaconDisposals + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard8 entities: - - uid: 7954 + - uid: 12677 components: - type: Transform - pos: -30.5,-16.5 + rot: -1.5707963267948966 rad + pos: -24.5,-27.5 parent: 31 -- proto: DefaultStationBeaconEngineering + - type: Fixtures + fixtures: {} +- proto: DecorFloorBoard9 entities: - - uid: 7281 + - uid: 6777 components: - type: Transform - pos: 33.5,4.5 + rot: -1.5707963267948966 rad + pos: -31.5,-21.5 parent: 31 - - uid: 11056 - components: - - type: Transform - pos: 57.5,10.5 - parent: 31 - - type: NavMapBeacon - text: Tesla Storage -- proto: DefaultStationBeaconEscapePod - entities: - - uid: 11467 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,-17.5 - parent: 31 - - uid: 11468 + - type: Fixtures + fixtures: {} + - uid: 10157 components: - type: Transform rot: 3.141592653589793 rad - pos: -8.5,-41.5 + pos: -29.5,-2.5 parent: 31 -- proto: DefaultStationBeaconEVAStorage - entities: - - uid: 7640 + - type: Fixtures + fixtures: {} + - uid: 12643 components: - type: Transform - pos: 8.5,9.5 + rot: -1.5707963267948966 rad + pos: 6.5,-30.5 parent: 31 -- proto: DefaultStationBeaconHOPOffice - entities: - - uid: 2464 + - type: Fixtures + fixtures: {} + - uid: 12675 components: - type: Transform - pos: 8.5,19.5 + rot: -1.5707963267948966 rad + pos: -25.5,-19.5 parent: 31 -- proto: DefaultStationBeaconHOSRoom - entities: - - uid: 778 + - type: Fixtures + fixtures: {} + - uid: 12979 components: - type: Transform - pos: -8.5,20.5 + pos: 29.5,9.5 parent: 31 -- proto: DefaultStationBeaconJanitorsCloset + - type: Fixtures + fixtures: {} +- proto: DecorFloorBookPile3 entities: - - uid: 11323 + - uid: 12683 components: - type: Transform - pos: -18.5,-11.5 + pos: 27.5,-22.5 parent: 31 -- proto: DefaultStationBeaconKitchen - entities: - - uid: 11318 + - type: Fixtures + fixtures: {} + - uid: 13045 components: - type: Transform - pos: -12.5,-0.5 + rot: 3.141592653589793 rad + pos: 7.5,24.5 parent: 31 -- proto: DefaultStationBeaconLibrary + - type: Fixtures + fixtures: {} +- proto: DecorFloorBookPile6 entities: - - uid: 11325 + - uid: 1247 components: - type: Transform - pos: 9.5,-26.5 + pos: 7.5,-24.5 parent: 31 -- proto: DefaultStationBeaconMantis + - type: Fixtures + fixtures: {} +- proto: DecorFloorBookstack1 entities: - - uid: 11757 + - uid: 8993 components: - type: Transform - pos: 4.5,-33.5 + pos: 12.5,-25.5 parent: 31 -- proto: DefaultStationBeaconMedbay - entities: - - uid: 5767 + - type: Fixtures + fixtures: {} + - uid: 10147 components: - type: Transform - pos: 9.5,-9.5 + rot: 3.141592653589793 rad + pos: -30.5,-2.5 parent: 31 -- proto: DefaultStationBeaconMedical + - type: Fixtures + fixtures: {} +- proto: DecorFloorBrickrubble entities: - - uid: 1215 + - uid: 8270 components: - type: Transform - pos: 9.5,-2.5 + rot: 3.141592653589793 rad + pos: 13.5,27.5 parent: 31 -- proto: DefaultStationBeaconMorgue + - type: Fixtures + fixtures: {} +- proto: DecorFloorCardboard entities: - - uid: 7275 + - uid: 4499 components: - type: Transform - pos: 13.5,-15.5 + rot: -1.5707963267948966 rad + pos: 50.5,-18.5 parent: 31 -- proto: DefaultStationBeaconPermaBrig - entities: - - uid: 11316 + - type: Fixtures + fixtures: {} + - uid: 4926 components: - type: Transform - pos: -17.5,9.5 + rot: 1.5707963267948966 rad + pos: -18.5,-11.5 parent: 31 -- proto: DefaultStationBeaconPowerBank - entities: - - uid: 11352 + - type: Fixtures + fixtures: {} + - uid: 5986 components: - type: Transform - pos: 41.5,5.5 + pos: -11.5,-26.5 parent: 31 -- proto: DefaultStationBeaconProber - entities: - - uid: 11652 + - type: Fixtures + fixtures: {} + - uid: 9866 components: - type: Transform - pos: -13.5,-24.5 + pos: -14.5,-8.5 parent: 31 -- proto: DefaultStationBeaconQMRoom - entities: - - uid: 11353 + - type: Fixtures + fixtures: {} + - uid: 9971 components: - type: Transform - pos: 27.5,9.5 + rot: -1.5707963267948966 rad + pos: -30.5,-4.5 parent: 31 -- proto: DefaultStationBeaconRDRoom - entities: - - uid: 11354 + - type: Fixtures + fixtures: {} + - uid: 12684 components: - type: Transform - pos: -4.5,-21.5 + rot: -1.5707963267948966 rad + pos: -12.5,-18.5 parent: 31 -- proto: DefaultStationBeaconRND - entities: - - uid: 11355 + - type: Fixtures + fixtures: {} + - uid: 12685 components: - type: Transform - pos: -15.5,-23.5 + pos: 45.5,-13.5 parent: 31 -- proto: DefaultStationBeaconRobotics - entities: - - uid: 11360 + - type: Fixtures + fixtures: {} + - uid: 12707 components: - type: Transform - pos: -1.5,-27.5 + rot: -1.5707963267948966 rad + pos: -30.5,-19.5 parent: 31 -- proto: DefaultStationBeaconSalvage - entities: - - uid: 11321 + - type: Fixtures + fixtures: {} + - uid: 12847 components: - type: Transform - pos: 27.5,18.5 + pos: 5.5,-37.5 parent: 31 -- proto: DefaultStationBeaconScience - entities: - - uid: 1208 + - type: Fixtures + fixtures: {} + - uid: 12863 components: - type: Transform - pos: -9.5,-20.5 + rot: -1.5707963267948966 rad + pos: -27.5,-28.5 parent: 31 -- proto: DefaultStationBeaconSecurity - entities: - - uid: 1136 + - type: Fixtures + fixtures: {} + - uid: 12864 components: - type: Transform - pos: -7.5,11.5 + pos: -33.5,0.5 parent: 31 -- proto: DefaultStationBeaconServerRoom - entities: - - uid: 11356 + - type: Fixtures + fixtures: {} + - uid: 12881 components: - type: Transform - pos: -1.5,-21.5 + rot: -1.5707963267948966 rad + pos: -27.5,7.5 parent: 31 -- proto: DefaultStationBeaconSingularity - entities: - - uid: 11358 + - type: Fixtures + fixtures: {} + - uid: 12882 components: - type: Transform - pos: 60.5,2.5 + pos: 19.5,13.5 parent: 31 -- proto: DefaultStationBeaconSolars - entities: - - uid: 11364 + - type: Fixtures + fixtures: {} + - uid: 12883 components: - type: Transform - pos: 15.5,-29.5 + rot: 3.141592653589793 rad + pos: 23.5,8.5 parent: 31 - - uid: 11365 + - type: Fixtures + fixtures: {} + - uid: 12976 components: - type: Transform - pos: -31.5,-32.5 + rot: 1.5707963267948966 rad + pos: 28.5,18.5 parent: 31 - - uid: 11366 + - type: Fixtures + fixtures: {} + - uid: 12980 components: - type: Transform - pos: -22.5,24.5 + rot: 1.5707963267948966 rad + pos: 32.5,-3.5 parent: 31 -- proto: DefaultStationBeaconTechVault - entities: - - uid: 1316 + - type: Fixtures + fixtures: {} + - uid: 12982 components: - type: Transform - pos: 27.5,1.5 + rot: 3.141592653589793 rad + pos: 35.5,-11.5 parent: 31 -- proto: DefaultStationBeaconTEG - entities: - - uid: 11314 + - type: Fixtures + fixtures: {} + - uid: 13021 components: - type: Transform - pos: 38.5,14.5 + rot: 1.5707963267948966 rad + pos: 31.5,-6.5 parent: 31 -- proto: DefaultStationBeaconTelecoms - entities: - - uid: 11357 + - type: Fixtures + fixtures: {} + - uid: 13022 components: - type: Transform - pos: 50.5,-5.5 + pos: 22.5,-0.5 parent: 31 -- proto: DefaultStationBeaconToolRoom - entities: - - uid: 11317 + - type: Fixtures + fixtures: {} + - uid: 13023 components: - type: Transform - pos: -27.5,9.5 + rot: -1.5707963267948966 rad + pos: 21.5,-23.5 parent: 31 -- proto: DefaultStationBeaconVault - entities: - - uid: 11315 + - type: Fixtures + fixtures: {} + - uid: 13039 components: - type: Transform - pos: -1.5,17.5 + rot: 3.141592653589793 rad + pos: 13.5,12.5 parent: 31 -- proto: DefaultStationBeaconWardensOffice - entities: - - uid: 762 + - type: Fixtures + fixtures: {} + - uid: 13040 components: - type: Transform - pos: -1.5,8.5 + pos: 14.5,14.5 parent: 31 -- proto: DefibrillatorCabinetFilled - entities: - - uid: 7340 + - type: Fixtures + fixtures: {} + - uid: 13041 components: - type: Transform rot: 3.141592653589793 rad - pos: 11.5,-12.5 - parent: 31 - - uid: 9834 - components: - - type: Transform - pos: 1.5,29.5 + pos: -31.5,12.5 parent: 31 - - uid: 9835 + - type: Fixtures + fixtures: {} + - uid: 13044 components: - type: Transform - pos: -32.5,6.5 + rot: 3.141592653589793 rad + pos: -18.5,-36.5 parent: 31 - - uid: 10032 + - type: Fixtures + fixtures: {} + - uid: 13052 components: - type: Transform rot: 1.5707963267948966 rad - pos: 16.5,-17.5 + pos: 22.5,-4.5 parent: 31 - - uid: 11438 + - type: Fixtures + fixtures: {} + - uid: 13053 components: - type: Transform - pos: 0.5,15.5 + rot: -1.5707963267948966 rad + pos: 21.5,-4.5 parent: 31 -- proto: DeployableBarrier + - type: Fixtures + fixtures: {} +- proto: DecorFloorGlass3 entities: - - uid: 2502 - components: - - type: Transform - pos: -6.5,17.5 - parent: 31 - - uid: 9369 + - uid: 12706 components: - type: Transform - pos: -5.5,17.5 + pos: 33.5,-10.5 parent: 31 -- proto: DeskBell + - type: Fixtures + fixtures: {} +- proto: DecorFloorGlass4 entities: - - uid: 2195 + - uid: 13037 components: - type: Transform - pos: 7.9000525,-3.1977162 + rot: 3.141592653589793 rad + pos: -37.5,15.5 parent: 31 -- proto: DiceBag + - type: Fixtures + fixtures: {} +- proto: DecorFloorGlass5 entities: - - uid: 10207 + - uid: 13027 components: - type: Transform - pos: 10.362751,-24.393734 + rot: 3.141592653589793 rad + pos: -16.5,23.5 parent: 31 - - uid: 10208 + - type: Fixtures + fixtures: {} +- proto: DecorFloorPallet + entities: + - uid: 12862 components: - type: Transform - pos: 10.756269,-24.370586 + rot: 3.141592653589793 rad + pos: 24.5,10.5 parent: 31 -- proto: DiseaseDiagnoser + - type: Fixtures + fixtures: {} +- proto: DecorFloorPalletStack entities: - - uid: 8435 + - uid: 12781 components: - type: Transform - pos: 19.5,-5.5 + pos: 23.5,7.5 parent: 31 -- proto: DisgustingSweptSoup - entities: - - uid: 9020 + - uid: 13042 components: - type: Transform - pos: -12.586034,24.541399 + rot: 3.141592653589793 rad + pos: 14.5,16.5 parent: 31 -- proto: DisposalBend +- proto: DecorFloorPaper entities: - - uid: 61 + - uid: 1191 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-27.5 + pos: -1.5,14.5 parent: 31 - - uid: 238 + - type: Fixtures + fixtures: {} + - uid: 2734 components: - type: Transform - rot: 4.71238902409608 rad - pos: 37.5,3.5 + pos: -2.5,14.5 parent: 31 - - uid: 310 + - type: Fixtures + fixtures: {} + - uid: 4635 components: - type: Transform - pos: 8.5,17.5 + rot: 1.5707963267948966 rad + pos: -2.5,14.5 parent: 31 - - uid: 399 + - type: Fixtures + fixtures: {} + - uid: 6971 components: - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,-27.5 + pos: -1.5,11.5 parent: 31 - - uid: 838 + - type: Fixtures + fixtures: {} + - uid: 7737 components: - type: Transform - rot: 3.141592697301183 rad - pos: -29.5,10.5 + pos: -2.5,10.5 parent: 31 - - uid: 839 + - type: Fixtures + fixtures: {} + - uid: 8028 components: - type: Transform - pos: -28.5,10.5 + rot: 1.5707963267948966 rad + pos: -1.5,11.5 parent: 31 - - uid: 848 + - type: Fixtures + fixtures: {} + - uid: 8227 components: - type: Transform - pos: -8.5,-25.5 + rot: 3.141592653589793 rad + pos: -1.5,14.5 parent: 31 - - uid: 849 + - type: Fixtures + fixtures: {} + - uid: 8714 components: - type: Transform rot: 1.5707963267948966 rad - pos: -15.5,-20.5 + pos: -15.5,-8.5 parent: 31 - - uid: 874 + - type: Fixtures + fixtures: {} + - uid: 8735 components: - type: Transform - pos: 7.5,11.5 + pos: -18.5,-7.5 parent: 31 - - uid: 927 + - type: Fixtures + fixtures: {} + - uid: 10170 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,-16.5 + pos: 0.5,34.5 parent: 31 - - uid: 2012 + - type: Fixtures + fixtures: {} + - uid: 11830 components: - type: Transform rot: -1.5707963267948966 rad - pos: -25.5,-16.5 + pos: -17.5,-4.5 parent: 31 - - uid: 2299 + - type: Fixtures + fixtures: {} + - uid: 11831 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-11.5 + pos: -17.5,-6.5 parent: 31 - - uid: 2315 + - type: Fixtures + fixtures: {} + - uid: 12230 components: - type: Transform - pos: -5.5,12.5 + pos: -29.5,-6.5 parent: 31 - - uid: 2335 + - type: Fixtures + fixtures: {} + - uid: 13024 components: - type: Transform - pos: -4.5,-16.5 + pos: 4.5,-18.5 parent: 31 - - uid: 2874 + - type: Fixtures + fixtures: {} + - uid: 13025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,26.5 + parent: 31 + - type: Fixtures + fixtures: {} + - uid: 13026 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-8.5 + pos: -4.5,-17.5 parent: 31 - - uid: 3883 + - type: Fixtures + fixtures: {} + - uid: 13029 components: - type: Transform - pos: 3.5,28.5 + pos: -3.5,-2.5 parent: 31 - - uid: 4056 + - type: Fixtures + fixtures: {} + - uid: 13030 components: - type: Transform - pos: -10.5,-18.5 + rot: 1.5707963267948966 rad + pos: 22.5,-10.5 parent: 31 - - uid: 4090 + - type: Fixtures + fixtures: {} + - uid: 13031 components: - type: Transform rot: 3.141592653589793 rad - pos: -14.5,-18.5 + pos: 6.5,-5.5 parent: 31 - - uid: 4206 + - type: Fixtures + fixtures: {} + - uid: 13033 components: - type: Transform rot: 3.141592653589793 rad - pos: -32.5,-14.5 + pos: -34.5,13.5 parent: 31 - - uid: 4703 + - type: Fixtures + fixtures: {} + - uid: 13035 components: - type: Transform - pos: -30.5,-14.5 + pos: 12.5,11.5 parent: 31 - - uid: 4790 + - type: Fixtures + fixtures: {} + - uid: 13036 components: - type: Transform - pos: 6.5,-27.5 + rot: -1.5707963267948966 rad + pos: 14.5,12.5 parent: 31 - - uid: 5100 + - type: Fixtures + fixtures: {} +- proto: DecorFloorPaper1 + entities: + - uid: 125 components: - type: Transform - pos: 14.5,-0.5 + pos: 37.5,-0.5 parent: 31 - - uid: 5292 + - type: Fixtures + fixtures: {} + - uid: 12900 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,-16.5 + pos: 29.5,9.5 parent: 31 - - uid: 5742 + - type: Fixtures + fixtures: {} + - uid: 12978 components: - type: Transform - rot: 3.141592653589793 rad - pos: -28.5,-29.5 + pos: 38.5,-0.5 parent: 31 - - uid: 5758 + - type: Fixtures + fixtures: {} + - uid: 13034 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,-27.5 + rot: 3.141592653589793 rad + pos: -38.5,12.5 parent: 31 - - uid: 6586 + - type: Fixtures + fixtures: {} + - uid: 13046 components: - type: Transform - pos: 33.5,-17.5 + rot: -1.5707963267948966 rad + pos: 3.5,32.5 parent: 31 - - uid: 7420 + - type: Fixtures + fixtures: {} +- proto: DecorFloorPaper2 + entities: + - uid: 6999 components: - type: Transform - pos: 18.5,-10.5 + pos: 55.5,-24.5 parent: 31 - - uid: 7430 + - type: Fixtures + fixtures: {} +- proto: DecorFloorPaper3 + entities: + - uid: 13028 components: - type: Transform rot: 3.141592653589793 rad - pos: 29.5,3.5 + pos: -23.5,17.5 parent: 31 - - uid: 7631 + - type: Fixtures + fixtures: {} + - uid: 13032 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-29.5 + rot: 3.141592653589793 rad + pos: -36.5,15.5 parent: 31 - - uid: 8092 + - type: Fixtures + fixtures: {} +- proto: DecorFloorScrapwood + entities: + - uid: 13056 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,1.5 + rot: 3.141592653589793 rad + pos: -14.5,-34.5 parent: 31 - - uid: 8093 + - type: Fixtures + fixtures: {} +- proto: DecorFloorSkeleton + entities: + - uid: 8228 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,0.5 + rot: 3.141592653589793 rad + pos: 6.5,-42.5 parent: 31 - - uid: 8445 + - type: Fixtures + fixtures: {} +- proto: DecorFloorTrashbags3 + entities: + - uid: 13055 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,1.5 + pos: -32.5,-17.5 parent: 31 - - uid: 9338 +- proto: DefaultStationBeacon + entities: + - uid: 774 components: - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,3.5 + pos: -39.5,5.5 parent: 31 - - uid: 10147 + - type: NavMapBeacon + text: evac +- proto: DefaultStationBeaconAME + entities: + - uid: 7280 components: - type: Transform - pos: 49.5,-29.5 + pos: 47.5,8.5 parent: 31 - - uid: 10149 +- proto: DefaultStationBeaconAnomalyGenerator + entities: + - uid: 11361 components: - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,-29.5 + pos: -5.5,-30.5 parent: 31 - - uid: 10150 +- proto: DefaultStationBeaconArmory + entities: + - uid: 10088 components: - type: Transform - pos: 47.5,-28.5 + pos: -12.5,19.5 parent: 31 - - uid: 10151 +- proto: DefaultStationBeaconArrivals + entities: + - uid: 812 components: - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-28.5 + pos: -44.5,-10.5 parent: 31 - - uid: 10152 +- proto: DefaultStationBeaconArtifactLab + entities: + - uid: 11363 components: - type: Transform - pos: 45.5,-26.5 + pos: -12.5,-29.5 parent: 31 - - uid: 10153 +- proto: DefaultStationBeaconAtmospherics + entities: + - uid: 11312 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,-26.5 + pos: 31.5,12.5 parent: 31 - - uid: 10154 +- proto: DefaultStationBeaconBar + entities: + - uid: 11319 components: - type: Transform - pos: 44.5,-25.5 + pos: -5.5,-5.5 parent: 31 - - uid: 10167 +- proto: DefaultStationBeaconBridge + entities: + - uid: 11269 components: - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,-25.5 + pos: 3.5,30.5 parent: 31 - - uid: 10188 +- proto: DefaultStationBeaconBrig + entities: + - uid: 8881 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-17.5 + pos: -10.5,8.5 parent: 31 - - uid: 10194 +- proto: DefaultStationBeaconCaptainsQuarters + entities: + - uid: 11268 components: - type: Transform - pos: 19.5,-11.5 + pos: 8.5,25.5 parent: 31 - - uid: 10195 +- proto: DefaultStationBeaconCargoBay + entities: + - uid: 3509 components: - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,-11.5 + pos: 21.5,16.5 parent: 31 - - uid: 10206 +- proto: DefaultStationBeaconCargoReception + entities: + - uid: 2494 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,-10.5 + pos: 14.5,10.5 parent: 31 - - uid: 10284 +- proto: DefaultStationBeaconCERoom + entities: + - uid: 3513 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,5.5 + pos: 39.5,-0.5 parent: 31 - - uid: 10295 +- proto: DefaultStationBeaconChapel + entities: + - uid: 11653 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -35.5,15.5 + pos: -21.5,-20.5 parent: 31 - - uid: 11896 +- proto: DefaultStationBeaconChemistry + entities: + - uid: 7256 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,1.5 + pos: 16.5,-0.5 parent: 31 -- proto: DisposalJunction +- proto: DefaultStationBeaconCMORoom entities: - - uid: 176 + - uid: 7276 components: - type: Transform - rot: 4.71238902409608 rad - pos: -28.5,3.5 + pos: 23.5,-10.5 parent: 31 - - uid: 177 +- proto: DefaultStationBeaconCryonics + entities: + - uid: 8316 components: - type: Transform - rot: 4.71238902409608 rad - pos: -22.5,3.5 + pos: 8.5,-15.5 parent: 31 - - uid: 945 +- proto: DefaultStationBeaconCryosleep + entities: + - uid: 9207 components: - type: Transform - pos: -34.5,5.5 + pos: -41.5,-4.5 parent: 31 - - uid: 2016 +- proto: DefaultStationBeaconDisposals + entities: + - uid: 7954 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-11.5 + pos: -30.5,-16.5 parent: 31 - - uid: 2290 +- proto: DefaultStationBeaconEngineering + entities: + - uid: 7281 components: - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-0.5 + pos: 33.5,4.5 parent: 31 - - uid: 2386 + - uid: 11056 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,-10.5 + pos: 57.5,10.5 parent: 31 - - uid: 4038 + - type: NavMapBeacon + text: Tesla Storage +- proto: DefaultStationBeaconEscapePod + entities: + - uid: 5008 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-18.5 + pos: 49.5,-26.5 parent: 31 - - uid: 4149 + - uid: 11467 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,3.5 + rot: 3.141592653589793 rad + pos: 31.5,-17.5 parent: 31 - - uid: 4806 + - uid: 11468 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-25.5 + rot: 3.141592653589793 rad + pos: -8.5,-41.5 parent: 31 - - uid: 7265 +- proto: DefaultStationBeaconEVAStorage + entities: + - uid: 7640 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,4.5 + pos: 8.5,9.5 parent: 31 - - uid: 9587 +- proto: DefaultStationBeaconHOPOffice + entities: + - uid: 2464 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,4.5 + pos: 8.5,19.5 parent: 31 - - uid: 10297 +- proto: DefaultStationBeaconHOSRoom + entities: + - uid: 778 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-18.5 + pos: -8.5,20.5 parent: 31 -- proto: DisposalJunctionFlipped +- proto: DefaultStationBeaconJanitorsCloset entities: - - uid: 166 + - uid: 6523 components: - type: Transform - rot: 4.71238902409608 rad - pos: 34.5,3.5 + pos: -19.5,-0.5 parent: 31 - - uid: 170 + - uid: 6586 components: - type: Transform - pos: 3.5,4.5 + pos: -21.5,-5.5 parent: 31 - - uid: 313 + - uid: 10816 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,4.5 + pos: -30.5,-0.5 parent: 31 - - uid: 352 + - uid: 12640 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,3.5 + pos: -12.5,-12.5 parent: 31 - - uid: 365 +- proto: DefaultStationBeaconKitchen + entities: + - uid: 11318 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,3.5 + pos: -12.5,-0.5 parent: 31 - - uid: 1026 +- proto: DefaultStationBeaconLibrary + entities: + - uid: 11325 components: - type: Transform - pos: 3.5,17.5 + pos: 9.5,-26.5 parent: 31 - - uid: 3408 +- proto: DefaultStationBeaconMantis + entities: + - uid: 11757 components: - type: Transform - pos: -32.5,-8.5 + pos: 4.5,-33.5 parent: 31 - - uid: 3794 +- proto: DefaultStationBeaconMedbay + entities: + - uid: 5767 components: - type: Transform - pos: -15.5,-25.5 + pos: 9.5,-9.5 parent: 31 -- proto: DisposalPipe +- proto: DefaultStationBeaconMedical entities: - - uid: 56 + - uid: 1215 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 23.5,4.5 + pos: 9.5,-2.5 parent: 31 - - uid: 169 +- proto: DefaultStationBeaconMorgue + entities: + - uid: 7275 components: - type: Transform - pos: 3.5,5.5 + pos: 13.5,-15.5 parent: 31 - - uid: 171 +- proto: DefaultStationBeaconPermaBrig + entities: + - uid: 11316 components: - type: Transform - pos: 3.5,7.5 + pos: -17.5,9.5 parent: 31 - - uid: 180 +- proto: DefaultStationBeaconPowerBank + entities: + - uid: 11352 components: - type: Transform - pos: 3.5,8.5 + pos: 41.5,5.5 parent: 31 - - uid: 181 +- proto: DefaultStationBeaconProber + entities: + - uid: 11652 components: - type: Transform - pos: 3.5,9.5 + pos: -13.5,-24.5 parent: 31 - - uid: 189 +- proto: DefaultStationBeaconQMRoom + entities: + - uid: 11353 components: - type: Transform - pos: -28.5,5.5 + pos: 27.5,9.5 parent: 31 - - uid: 190 +- proto: DefaultStationBeaconRDRoom + entities: + - uid: 11354 components: - type: Transform - pos: -28.5,6.5 + pos: -4.5,-21.5 parent: 31 - - uid: 191 +- proto: DefaultStationBeaconRND + entities: + - uid: 11355 components: - type: Transform - pos: -28.5,7.5 + pos: -15.5,-23.5 parent: 31 - - uid: 192 +- proto: DefaultStationBeaconRobotics + entities: + - uid: 11360 components: - type: Transform - pos: -28.5,8.5 + pos: -1.5,-27.5 parent: 31 - - uid: 193 +- proto: DefaultStationBeaconSalvage + entities: + - uid: 11321 components: - type: Transform - pos: -28.5,9.5 + pos: 27.5,18.5 parent: 31 - - uid: 212 +- proto: DefaultStationBeaconScience + entities: + - uid: 1208 components: - type: Transform - pos: 24.5,5.5 + pos: -9.5,-20.5 parent: 31 - - uid: 213 +- proto: DefaultStationBeaconSecurity + entities: + - uid: 8996 components: - type: Transform - pos: 24.5,6.5 + pos: -7.5,11.5 parent: 31 - - uid: 214 +- proto: DefaultStationBeaconServerRoom + entities: + - uid: 11356 components: - type: Transform - pos: 24.5,7.5 + pos: -1.5,-21.5 parent: 31 - - uid: 223 +- proto: DefaultStationBeaconSingularity + entities: + - uid: 11358 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,1.5 + pos: 60.5,2.5 parent: 31 - - uid: 224 +- proto: DefaultStationBeaconSolars + entities: + - uid: 11364 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,0.5 + pos: 15.5,-29.5 parent: 31 - - uid: 225 + - uid: 11365 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,-0.5 + pos: -31.5,-32.5 parent: 31 - - uid: 226 + - type: NavMapBeacon + text: SW Engineering + - uid: 11366 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,-1.5 + pos: -22.5,24.5 parent: 31 - - uid: 227 +- proto: DefaultStationBeaconTechVault + entities: + - uid: 1316 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,-2.5 + pos: 27.5,1.5 parent: 31 - - uid: 228 +- proto: DefaultStationBeaconTEG + entities: + - uid: 11314 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,-3.5 + pos: 38.5,14.5 parent: 31 - - uid: 231 +- proto: DefaultStationBeaconTelecoms + entities: + - uid: 11357 components: - type: Transform - rot: 4.71238902409608 rad - pos: 30.5,3.5 + pos: 50.5,-5.5 parent: 31 - - uid: 232 +- proto: DefaultStationBeaconToolRoom + entities: + - uid: 11317 components: - type: Transform - rot: 4.71238902409608 rad - pos: 36.5,3.5 + pos: -27.5,9.5 parent: 31 - - uid: 233 +- proto: DefaultStationBeaconVault + entities: + - uid: 11315 components: - type: Transform - rot: 4.71238902409608 rad - pos: 35.5,3.5 + pos: -1.5,17.5 parent: 31 - - uid: 234 +- proto: DefaultStationBeaconWardensOffice + entities: + - uid: 762 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,2.5 + pos: -1.5,8.5 parent: 31 - - uid: 235 +- proto: DefibrillatorCabinetFilled + entities: + - uid: 5868 components: - type: Transform - rot: 4.71238902409608 rad - pos: 33.5,3.5 + rot: -1.5707963267948966 rad + pos: 5.5,30.5 parent: 31 - - uid: 236 + - uid: 7340 components: - type: Transform - rot: 4.71238902409608 rad - pos: 32.5,3.5 + rot: 3.141592653589793 rad + pos: 11.5,-12.5 parent: 31 - - uid: 237 + - uid: 9835 components: - type: Transform - rot: 4.71238902409608 rad - pos: 31.5,3.5 + pos: -32.5,6.5 parent: 31 - - uid: 239 + - uid: 10032 components: - type: Transform - pos: 37.5,4.5 + rot: 1.5707963267948966 rad + pos: 16.5,-17.5 parent: 31 - - uid: 240 +- proto: DeployableBarrier + entities: + - uid: 2502 components: - type: Transform - pos: 37.5,5.5 + pos: -6.5,17.5 parent: 31 - - uid: 243 + - uid: 9369 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,28.5 + pos: -5.5,17.5 parent: 31 - - uid: 244 +- proto: DeskBell + entities: + - uid: 2195 components: - type: Transform - pos: 3.5,10.5 + pos: 7.9000525,-3.1977162 parent: 31 - - uid: 246 +- proto: DiceBag + entities: + - uid: 10207 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 + pos: 10.362751,-24.393734 parent: 31 - - uid: 265 + - uid: 10208 components: - type: Transform - pos: 3.5,27.5 + pos: 10.756269,-24.370586 parent: 31 - - uid: 270 +- proto: DiseaseDiagnoser + entities: + - uid: 8435 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,28.5 + pos: 19.5,-5.5 parent: 31 - - uid: 271 +- proto: DisgustingSweptSoup + entities: + - uid: 9020 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,28.5 + pos: -12.586034,24.541399 parent: 31 - - uid: 272 +- proto: DisposalBend + entities: + - uid: 61 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,28.5 + rot: 3.141592653589793 rad + pos: 3.5,-27.5 parent: 31 - - uid: 277 + - uid: 156 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-8.5 + pos: -15.5,-10.5 parent: 31 - - uid: 278 + - uid: 238 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-7.5 + rot: 4.71238902409608 rad + pos: 37.5,3.5 parent: 31 - - uid: 279 + - uid: 310 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-6.5 + pos: 8.5,17.5 parent: 31 - - uid: 280 + - uid: 399 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-5.5 + rot: -1.5707963267948966 rad + pos: -15.5,-27.5 parent: 31 - - uid: 281 + - uid: 838 components: - type: Transform rot: 3.141592697301183 rad - pos: 3.5,-4.5 + pos: -29.5,10.5 parent: 31 - - uid: 282 - components: - - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-3.5 - parent: 31 - - uid: 283 + - uid: 839 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-2.5 + pos: -28.5,10.5 parent: 31 - - uid: 284 + - uid: 848 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-1.5 + pos: -8.5,-25.5 parent: 31 - - uid: 285 + - uid: 849 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-0.5 + rot: 1.5707963267948966 rad + pos: -15.5,-20.5 parent: 31 - - uid: 286 + - uid: 874 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,0.5 + pos: 7.5,11.5 parent: 31 - - uid: 287 + - uid: 927 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,1.5 + rot: 1.5707963267948966 rad + pos: -14.5,-16.5 parent: 31 - - uid: 288 + - uid: 2012 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,2.5 + rot: -1.5707963267948966 rad + pos: -25.5,-16.5 parent: 31 - - uid: 289 + - uid: 2299 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-10.5 + rot: -1.5707963267948966 rad + pos: 10.5,-11.5 parent: 31 - - uid: 291 + - uid: 2315 components: - type: Transform - rot: 4.71238902409608 rad - pos: 5.5,-11.5 + pos: -5.5,12.5 parent: 31 - - uid: 292 + - uid: 2331 components: - type: Transform - rot: 4.71238902409608 rad - pos: 6.5,-11.5 + rot: 3.141592653589793 rad + pos: -15.5,-11.5 parent: 31 - - uid: 293 + - uid: 2335 components: - type: Transform - rot: 4.71238902409608 rad - pos: 7.5,-11.5 + pos: -4.5,-16.5 parent: 31 - - uid: 294 + - uid: 2499 components: - type: Transform - rot: 4.71238902409608 rad - pos: 8.5,-11.5 + rot: 1.5707963267948966 rad + pos: 3.5,28.5 parent: 31 - - uid: 295 + - uid: 3535 components: - type: Transform - rot: 4.71238902409608 rad - pos: 4.5,-11.5 + rot: 1.5707963267948966 rad + pos: 49.5,-14.5 parent: 31 - - uid: 296 + - uid: 3790 components: - type: Transform - rot: 4.71238902409608 rad - pos: 9.5,-11.5 + rot: 3.141592653589793 rad + pos: -25.5,-3.5 parent: 31 - - uid: 301 + - uid: 4056 components: - type: Transform - pos: -5.5,7.5 + pos: -10.5,-18.5 parent: 31 - - uid: 302 + - uid: 4090 components: - type: Transform - rot: 3.141592697301183 rad - pos: 12.5,0.5 + rot: 3.141592653589793 rad + pos: -14.5,-18.5 parent: 31 - - uid: 304 + - uid: 4206 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-0.5 + rot: 3.141592653589793 rad + pos: -32.5,-14.5 parent: 31 - - uid: 311 + - uid: 4703 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,17.5 + pos: -30.5,-14.5 parent: 31 - - uid: 314 + - uid: 4790 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,4.5 + pos: 6.5,-27.5 parent: 31 - - uid: 315 + - uid: 5100 components: - type: Transform - rot: 3.141592697301183 rad - pos: 12.5,2.5 + pos: 14.5,-0.5 parent: 31 - - uid: 316 + - uid: 5292 components: - type: Transform rot: 1.5707963267948966 rad - pos: 14.5,4.5 + pos: -28.5,-16.5 parent: 31 - - uid: 317 + - uid: 5742 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,4.5 + rot: 3.141592653589793 rad + pos: -28.5,-29.5 parent: 31 - - uid: 318 + - uid: 5758 components: - type: Transform rot: 1.5707963267948966 rad - pos: 16.5,4.5 + pos: -20.5,-27.5 parent: 31 - - uid: 319 + - uid: 7420 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,4.5 + pos: 18.5,-10.5 parent: 31 - - uid: 320 + - uid: 7430 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,4.5 + rot: 3.141592653589793 rad + pos: 29.5,3.5 parent: 31 - - uid: 321 + - uid: 7631 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,4.5 + rot: -1.5707963267948966 rad + pos: -20.5,-29.5 parent: 31 - - uid: 322 + - uid: 8092 components: - type: Transform rot: 1.5707963267948966 rad - pos: 20.5,4.5 + pos: 62.5,1.5 parent: 31 - - uid: 323 + - uid: 8093 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,4.5 + rot: -1.5707963267948966 rad + pos: 62.5,0.5 parent: 31 - - uid: 324 + - uid: 8445 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 22.5,4.5 + rot: -1.5707963267948966 rad + pos: -7.5,1.5 parent: 31 - - uid: 325 + - uid: 9338 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 27.5,4.5 + rot: 3.141592653589793 rad + pos: -34.5,3.5 parent: 31 - - uid: 326 + - uid: 10188 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,4.5 + rot: 3.141592653589793 rad + pos: 19.5,-17.5 parent: 31 - - uid: 327 + - uid: 10194 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,4.5 + pos: 19.5,-11.5 parent: 31 - - uid: 330 + - uid: 10195 components: - type: Transform - pos: 3.5,6.5 + rot: 3.141592653589793 rad + pos: 18.5,-11.5 parent: 31 - - uid: 334 + - uid: 10206 components: - type: Transform - rot: 3.141592697301183 rad - pos: 3.5,-9.5 + rot: 1.5707963267948966 rad + pos: 10.5,-10.5 parent: 31 - - uid: 342 + - uid: 10284 components: - type: Transform rot: 3.141592653589793 rad - pos: -11.5,2.5 + pos: -35.5,5.5 parent: 31 - - uid: 344 + - uid: 10295 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,-27.5 + rot: 1.5707963267948966 rad + pos: -35.5,15.5 parent: 31 - - uid: 348 + - uid: 10498 components: - type: Transform - pos: -22.5,4.5 + rot: -1.5707963267948966 rad + pos: -16.5,0.5 parent: 31 - - uid: 349 + - uid: 10590 components: - type: Transform - pos: -22.5,5.5 + rot: 1.5707963267948966 rad + pos: -17.5,0.5 parent: 31 - - uid: 353 + - uid: 11896 components: - type: Transform - rot: 4.71238902409608 rad - pos: -6.5,3.5 + rot: -1.5707963267948966 rad + pos: 67.5,1.5 parent: 31 - - uid: 355 + - uid: 12103 components: - type: Transform - rot: 4.71238902409608 rad - pos: -4.5,3.5 + rot: -1.5707963267948966 rad + pos: 50.5,-14.5 parent: 31 - - uid: 356 +- proto: DisposalJunction + entities: + - uid: 176 components: - type: Transform rot: 4.71238902409608 rad - pos: -3.5,3.5 + pos: -28.5,3.5 parent: 31 - - uid: 357 + - uid: 177 components: - type: Transform rot: 4.71238902409608 rad - pos: -2.5,3.5 + pos: -22.5,3.5 parent: 31 - - uid: 358 + - uid: 945 components: - type: Transform - rot: 4.71238902409608 rad - pos: -1.5,3.5 + pos: -34.5,5.5 parent: 31 - - uid: 359 + - uid: 2016 components: - type: Transform - rot: 4.71238902409608 rad - pos: -0.5,3.5 + rot: 3.141592653589793 rad + pos: 3.5,-11.5 parent: 31 - - uid: 361 + - uid: 2290 components: - type: Transform - rot: 4.71238902409608 rad - pos: 1.5,3.5 + rot: 3.141592653589793 rad + pos: 12.5,-0.5 parent: 31 - - uid: 362 + - uid: 2386 components: - type: Transform - rot: 4.71238902409608 rad - pos: -8.5,3.5 + rot: -1.5707963267948966 rad + pos: 14.5,-10.5 parent: 31 - - uid: 363 + - uid: 4038 components: - type: Transform - rot: 4.71238902409608 rad - pos: -9.5,3.5 + rot: 1.5707963267948966 rad + pos: -12.5,-18.5 parent: 31 - - uid: 364 + - uid: 4149 components: - type: Transform - rot: 4.71238902409608 rad - pos: -10.5,3.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 31 - - uid: 367 + - uid: 4806 components: - type: Transform - rot: 4.71238902409608 rad - pos: -13.5,3.5 + rot: -1.5707963267948966 rad + pos: -10.5,-25.5 parent: 31 - - uid: 368 + - uid: 7265 components: - type: Transform - rot: 4.71238902409608 rad - pos: -14.5,3.5 + rot: -1.5707963267948966 rad + pos: 7.5,4.5 parent: 31 - - uid: 369 + - uid: 9587 components: - type: Transform - rot: 4.71238902409608 rad - pos: -15.5,3.5 + rot: -1.5707963267948966 rad + pos: 24.5,4.5 parent: 31 - - uid: 370 + - uid: 10297 components: - type: Transform - rot: 4.71238902409608 rad - pos: -16.5,3.5 + rot: -1.5707963267948966 rad + pos: -30.5,-18.5 parent: 31 - - uid: 371 +- proto: DisposalJunctionFlipped + entities: + - uid: 166 components: - type: Transform rot: 4.71238902409608 rad - pos: -17.5,3.5 + pos: 34.5,3.5 parent: 31 - - uid: 372 + - uid: 170 components: - type: Transform - rot: 4.71238902409608 rad - pos: -18.5,3.5 + pos: 3.5,4.5 parent: 31 - - uid: 373 + - uid: 313 components: - type: Transform - rot: 4.71238902409608 rad - pos: -19.5,3.5 + rot: -1.5707963267948966 rad + pos: 12.5,4.5 parent: 31 - - uid: 374 + - uid: 352 components: - type: Transform - rot: 4.71238902409608 rad - pos: -20.5,3.5 + rot: -1.5707963267948966 rad + pos: -7.5,3.5 parent: 31 - - uid: 375 + - uid: 365 components: - type: Transform - rot: 4.71238902409608 rad - pos: -21.5,3.5 + rot: -1.5707963267948966 rad + pos: -11.5,3.5 parent: 31 - - uid: 377 + - uid: 1026 components: - type: Transform - rot: 4.71238902409608 rad - pos: -23.5,3.5 + pos: 3.5,17.5 parent: 31 - - uid: 378 + - uid: 3794 components: - type: Transform - rot: 4.71238902409608 rad - pos: -24.5,3.5 + pos: -15.5,-25.5 parent: 31 - - uid: 379 + - uid: 4668 components: - type: Transform - rot: 4.71238902409608 rad + rot: -1.5707963267948966 rad pos: -25.5,3.5 parent: 31 - - uid: 380 + - uid: 7966 components: - type: Transform - rot: 4.71238902409608 rad - pos: -26.5,3.5 + rot: -1.5707963267948966 rad + pos: -16.5,3.5 parent: 31 - - uid: 381 +- proto: DisposalPipe + entities: + - uid: 56 components: - type: Transform - rot: 4.71238902409608 rad - pos: -27.5,3.5 + rot: 1.5707963267948966 rad + pos: 23.5,4.5 parent: 31 - - uid: 382 + - uid: 169 components: - type: Transform - pos: -28.5,4.5 + pos: 3.5,5.5 parent: 31 - - uid: 383 + - uid: 171 components: - type: Transform - rot: 4.71238902409608 rad - pos: -29.5,3.5 + pos: 3.5,7.5 parent: 31 - - uid: 384 + - uid: 180 components: - type: Transform - rot: 4.71238902409608 rad - pos: -30.5,3.5 + pos: 3.5,8.5 parent: 31 - - uid: 385 + - uid: 181 components: - type: Transform - rot: 4.71238902409608 rad - pos: -31.5,3.5 + pos: 3.5,9.5 parent: 31 - - uid: 386 + - uid: 189 components: - type: Transform - pos: -32.5,2.5 + pos: -28.5,5.5 parent: 31 - - uid: 387 + - uid: 190 components: - type: Transform - pos: -32.5,1.5 + pos: -28.5,6.5 parent: 31 - - uid: 388 + - uid: 191 components: - type: Transform - pos: -32.5,0.5 + pos: -28.5,7.5 parent: 31 - - uid: 389 + - uid: 192 components: - type: Transform - pos: -32.5,-0.5 + pos: -28.5,8.5 parent: 31 - - uid: 390 + - uid: 193 components: - type: Transform - pos: -32.5,-1.5 + pos: -28.5,9.5 parent: 31 - - uid: 391 + - uid: 212 components: - type: Transform - pos: -32.5,-2.5 + pos: 24.5,5.5 parent: 31 - - uid: 392 + - uid: 213 components: - type: Transform - pos: -32.5,-3.5 + pos: 24.5,6.5 parent: 31 - - uid: 393 + - uid: 214 components: - type: Transform - pos: -32.5,-4.5 + pos: 24.5,7.5 parent: 31 - - uid: 394 + - uid: 223 components: - type: Transform - pos: -32.5,-5.5 + rot: 3.141592697301183 rad + pos: 34.5,1.5 parent: 31 - - uid: 395 + - uid: 224 components: - type: Transform - pos: -32.5,-6.5 + rot: 3.141592697301183 rad + pos: 34.5,0.5 parent: 31 - - uid: 396 + - uid: 225 components: - type: Transform - pos: -32.5,-7.5 + rot: 3.141592697301183 rad + pos: 34.5,-0.5 parent: 31 - - uid: 405 + - uid: 226 components: - type: Transform - pos: -15.5,-23.5 + rot: 3.141592697301183 rad + pos: 34.5,-1.5 parent: 31 - - uid: 406 + - uid: 227 components: - type: Transform - pos: -15.5,-24.5 + rot: 3.141592697301183 rad + pos: 34.5,-2.5 parent: 31 - - uid: 414 + - uid: 228 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,-25.5 + rot: 3.141592697301183 rad + pos: 34.5,-3.5 parent: 31 - - uid: 624 + - uid: 231 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,-10.5 + rot: 4.71238902409608 rad + pos: 30.5,3.5 parent: 31 - - uid: 758 + - uid: 232 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,-10.5 + rot: 4.71238902409608 rad + pos: 36.5,3.5 parent: 31 - - uid: 788 + - uid: 233 components: - type: Transform - pos: -14.5,-17.5 + rot: 4.71238902409608 rad + pos: 35.5,3.5 parent: 31 - - uid: 846 + - uid: 234 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,-27.5 + rot: 3.141592697301183 rad + pos: 34.5,2.5 parent: 31 - - uid: 847 + - uid: 235 components: - type: Transform - pos: -15.5,-26.5 + rot: 4.71238902409608 rad + pos: 33.5,3.5 parent: 31 - - uid: 921 + - uid: 236 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,3.5 + rot: 4.71238902409608 rad + pos: 32.5,3.5 parent: 31 - - uid: 947 + - uid: 237 components: - type: Transform - pos: -15.5,-21.5 + rot: 4.71238902409608 rad + pos: 31.5,3.5 parent: 31 - - uid: 1031 + - uid: 239 components: - type: Transform - pos: -15.5,-22.5 + pos: 37.5,4.5 parent: 31 - - uid: 1062 + - uid: 240 components: - type: Transform - pos: 7.5,5.5 + pos: 37.5,5.5 parent: 31 - - uid: 1101 + - uid: 244 components: - type: Transform - pos: 7.5,6.5 + pos: 3.5,10.5 parent: 31 - - uid: 1221 + - uid: 246 components: - type: Transform - pos: 7.5,7.5 + rot: -1.5707963267948966 rad + pos: 2.5,3.5 parent: 31 - - uid: 1362 + - uid: 265 components: - type: Transform - pos: 7.5,8.5 + pos: 3.5,27.5 parent: 31 - - uid: 1375 + - uid: 270 components: - type: Transform - pos: 7.5,10.5 + rot: -1.5707963267948966 rad + pos: 0.5,28.5 parent: 31 - - uid: 1493 + - uid: 277 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,-18.5 + rot: 3.141592697301183 rad + pos: 3.5,-8.5 parent: 31 - - uid: 1701 + - uid: 278 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-27.5 + rot: 3.141592697301183 rad + pos: 3.5,-7.5 parent: 31 - - uid: 2014 + - uid: 279 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-13.5 + rot: 3.141592697301183 rad + pos: 3.5,-6.5 parent: 31 - - uid: 2015 + - uid: 280 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-12.5 + rot: 3.141592697301183 rad + pos: 3.5,-5.5 parent: 31 - - uid: 2141 + - uid: 281 components: - type: Transform - pos: -8.5,-27.5 + rot: 3.141592697301183 rad + pos: 3.5,-4.5 parent: 31 - - uid: 2143 + - uid: 282 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,17.5 + rot: 3.141592697301183 rad + pos: 3.5,-3.5 parent: 31 - - uid: 2160 + - uid: 283 components: - type: Transform - pos: 3.5,21.5 + rot: 3.141592697301183 rad + pos: 3.5,-2.5 parent: 31 - - uid: 2260 + - uid: 284 components: - type: Transform - pos: -28.5,-20.5 + rot: 3.141592697301183 rad + pos: 3.5,-1.5 parent: 31 - - uid: 2296 + - uid: 285 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,-16.5 + rot: 3.141592697301183 rad + pos: 3.5,-0.5 parent: 31 - - uid: 2305 + - uid: 286 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,12.5 + rot: 3.141592697301183 rad + pos: 3.5,0.5 parent: 31 - - uid: 2306 + - uid: 287 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,12.5 + rot: 3.141592697301183 rad + pos: 3.5,1.5 parent: 31 - - uid: 2308 + - uid: 288 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,12.5 + rot: 3.141592697301183 rad + pos: 3.5,2.5 parent: 31 - - uid: 2314 + - uid: 289 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-16.5 + rot: 3.141592697301183 rad + pos: 3.5,-10.5 parent: 31 - - uid: 2336 + - uid: 291 components: - type: Transform - pos: -28.5,-19.5 + rot: 4.71238902409608 rad + pos: 5.5,-11.5 parent: 31 - - uid: 2337 + - uid: 292 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-16.5 + rot: 4.71238902409608 rad + pos: 6.5,-11.5 parent: 31 - - uid: 2338 + - uid: 293 components: - type: Transform - pos: -28.5,-21.5 + rot: 4.71238902409608 rad + pos: 7.5,-11.5 parent: 31 - - uid: 2385 + - uid: 294 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-9.5 + rot: 4.71238902409608 rad + pos: 8.5,-11.5 parent: 31 - - uid: 2390 + - uid: 295 components: - type: Transform - pos: -10.5,-19.5 + rot: 4.71238902409608 rad + pos: 4.5,-11.5 parent: 31 - - uid: 2456 + - uid: 296 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,-16.5 + rot: 4.71238902409608 rad + pos: 9.5,-11.5 parent: 31 - - uid: 2527 + - uid: 301 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,17.5 + pos: -5.5,7.5 parent: 31 - - uid: 2621 + - uid: 302 components: - type: Transform - pos: -28.5,-22.5 + rot: 3.141592697301183 rad + pos: 12.5,0.5 parent: 31 - - uid: 2841 + - uid: 304 components: - type: Transform - pos: -28.5,-23.5 + rot: -1.5707963267948966 rad + pos: 13.5,-0.5 parent: 31 - - uid: 2857 + - uid: 311 components: - type: Transform - pos: -8.5,-26.5 + rot: -1.5707963267948966 rad + pos: 6.5,17.5 parent: 31 - - uid: 2858 + - uid: 314 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-24.5 + rot: 1.5707963267948966 rad + pos: 13.5,4.5 parent: 31 - - uid: 2859 + - uid: 315 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-23.5 + rot: 3.141592697301183 rad + pos: 12.5,2.5 parent: 31 - - uid: 2861 + - uid: 316 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-22.5 + rot: 1.5707963267948966 rad + pos: 14.5,4.5 parent: 31 - - uid: 2862 + - uid: 317 components: - type: Transform rot: 1.5707963267948966 rad - pos: -26.5,-16.5 + pos: 15.5,4.5 parent: 31 - - uid: 2863 + - uid: 318 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-8.5 + rot: 1.5707963267948966 rad + pos: 16.5,4.5 parent: 31 - - uid: 2864 + - uid: 319 components: - type: Transform - pos: -8.5,-30.5 + rot: 1.5707963267948966 rad + pos: 17.5,4.5 parent: 31 - - uid: 3354 + - uid: 320 components: - type: Transform - rot: 3.141592653589793 rad - pos: -33.5,-10.5 + rot: 1.5707963267948966 rad + pos: 18.5,4.5 parent: 31 - - uid: 3377 + - uid: 321 components: - type: Transform rot: 1.5707963267948966 rad - pos: 25.5,4.5 + pos: 19.5,4.5 parent: 31 - - uid: 3381 + - uid: 322 components: - type: Transform - pos: -8.5,-29.5 + rot: 1.5707963267948966 rad + pos: 20.5,4.5 parent: 31 - - uid: 3382 + - uid: 323 components: - type: Transform - pos: -8.5,-28.5 + rot: 1.5707963267948966 rad + pos: 21.5,4.5 parent: 31 - - uid: 3383 + - uid: 324 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-25.5 + rot: 1.5707963267948966 rad + pos: 22.5,4.5 parent: 31 - - uid: 3593 + - uid: 325 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-8.5 + rot: 1.5707963267948966 rad + pos: 27.5,4.5 parent: 31 - - uid: 3596 + - uid: 326 components: - type: Transform - pos: -32.5,-10.5 + rot: 1.5707963267948966 rad + pos: 26.5,4.5 parent: 31 - - uid: 3731 + - uid: 327 components: - type: Transform rot: 1.5707963267948966 rad - pos: -27.5,-16.5 + pos: 28.5,4.5 parent: 31 - - uid: 3741 + - uid: 330 components: - type: Transform - pos: -32.5,-13.5 + pos: 3.5,6.5 parent: 31 - - uid: 3742 + - uid: 334 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,-27.5 + rot: 3.141592697301183 rad + pos: 3.5,-9.5 parent: 31 - - uid: 3745 + - uid: 342 components: - type: Transform - pos: -8.5,-31.5 + rot: 3.141592653589793 rad + pos: -11.5,2.5 parent: 31 - - uid: 3747 + - uid: 344 components: - type: Transform - pos: -32.5,-12.5 + rot: -1.5707963267948966 rad + pos: -17.5,-27.5 parent: 31 - - uid: 3748 + - uid: 348 components: - type: Transform - pos: -32.5,-11.5 + pos: -22.5,4.5 parent: 31 - - uid: 3868 + - uid: 349 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,17.5 + pos: -22.5,5.5 parent: 31 - - uid: 3876 + - uid: 353 components: - type: Transform - pos: -28.5,-17.5 + rot: 4.71238902409608 rad + pos: -6.5,3.5 parent: 31 - - uid: 3877 + - uid: 355 components: - type: Transform - pos: 3.5,20.5 + rot: 4.71238902409608 rad + pos: -4.5,3.5 parent: 31 - - uid: 3939 + - uid: 356 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,28.5 + rot: 4.71238902409608 rad + pos: -3.5,3.5 parent: 31 - - uid: 4036 + - uid: 357 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-16.5 + rot: 4.71238902409608 rad + pos: -2.5,3.5 parent: 31 - - uid: 4118 + - uid: 358 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,-18.5 + rot: 4.71238902409608 rad + pos: -1.5,3.5 parent: 31 - - uid: 4158 + - uid: 359 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-16.5 + rot: 4.71238902409608 rad + pos: -0.5,3.5 parent: 31 - - uid: 4183 + - uid: 361 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-16.5 + rot: 4.71238902409608 rad + pos: 1.5,3.5 parent: 31 - - uid: 4199 + - uid: 362 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-16.5 + rot: 4.71238902409608 rad + pos: -8.5,3.5 parent: 31 - - uid: 4211 + - uid: 363 components: - type: Transform - pos: -5.5,9.5 + rot: 4.71238902409608 rad + pos: -9.5,3.5 parent: 31 - - uid: 4325 + - uid: 364 components: - type: Transform - pos: 12.5,1.5 + rot: 4.71238902409608 rad + pos: -10.5,3.5 parent: 31 - - uid: 4329 + - uid: 367 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-16.5 + rot: 4.71238902409608 rad + pos: -13.5,3.5 parent: 31 - - uid: 4728 + - uid: 368 components: - type: Transform - pos: 3.5,-21.5 + rot: 4.71238902409608 rad + pos: -14.5,3.5 parent: 31 - - uid: 4739 + - uid: 369 components: - type: Transform - pos: 3.5,-20.5 + rot: 4.71238902409608 rad + pos: -15.5,3.5 parent: 31 - - uid: 4747 + - uid: 371 components: - type: Transform - pos: 3.5,-24.5 + rot: 4.71238902409608 rad + pos: -17.5,3.5 parent: 31 - - uid: 4748 + - uid: 372 components: - type: Transform - pos: 3.5,-23.5 + rot: 4.71238902409608 rad + pos: -18.5,3.5 parent: 31 - - uid: 4749 + - uid: 373 components: - type: Transform - pos: 3.5,-22.5 + rot: 4.71238902409608 rad + pos: -19.5,3.5 parent: 31 - - uid: 4792 + - uid: 374 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-28.5 + rot: 4.71238902409608 rad + pos: -20.5,3.5 parent: 31 - - uid: 4793 + - uid: 375 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-29.5 + rot: 4.71238902409608 rad + pos: -21.5,3.5 parent: 31 - - uid: 4798 + - uid: 377 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-27.5 + rot: 4.71238902409608 rad + pos: -23.5,3.5 parent: 31 - - uid: 4799 + - uid: 378 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,-27.5 + rot: 4.71238902409608 rad + pos: -24.5,3.5 parent: 31 - - uid: 4800 + - uid: 380 components: - type: Transform - pos: 3.5,-16.5 + rot: 4.71238902409608 rad + pos: -26.5,3.5 parent: 31 - - uid: 4801 + - uid: 381 components: - type: Transform - pos: 3.5,-14.5 + rot: 4.71238902409608 rad + pos: -27.5,3.5 parent: 31 - - uid: 4802 + - uid: 382 components: - type: Transform - pos: 3.5,-15.5 + pos: -28.5,4.5 parent: 31 - - uid: 4803 + - uid: 383 components: - type: Transform - pos: 3.5,-18.5 + rot: 4.71238902409608 rad + pos: -29.5,3.5 parent: 31 - - uid: 4804 + - uid: 384 components: - type: Transform - pos: 3.5,-17.5 + rot: 4.71238902409608 rad + pos: -30.5,3.5 parent: 31 - - uid: 4805 + - uid: 385 components: - type: Transform - pos: 3.5,-19.5 + rot: 4.71238902409608 rad + pos: -31.5,3.5 parent: 31 - - uid: 4811 + - uid: 386 components: - type: Transform - pos: 3.5,-26.5 + pos: -32.5,2.5 parent: 31 - - uid: 4812 + - uid: 387 components: - type: Transform - pos: 3.5,-25.5 + pos: -32.5,1.5 parent: 31 - - uid: 4878 + - uid: 388 components: - type: Transform - pos: -5.5,8.5 + pos: -32.5,0.5 parent: 31 - - uid: 4969 + - uid: 389 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-21.5 + pos: -32.5,-0.5 parent: 31 - - uid: 5085 + - uid: 390 components: - type: Transform - pos: -5.5,11.5 + pos: -32.5,-1.5 parent: 31 - - uid: 5099 + - uid: 391 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-1.5 + pos: -32.5,-2.5 parent: 31 - - uid: 5144 + - uid: 392 components: - type: Transform - pos: -5.5,10.5 + pos: -32.5,-3.5 parent: 31 - - uid: 5191 + - uid: 393 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,-25.5 + pos: -32.5,-4.5 parent: 31 - - uid: 5232 + - uid: 394 components: - type: Transform - pos: -5.5,6.5 + pos: -32.5,-5.5 parent: 31 - - uid: 5234 + - uid: 395 components: - type: Transform - pos: -5.5,4.5 + pos: -32.5,-6.5 parent: 31 - - uid: 5235 + - uid: 405 components: - type: Transform - pos: -5.5,5.5 + pos: -15.5,-23.5 parent: 31 - - uid: 5250 + - uid: 406 components: - type: Transform - pos: -32.5,-9.5 + pos: -15.5,-24.5 parent: 31 - - uid: 5291 + - uid: 414 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-8.5 + rot: 1.5707963267948966 rad + pos: -11.5,-25.5 parent: 31 - - uid: 5733 + - uid: 624 components: - type: Transform rot: 1.5707963267948966 rad - pos: -23.5,-29.5 + pos: 16.5,-10.5 parent: 31 - - uid: 5740 + - uid: 758 components: - type: Transform rot: 1.5707963267948966 rad - pos: -27.5,-29.5 + pos: 15.5,-10.5 parent: 31 - - uid: 5756 + - uid: 788 components: - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,-28.5 + pos: -14.5,-17.5 parent: 31 - - uid: 5760 + - uid: 846 components: - type: Transform - pos: -28.5,-27.5 + rot: -1.5707963267948966 rad + pos: -16.5,-27.5 parent: 31 - - uid: 5763 + - uid: 847 components: - type: Transform - pos: -28.5,-28.5 + pos: -15.5,-26.5 parent: 31 - - uid: 5771 + - uid: 921 components: - type: Transform rot: 1.5707963267948966 rad - pos: -22.5,-29.5 + pos: -12.5,3.5 parent: 31 - - uid: 7082 + - uid: 947 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,-29.5 + pos: -15.5,-21.5 parent: 31 - - uid: 7224 + - uid: 1031 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,-29.5 + pos: -15.5,-22.5 parent: 31 - - uid: 7356 + - uid: 1062 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-29.5 + pos: 7.5,5.5 parent: 31 - - uid: 7380 + - uid: 1101 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-20.5 + pos: 7.5,6.5 parent: 31 - - uid: 7381 + - uid: 1221 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,-25.5 + pos: 7.5,7.5 parent: 31 - - uid: 7415 + - uid: 1343 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-29.5 + rot: 3.141592653589793 rad + pos: 50.5,-13.5 parent: 31 - - uid: 7421 + - uid: 1362 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,-10.5 + pos: 7.5,8.5 parent: 31 - - uid: 7427 + - uid: 1367 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-25.5 + rot: -1.5707963267948966 rad + pos: -6.5,12.5 parent: 31 - - uid: 7451 + - uid: 1375 components: - type: Transform - pos: 7.5,9.5 + pos: 7.5,10.5 parent: 31 - - uid: 7452 + - uid: 1493 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,11.5 + rot: 1.5707963267948966 rad + pos: -11.5,-18.5 parent: 31 - - uid: 7584 + - uid: 1701 components: - type: Transform - pos: -28.5,-26.5 + rot: -1.5707963267948966 rad + pos: -18.5,-27.5 parent: 31 - - uid: 7630 + - uid: 2014 components: - type: Transform - pos: -28.5,-25.5 + rot: 3.141592653589793 rad + pos: 3.5,-13.5 parent: 31 - - uid: 7962 + - uid: 2015 components: - type: Transform - pos: 29.5,5.5 + rot: 3.141592653589793 rad + pos: 3.5,-12.5 parent: 31 - - uid: 8171 + - uid: 2141 components: - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-2.5 + pos: -8.5,-27.5 parent: 31 - - uid: 8442 + - uid: 2143 components: - type: Transform rot: -1.5707963267948966 rad - pos: 0.5,3.5 + pos: 7.5,17.5 parent: 31 - - uid: 8446 + - uid: 2160 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,2.5 + pos: 3.5,21.5 parent: 31 - - uid: 9171 + - uid: 2260 components: - type: Transform - pos: -4.5,6.5 + pos: -28.5,-20.5 parent: 31 - - uid: 9221 + - uid: 2296 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,9.5 + rot: -1.5707963267948966 rad + pos: -8.5,-16.5 parent: 31 - - uid: 9229 + - uid: 2306 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,12.5 + rot: 1.5707963267948966 rad + pos: -16.5,-10.5 parent: 31 - - uid: 9230 + - uid: 2314 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,13.5 + rot: -1.5707963267948966 rad + pos: -6.5,-16.5 parent: 31 - - uid: 9324 + - uid: 2336 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,16.5 + pos: -28.5,-19.5 parent: 31 - - uid: 9340 + - uid: 2337 components: - type: Transform rot: -1.5707963267948966 rad - pos: -33.5,3.5 + pos: -5.5,-16.5 parent: 31 - - uid: 9341 + - uid: 2338 components: - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,4.5 + pos: -28.5,-21.5 parent: 31 - - uid: 9378 + - uid: 2385 components: - type: Transform rot: 3.141592653589793 rad - pos: 3.5,15.5 - parent: 31 - - uid: 9458 - components: - - type: Transform - pos: -28.5,-24.5 + pos: 14.5,-9.5 parent: 31 - - uid: 9513 + - uid: 2390 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,14.5 + pos: -10.5,-19.5 parent: 31 - - uid: 9520 + - uid: 2456 components: - type: Transform - pos: 3.5,22.5 + rot: -1.5707963267948966 rad + pos: -7.5,-16.5 parent: 31 - - uid: 9521 + - uid: 2527 components: - type: Transform - pos: 3.5,23.5 + rot: -1.5707963267948966 rad + pos: 4.5,17.5 parent: 31 - - uid: 9522 + - uid: 2621 components: - type: Transform - pos: 3.5,24.5 + pos: -28.5,-22.5 parent: 31 - - uid: 9523 + - uid: 2735 components: - type: Transform - pos: 3.5,25.5 + pos: -32.5,-8.5 parent: 31 - - uid: 9524 + - uid: 2841 components: - type: Transform - pos: 3.5,26.5 + pos: -28.5,-23.5 parent: 31 - - uid: 9544 + - uid: 2857 components: - type: Transform - pos: 10.5,-6.5 + pos: -8.5,-26.5 parent: 31 - - uid: 9559 + - uid: 2858 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,4.5 + rot: 3.141592653589793 rad + pos: -10.5,-24.5 parent: 31 - - uid: 9588 + - uid: 2859 components: - type: Transform - pos: 12.5,3.5 + rot: 3.141592653589793 rad + pos: -10.5,-23.5 parent: 31 - - uid: 9599 + - uid: 2861 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,4.5 + rot: 3.141592653589793 rad + pos: -10.5,-22.5 parent: 31 - - uid: 9633 + - uid: 2862 components: - type: Transform rot: 1.5707963267948966 rad - pos: 17.5,10.5 + pos: -26.5,-16.5 parent: 31 - - uid: 9638 + - uid: 2864 components: - type: Transform - pos: 13.5,8.5 + pos: -8.5,-30.5 parent: 31 - - uid: 9649 + - uid: 3208 components: - type: Transform rot: -1.5707963267948966 rad - pos: 11.5,4.5 + pos: -8.5,12.5 parent: 31 - - uid: 9650 + - uid: 3235 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,4.5 + pos: -7.5,12.5 parent: 31 - - uid: 9651 + - uid: 3354 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,4.5 + rot: 3.141592653589793 rad + pos: -33.5,-10.5 parent: 31 - - uid: 9652 + - uid: 3377 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,4.5 + rot: 1.5707963267948966 rad + pos: 25.5,4.5 parent: 31 - - uid: 9653 + - uid: 3381 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,4.5 + pos: -8.5,-29.5 parent: 31 - - uid: 9655 + - uid: 3382 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,4.5 + pos: -8.5,-28.5 parent: 31 - - uid: 9847 + - uid: 3383 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,18.5 + rot: -1.5707963267948966 rad + pos: -9.5,-25.5 parent: 31 - - uid: 9849 + - uid: 3397 components: - type: Transform rot: 3.141592653589793 rad - pos: 3.5,19.5 + pos: -25.5,-0.5 parent: 31 - - uid: 10148 + - uid: 3596 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,-29.5 + pos: -32.5,-10.5 parent: 31 - - uid: 10155 + - uid: 3731 components: - type: Transform - pos: 45.5,-27.5 + rot: 1.5707963267948966 rad + pos: -27.5,-16.5 parent: 31 - - uid: 10156 + - uid: 3732 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,-28.5 + rot: 3.141592653589793 rad + pos: 50.5,-12.5 parent: 31 - - uid: 10157 + - uid: 3741 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,-25.5 + pos: -32.5,-13.5 parent: 31 - - uid: 10158 + - uid: 3742 components: - type: Transform rot: -1.5707963267948966 rad - pos: 42.5,-25.5 + pos: -19.5,-27.5 parent: 31 - - uid: 10159 + - uid: 3745 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,-25.5 + pos: -8.5,-31.5 parent: 31 - - uid: 10160 + - uid: 3747 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,-25.5 + pos: -32.5,-12.5 parent: 31 - - uid: 10161 + - uid: 3748 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,-25.5 + pos: -32.5,-11.5 parent: 31 - - uid: 10162 + - uid: 3772 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,-25.5 + rot: 3.141592653589793 rad + pos: -25.5,-1.5 parent: 31 - - uid: 10163 + - uid: 3868 components: - type: Transform rot: -1.5707963267948966 rad - pos: 37.5,-25.5 + pos: 5.5,17.5 parent: 31 - - uid: 10164 + - uid: 3876 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,-25.5 + pos: -28.5,-17.5 parent: 31 - - uid: 10165 + - uid: 3877 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,-25.5 + pos: 3.5,20.5 parent: 31 - - uid: 10166 + - uid: 4036 components: - type: Transform rot: -1.5707963267948966 rad - pos: 34.5,-25.5 - parent: 31 - - uid: 10168 - components: - - type: Transform - pos: 33.5,-24.5 - parent: 31 - - uid: 10169 - components: - - type: Transform - pos: 33.5,-23.5 + pos: -13.5,-16.5 parent: 31 - - uid: 10170 + - uid: 4118 components: - type: Transform - pos: 33.5,-22.5 + rot: 1.5707963267948966 rad + pos: -13.5,-18.5 parent: 31 - - uid: 10171 + - uid: 4158 components: - type: Transform - pos: 33.5,-21.5 + rot: -1.5707963267948966 rad + pos: -12.5,-16.5 parent: 31 - - uid: 10172 + - uid: 4183 components: - type: Transform - pos: 33.5,-20.5 + rot: -1.5707963267948966 rad + pos: -9.5,-16.5 parent: 31 - - uid: 10173 + - uid: 4199 components: - type: Transform - pos: 33.5,-19.5 + rot: -1.5707963267948966 rad + pos: -10.5,-16.5 parent: 31 - - uid: 10174 + - uid: 4211 components: - type: Transform - pos: 33.5,-18.5 + pos: -5.5,9.5 parent: 31 - - uid: 10175 + - uid: 4325 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,-17.5 + pos: 12.5,1.5 parent: 31 - - uid: 10176 + - uid: 4329 components: - type: Transform rot: -1.5707963267948966 rad - pos: 31.5,-17.5 + pos: -11.5,-16.5 parent: 31 - - uid: 10177 + - uid: 4580 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,-17.5 + rot: 3.141592653589793 rad + pos: -25.5,1.5 parent: 31 - - uid: 10178 + - uid: 4587 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,-17.5 + rot: 3.141592653589793 rad + pos: -25.5,2.5 parent: 31 - - uid: 10179 + - uid: 4588 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 28.5,-17.5 + pos: -32.5,-7.5 parent: 31 - - uid: 10180 + - uid: 4728 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 27.5,-17.5 + pos: 3.5,-21.5 parent: 31 - - uid: 10181 + - uid: 4739 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,-17.5 + pos: 3.5,-20.5 parent: 31 - - uid: 10182 + - uid: 4747 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,-17.5 + pos: 3.5,-24.5 parent: 31 - - uid: 10183 + - uid: 4748 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,-17.5 + pos: 3.5,-23.5 parent: 31 - - uid: 10184 + - uid: 4749 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,-17.5 + pos: 3.5,-22.5 parent: 31 - - uid: 10185 + - uid: 4792 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 22.5,-17.5 + rot: 3.141592653589793 rad + pos: 6.5,-28.5 parent: 31 - - uid: 10186 + - uid: 4793 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,-17.5 + rot: 3.141592653589793 rad + pos: 6.5,-29.5 parent: 31 - - uid: 10187 + - uid: 4798 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,-17.5 + rot: 1.5707963267948966 rad + pos: 5.5,-27.5 parent: 31 - - uid: 10189 + - uid: 4799 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-16.5 + rot: 1.5707963267948966 rad + pos: 4.5,-27.5 parent: 31 - - uid: 10190 + - uid: 4800 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-15.5 + pos: 3.5,-16.5 parent: 31 - - uid: 10191 + - uid: 4801 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-14.5 + pos: 3.5,-14.5 parent: 31 - - uid: 10192 + - uid: 4802 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-13.5 + pos: 3.5,-15.5 parent: 31 - - uid: 10193 + - uid: 4803 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-12.5 + pos: 3.5,-18.5 parent: 31 - - uid: 10203 + - uid: 4804 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-10.5 + pos: 3.5,-17.5 parent: 31 - - uid: 10204 + - uid: 4805 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-10.5 + pos: 3.5,-19.5 parent: 31 - - uid: 10205 + - uid: 4811 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,-10.5 + pos: 3.5,-26.5 parent: 31 - - uid: 10280 + - uid: 4812 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -31.5,-14.5 + pos: 3.5,-25.5 parent: 31 - - uid: 10281 + - uid: 4878 components: - type: Transform - rot: 3.141592653589793 rad - pos: -30.5,-15.5 + pos: -5.5,8.5 parent: 31 - - uid: 10282 + - uid: 4969 components: - type: Transform rot: 3.141592653589793 rad - pos: -30.5,-16.5 + pos: -10.5,-21.5 parent: 31 - - uid: 10283 + - uid: 5085 components: - type: Transform - rot: 3.141592653589793 rad - pos: -30.5,-17.5 + pos: -5.5,11.5 parent: 31 - - uid: 10285 + - uid: 5099 components: - type: Transform rot: 3.141592653589793 rad - pos: -35.5,6.5 + pos: 14.5,-1.5 parent: 31 - - uid: 10286 + - uid: 5144 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,7.5 + pos: -5.5,10.5 parent: 31 - - uid: 10287 + - uid: 5191 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,8.5 + rot: 1.5707963267948966 rad + pos: -13.5,-25.5 parent: 31 - - uid: 10288 + - uid: 5227 components: - type: Transform rot: 3.141592653589793 rad - pos: -35.5,9.5 + pos: -25.5,0.5 parent: 31 - - uid: 10289 + - uid: 5232 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,10.5 + pos: -5.5,6.5 parent: 31 - - uid: 10290 + - uid: 5234 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,11.5 + pos: -5.5,4.5 parent: 31 - - uid: 10291 + - uid: 5235 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,12.5 + pos: -5.5,5.5 parent: 31 - - uid: 10292 + - uid: 5250 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,13.5 + pos: -32.5,-9.5 parent: 31 - - uid: 10293 + - uid: 5733 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,14.5 + rot: 1.5707963267948966 rad + pos: -23.5,-29.5 parent: 31 - - uid: 10298 + - uid: 5740 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-18.5 + rot: 1.5707963267948966 rad + pos: -27.5,-29.5 parent: 31 - - uid: 10444 + - uid: 5756 components: - type: Transform rot: 3.141592653589793 rad - pos: 12.5,-1.5 + pos: -20.5,-28.5 parent: 31 - - uid: 11254 + - uid: 5760 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -31.5,-8.5 + pos: -28.5,-27.5 parent: 31 - - uid: 12037 + - uid: 5763 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,0.5 + pos: -28.5,-28.5 parent: 31 - - uid: 12038 + - uid: 5771 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,1.5 + rot: 1.5707963267948966 rad + pos: -22.5,-29.5 parent: 31 - - uid: 12039 + - uid: 7082 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,1.5 + rot: 1.5707963267948966 rad + pos: -24.5,-29.5 parent: 31 - - uid: 12040 + - uid: 7224 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 65.5,1.5 + rot: 1.5707963267948966 rad + pos: -21.5,-29.5 parent: 31 - - uid: 12041 + - uid: 7356 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 66.5,1.5 + rot: 1.5707963267948966 rad + pos: -26.5,-29.5 parent: 31 -- proto: DisposalTrunk - entities: - - uid: 178 + - uid: 7380 components: - type: Transform rot: 3.141592653589793 rad - pos: -11.5,1.5 + pos: -10.5,-20.5 parent: 31 - - uid: 215 + - uid: 7381 components: - type: Transform - pos: 24.5,8.5 + rot: 1.5707963267948966 rad + pos: -14.5,-25.5 parent: 31 - - uid: 229 + - uid: 7415 components: - type: Transform - rot: 3.141592697301183 rad - pos: 34.5,-4.5 + rot: 1.5707963267948966 rad + pos: -25.5,-29.5 parent: 31 - - uid: 241 + - uid: 7421 components: - type: Transform - pos: 37.5,6.5 + rot: 1.5707963267948966 rad + pos: 17.5,-10.5 parent: 31 - - uid: 273 + - uid: 7427 components: - type: Transform rot: 1.5707963267948966 rad - pos: -2.5,28.5 + pos: -12.5,-25.5 parent: 31 - - uid: 350 + - uid: 7451 components: - type: Transform - pos: -22.5,6.5 + pos: 7.5,9.5 parent: 31 - - uid: 837 + - uid: 7452 components: - type: Transform - pos: -29.5,11.5 + rot: 3.141592653589793 rad + pos: 3.5,11.5 parent: 31 - - uid: 1474 + - uid: 7584 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,11.5 + pos: -28.5,-26.5 parent: 31 - - uid: 2313 + - uid: 7630 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,-32.5 + pos: -28.5,-25.5 parent: 31 - - uid: 2322 + - uid: 7962 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,12.5 + pos: 29.5,5.5 parent: 31 - - uid: 2334 + - uid: 8171 components: - type: Transform rot: 3.141592653589793 rad - pos: -12.5,-19.5 + pos: 12.5,-2.5 parent: 31 - - uid: 2437 + - uid: 8226 components: - type: Transform - pos: -27.5,-7.5 + rot: 3.141592653589793 rad + pos: -25.5,-2.5 parent: 31 - - uid: 2531 + - uid: 8442 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,-17.5 + rot: -1.5707963267948966 rad + pos: 0.5,3.5 parent: 31 - - uid: 4795 + - uid: 8446 components: - type: Transform rot: 3.141592653589793 rad - pos: 6.5,-30.5 + pos: -7.5,2.5 parent: 31 - - uid: 5097 + - uid: 8717 components: - type: Transform rot: 3.141592653589793 rad - pos: 14.5,-2.5 + pos: -25.5,-1.5 parent: 31 - - uid: 5223 + - uid: 9171 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,16.5 + pos: -4.5,6.5 parent: 31 - - uid: 5671 + - uid: 9221 components: - type: Transform - pos: 14.5,-8.5 + rot: 3.141592653589793 rad + pos: -4.5,9.5 parent: 31 - - uid: 7120 + - uid: 9229 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-20.5 + rot: 3.141592653589793 rad + pos: 3.5,12.5 parent: 31 - - uid: 7961 + - uid: 9230 components: - type: Transform - pos: 29.5,6.5 + rot: 3.141592653589793 rad + pos: 3.5,13.5 parent: 31 - - uid: 7987 + - uid: 9324 components: - type: Transform rot: 3.141592653589793 rad - pos: 12.5,-3.5 + pos: 3.5,16.5 parent: 31 - - uid: 8091 + - uid: 9340 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,0.5 + rot: -1.5707963267948966 rad + pos: -33.5,3.5 parent: 31 - - uid: 8444 + - uid: 9341 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,1.5 + rot: 3.141592653589793 rad + pos: -34.5,4.5 parent: 31 - - uid: 9339 + - uid: 9378 components: - type: Transform - pos: -34.5,6.5 + rot: 3.141592653589793 rad + pos: 3.5,15.5 parent: 31 - - uid: 10020 + - uid: 9458 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -31.5,-18.5 + pos: -28.5,-24.5 parent: 31 - - uid: 10146 + - uid: 9513 components: - type: Transform rot: 3.141592653589793 rad - pos: 49.5,-30.5 + pos: 3.5,14.5 parent: 31 - - uid: 10294 + - uid: 9520 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -34.5,15.5 + pos: 3.5,22.5 parent: 31 - - uid: 10300 + - uid: 9521 components: - type: Transform - pos: -25.5,-15.5 + pos: 3.5,23.5 parent: 31 - - uid: 12042 + - uid: 9522 components: - type: Transform - pos: 67.5,2.5 + pos: 3.5,24.5 parent: 31 -- proto: DisposalUnit - entities: - - uid: 195 + - uid: 9523 components: - type: Transform - pos: -29.5,11.5 + pos: 3.5,25.5 parent: 31 - - uid: 210 + - uid: 9524 components: - type: Transform - pos: 6.5,11.5 + pos: 3.5,26.5 parent: 31 - - uid: 216 + - uid: 9544 components: - type: Transform - pos: 24.5,8.5 + pos: 10.5,-6.5 parent: 31 - - uid: 230 + - uid: 9559 components: - type: Transform - pos: 34.5,-4.5 + rot: -1.5707963267948966 rad + pos: 5.5,4.5 parent: 31 - - uid: 242 + - uid: 9588 components: - type: Transform - pos: 37.5,6.5 + pos: 12.5,3.5 parent: 31 - - uid: 274 + - uid: 9599 components: - type: Transform - pos: -2.5,28.5 + rot: -1.5707963267948966 rad + pos: 4.5,4.5 parent: 31 - - uid: 332 + - uid: 9633 components: - type: Transform - pos: 29.5,6.5 + rot: 1.5707963267948966 rad + pos: 17.5,10.5 parent: 31 - - uid: 366 + - uid: 9638 components: - type: Transform - pos: -11.5,1.5 + pos: 13.5,8.5 parent: 31 - - uid: 376 + - uid: 9649 components: - type: Transform - pos: -22.5,6.5 + rot: -1.5707963267948966 rad + pos: 11.5,4.5 parent: 31 - - uid: 1102 + - uid: 9650 components: - type: Transform - pos: 14.5,-2.5 + rot: -1.5707963267948966 rad + pos: 10.5,4.5 parent: 31 - - uid: 2266 + - uid: 9651 components: - type: Transform - pos: -12.5,-19.5 + rot: -1.5707963267948966 rad + pos: 9.5,4.5 parent: 31 - - uid: 2520 + - uid: 9652 components: - type: Transform - pos: 14.5,-8.5 + rot: -1.5707963267948966 rad + pos: 9.5,4.5 parent: 31 - - uid: 3726 + - uid: 9653 components: - type: Transform - pos: -25.5,-15.5 + rot: -1.5707963267948966 rad + pos: 8.5,4.5 parent: 31 - - uid: 4078 + - uid: 9655 components: - type: Transform - pos: -27.5,-7.5 + rot: -1.5707963267948966 rad + pos: 6.5,4.5 parent: 31 - - uid: 4368 + - uid: 9847 components: - type: Transform - pos: -9.5,12.5 + rot: 3.141592653589793 rad + pos: 3.5,18.5 parent: 31 - - uid: 4772 + - uid: 9849 components: - type: Transform - pos: 6.5,-30.5 + rot: 3.141592653589793 rad + pos: 3.5,19.5 parent: 31 - - uid: 5226 + - uid: 10181 components: - type: Transform - pos: 8.5,16.5 + rot: -1.5707963267948966 rad + pos: 26.5,-17.5 parent: 31 - - uid: 7587 + - uid: 10182 components: - type: Transform - pos: -14.5,-20.5 + rot: -1.5707963267948966 rad + pos: 25.5,-17.5 parent: 31 - - uid: 8094 + - uid: 10183 components: - type: Transform - pos: 60.5,0.5 + rot: -1.5707963267948966 rad + pos: 24.5,-17.5 parent: 31 - - uid: 8130 + - uid: 10184 components: - type: Transform - pos: -4.5,-17.5 + rot: -1.5707963267948966 rad + pos: 23.5,-17.5 parent: 31 - - uid: 8443 + - uid: 10185 components: - type: Transform - pos: -8.5,1.5 + rot: -1.5707963267948966 rad + pos: 22.5,-17.5 parent: 31 - - uid: 9343 + - uid: 10186 components: - type: Transform - pos: -34.5,6.5 + rot: -1.5707963267948966 rad + pos: 21.5,-17.5 parent: 31 - - uid: 9417 + - uid: 10187 components: - type: Transform - pos: -8.5,-32.5 + rot: -1.5707963267948966 rad + pos: 20.5,-17.5 parent: 31 - - uid: 10145 + - uid: 10189 components: - type: Transform - pos: 49.5,-30.5 + rot: 3.141592653589793 rad + pos: 19.5,-16.5 parent: 31 - - uid: 10296 + - uid: 10190 components: - type: Transform - pos: -34.5,15.5 + rot: 3.141592653589793 rad + pos: 19.5,-15.5 parent: 31 - - uid: 10475 + - uid: 10191 components: - type: Transform - pos: 12.5,-3.5 + rot: 3.141592653589793 rad + pos: 19.5,-14.5 parent: 31 -- proto: DisposalYJunction - entities: - - uid: 5735 + - uid: 10192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-13.5 + parent: 31 + - uid: 10193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 19.5,-12.5 + parent: 31 + - uid: 10203 components: - type: Transform rot: -1.5707963267948966 rad - pos: -28.5,-18.5 + pos: 13.5,-10.5 parent: 31 - - uid: 6931 + - uid: 10204 components: - type: Transform - pos: -32.5,3.5 + rot: -1.5707963267948966 rad + pos: 12.5,-10.5 parent: 31 - - uid: 7429 + - uid: 10205 components: - type: Transform rot: -1.5707963267948966 rad - pos: 29.5,4.5 + pos: 11.5,-10.5 parent: 31 - - uid: 9558 + - uid: 10280 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,3.5 + pos: -31.5,-14.5 parent: 31 -- proto: DogBed - entities: - - uid: 1244 + - uid: 10281 components: - type: Transform - pos: 10.5,20.5 + rot: 3.141592653589793 rad + pos: -30.5,-15.5 parent: 31 - - uid: 4735 + - uid: 10282 components: - type: Transform - pos: 21.5,-9.5 + rot: 3.141592653589793 rad + pos: -30.5,-16.5 parent: 31 - - uid: 6966 + - uid: 10283 components: - type: Transform - pos: 28.5,8.5 + rot: 3.141592653589793 rad + pos: -30.5,-17.5 parent: 31 - - uid: 8419 + - uid: 10285 components: - type: Transform - pos: 8.5,26.5 + rot: 3.141592653589793 rad + pos: -35.5,6.5 parent: 31 -- proto: DonkpocketBoxSpawner - entities: - - uid: 8044 + - uid: 10286 components: - type: Transform - pos: 18.5,-24.5 + rot: 3.141592653589793 rad + pos: -35.5,7.5 parent: 31 -- proto: DoorElectronics - entities: - - uid: 4269 + - uid: 10287 components: - type: Transform - pos: 29.27434,-1.3043437 + rot: 3.141592653589793 rad + pos: -35.5,8.5 parent: 31 - - uid: 4284 + - uid: 10288 components: - type: Transform - pos: 29.614664,-1.306627 + rot: 3.141592653589793 rad + pos: -35.5,9.5 parent: 31 -- proto: DresserCaptainFilled - entities: - - uid: 11383 + - uid: 10289 components: - type: Transform - pos: 11.5,23.5 + rot: 3.141592653589793 rad + pos: -35.5,10.5 parent: 31 -- proto: DresserChiefEngineerFilled - entities: - - uid: 6968 + - uid: 10290 components: - type: Transform - pos: 41.5,-0.5 + rot: 3.141592653589793 rad + pos: -35.5,11.5 parent: 31 -- proto: DresserChiefMedicalOfficerFilled - entities: - - uid: 11386 + - uid: 10291 components: - type: Transform - pos: 24.5,-11.5 + rot: 3.141592653589793 rad + pos: -35.5,12.5 parent: 31 -- proto: DresserHeadOfPersonnelFilled - entities: - - uid: 7085 + - uid: 10292 components: - type: Transform - pos: 7.5,16.5 + rot: 3.141592653589793 rad + pos: -35.5,13.5 parent: 31 -- proto: DresserHeadOfSecurityFilled - entities: - - uid: 11382 + - uid: 10293 components: - type: Transform - pos: -8.5,22.5 + rot: 3.141592653589793 rad + pos: -35.5,14.5 parent: 31 -- proto: DresserQuarterMasterFilled - entities: - - uid: 4909 + - uid: 10298 components: - type: Transform - pos: 26.5,10.5 + rot: -1.5707963267948966 rad + pos: -29.5,-18.5 parent: 31 -- proto: DresserResearchDirectorFilled - entities: - - uid: 5153 + - uid: 10444 components: - type: Transform - pos: -5.5,-19.5 + rot: 3.141592653589793 rad + pos: 12.5,-1.5 parent: 31 -- proto: DrinkBottleRum - entities: - - uid: 10630 + - uid: 10591 components: - type: Transform - pos: 42.56693,-8.254273 + rot: 3.141592653589793 rad + pos: -16.5,1.5 parent: 31 -- proto: DrinkBottleVodka - entities: - - uid: 10588 + - uid: 10722 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.293089,-12.048656 + rot: 3.141592653589793 rad + pos: -16.5,2.5 parent: 31 - - uid: 10589 + - uid: 12037 components: - type: Transform rot: -1.5707963267948966 rad - pos: -14.584726,-11.104703 + pos: 61.5,0.5 parent: 31 - - uid: 10590 + - uid: 12038 components: - type: Transform - pos: -14.761818,-11.281694 + rot: -1.5707963267948966 rad + pos: 63.5,1.5 parent: 31 -- proto: DrinkDeadRumGlass - entities: - - uid: 10660 + - uid: 12039 components: - type: Transform - pos: 41.438732,-8.355759 + rot: -1.5707963267948966 rad + pos: 64.5,1.5 parent: 31 -- proto: DrinkDetFlask - entities: - - uid: 7855 + - uid: 12040 components: - type: Transform - parent: 7853 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: DrinkDoctorsDelightGlass - entities: - - uid: 1110 + rot: -1.5707963267948966 rad + pos: 65.5,1.5 + parent: 31 + - uid: 12041 components: - type: Transform - pos: 22.757565,-9.802636 + rot: -1.5707963267948966 rad + pos: 66.5,1.5 parent: 31 -- proto: DrinkGildlagerBottleFull +- proto: DisposalTrunk entities: - - uid: 9626 + - uid: 178 components: - type: Transform - pos: -3.238819,18.880247 + rot: 3.141592653589793 rad + pos: -11.5,1.5 parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 -- proto: DrinkGlass - entities: - - uid: 10625 + - uid: 215 components: - type: Transform - pos: 40.353294,-10.29438 + pos: 24.5,8.5 parent: 31 - - uid: 10626 + - uid: 229 components: - type: Transform - pos: 40.382812,-10.471372 + rot: 3.141592697301183 rad + pos: 34.5,-4.5 parent: 31 - - uid: 10627 + - uid: 241 components: - type: Transform - pos: 40.530388,-10.353377 + pos: 37.5,6.5 parent: 31 -- proto: DrinkGoldenCup - entities: - - uid: 535 + - uid: 350 components: - type: Transform - pos: -3.053735,18.815365 + pos: -22.5,6.5 parent: 31 -- proto: DrinkGreenTeaGlass - entities: - - uid: 10662 + - uid: 837 components: - type: Transform - pos: 42.91449,-8.318105 + pos: -29.5,11.5 parent: 31 -- proto: DrinkHotCoco - entities: - - uid: 2173 + - uid: 1474 components: - type: Transform - pos: 7.752981,-13.56489 + rot: 1.5707963267948966 rad + pos: 6.5,11.5 parent: 31 -- proto: DrinkHotCoffee - entities: - - uid: 10538 + - uid: 2313 components: - type: Transform - pos: -17.21707,-26.040907 + rot: 3.141592653589793 rad + pos: -8.5,-32.5 parent: 31 - - uid: 10790 + - uid: 2322 components: - type: Transform - pos: 22.658688,13.036925 + rot: 1.5707963267948966 rad + pos: -9.5,12.5 parent: 31 -- proto: DrinkIcedTeaCan - entities: - - uid: 10759 + - uid: 2334 components: - type: Transform - pos: -48.660885,-9.377042 + rot: 3.141592653589793 rad + pos: -12.5,-19.5 parent: 31 -- proto: DrinkIcedTeaGlass - entities: - - uid: 9922 + - uid: 2531 components: - type: Transform - pos: -2.992663,-1.3206873 + rot: 3.141592653589793 rad + pos: -4.5,-17.5 parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 - - uid: 12169 + - uid: 2718 components: - type: Transform - pos: -2.680163,-1.1956873 + rot: -1.5707963267948966 rad + pos: -14.5,-11.5 parent: 31 -- proto: DrinkLemonJuice - entities: - - uid: 10820 + - uid: 2719 components: - type: Transform - pos: 45.26447,-20.914085 + rot: -1.5707963267948966 rad + pos: 4.5,28.5 parent: 31 -- proto: DrinkMeadGlass - entities: - - uid: 2952 + - uid: 4516 components: - type: Transform - pos: -31.680155,17.680439 + rot: 1.5707963267948966 rad + pos: -17.5,-10.5 parent: 31 -- proto: DrinkMilkCarton - entities: - - uid: 2283 + - uid: 4795 components: - type: Transform - pos: -11.776268,-3.7349403 + rot: 3.141592653589793 rad + pos: 6.5,-30.5 parent: 31 -- proto: DrinkMilkshake - entities: - - uid: 1589 + - uid: 5097 components: - type: Transform - pos: 60.502117,-8.214837 + rot: 3.141592653589793 rad + pos: 14.5,-2.5 parent: 31 -- proto: DrinkMugMetal - entities: - - uid: 4205 + - uid: 5223 components: - type: Transform - pos: -10.86558,-31.534925 + rot: 3.141592653589793 rad + pos: 8.5,16.5 parent: 31 -- proto: DrinkMugRed - entities: - - uid: 674 + - uid: 5671 components: - type: Transform - pos: -4.1449943,14.039462 + pos: 14.5,-8.5 parent: 31 -- proto: DrinkPoisonWinebottleFull - entities: - - uid: 12194 + - uid: 7120 components: - type: Transform - pos: -3.4315104,-6.2435474 + rot: -1.5707963267948966 rad + pos: -14.5,-20.5 parent: 31 -- proto: DrinkRamen - entities: - - uid: 7848 + - uid: 7961 components: - type: Transform - pos: -13.225656,24.798891 + pos: 29.5,6.5 parent: 31 -- proto: DrinkRootBeerGlass - entities: - - uid: 7691 + - uid: 7987 components: - type: Transform - pos: 16.50716,16.62439 + rot: 3.141592653589793 rad + pos: 12.5,-3.5 parent: 31 -- proto: DrinkSakeBottleFull - entities: - - uid: 12193 + - uid: 8091 components: - type: Transform - pos: -3.6971354,-6.3372974 + rot: 1.5707963267948966 rad + pos: 60.5,0.5 parent: 31 -- proto: DrinkSakeCup - entities: - - uid: 12177 + - uid: 8444 components: - type: Transform - pos: -2.4155946,-4.260042 + rot: 1.5707963267948966 rad + pos: -8.5,1.5 parent: 31 - - uid: 12178 + - uid: 8716 components: - type: Transform - pos: -2.3530946,-4.494417 + rot: -1.5707963267948966 rad + pos: -24.5,-3.5 parent: 31 -- proto: DrinkShaker - entities: - - uid: 10628 + - uid: 9339 components: - type: Transform - pos: 42.86208,-10.353377 + pos: -34.5,6.5 parent: 31 -- proto: DrinkShotGlass - entities: - - uid: 12189 + - uid: 10020 components: - type: Transform - pos: -5.952992,-4.4935474 + rot: 1.5707963267948966 rad + pos: -31.5,-18.5 parent: 31 - - uid: 12190 + - uid: 10294 components: - type: Transform - pos: -5.218617,-4.3060474 + rot: -1.5707963267948966 rad + pos: -34.5,15.5 parent: 31 - - uid: 12191 + - uid: 10300 components: - type: Transform - pos: -2.6404922,-5.5560474 + pos: -25.5,-15.5 parent: 31 -- proto: DrinkTequilaSunriseGlass - entities: - - uid: 10649 + - uid: 10589 components: - type: Transform - pos: 43.593338,-8.411646 + rot: 3.141592653589793 rad + pos: -17.5,-0.5 parent: 31 -- proto: DrinkTokkuri - entities: - - uid: 12176 + - uid: 10795 components: - type: Transform - pos: -2.6187196,-4.525667 + pos: 50.5,-11.5 parent: 31 -- proto: DrinkVodkaBottleFull - entities: - - uid: 1409 + - uid: 12042 components: - type: Transform - pos: -15.794847,-11.134202 + pos: 67.5,2.5 parent: 31 - - uid: 10586 + - uid: 12222 components: - type: Transform - pos: -15.4701805,-10.721223 + rot: 3.141592653589793 rad + pos: 49.5,-15.5 parent: 31 -- proto: DrinkVodkaGlass +- proto: DisposalUnit entities: - - uid: 10587 + - uid: 195 components: - type: Transform - pos: -15.440666,-11.399689 + pos: -29.5,11.5 parent: 31 -- proto: DrinkWaterBottleFull - entities: - - uid: 622 + - uid: 210 components: - type: Transform - pos: -9.481841,-18.214483 + pos: 6.5,11.5 parent: 31 - - uid: 2480 + - uid: 216 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 2481 + pos: 24.5,8.5 + parent: 31 + - uid: 230 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 3041 + pos: 34.5,-4.5 + parent: 31 + - uid: 242 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 10794 + pos: 37.5,6.5 + parent: 31 + - uid: 332 components: - type: Transform - pos: 45.32292,-20.249031 + pos: 29.5,6.5 parent: 31 -- proto: DrinkWaterCup - entities: - - uid: 4089 + - uid: 366 components: - type: Transform - pos: -9.776992,-18.538967 + pos: -11.5,1.5 parent: 31 - - uid: 10795 + - uid: 376 components: - type: Transform - pos: 45.647587,-20.367025 + pos: -22.5,6.5 parent: 31 - - uid: 10796 + - uid: 1102 components: - type: Transform - pos: 45.529526,-20.544016 + pos: 14.5,-2.5 parent: 31 -- proto: DrinkWhiskeyBottleFull - entities: - - uid: 7459 + - uid: 2266 components: - type: Transform - pos: -23.675486,16.461733 + pos: -12.5,-19.5 parent: 31 -- proto: DrinkWhiskeyGlass - entities: - - uid: 7539 + - uid: 2520 components: - type: Transform - pos: -15.830059,-39.34384 + pos: 14.5,-8.5 parent: 31 -- proto: DrinkWineBottleFull - entities: - - uid: 12195 + - uid: 2851 components: - type: Transform - pos: -3.1815104,-6.3841724 + pos: -24.5,-3.5 parent: 31 -- proto: ElectricGuitarInstrument - entities: - - uid: 9275 + - uid: 3726 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -19.346447,-6.2505536 + pos: -25.5,-15.5 parent: 31 -- proto: EmergencyLight - entities: - - uid: 309 + - uid: 4368 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -40.5,5.5 + pos: -9.5,12.5 parent: 31 - - uid: 346 + - uid: 4673 components: + - type: MetaData + desc: Appear on the stage in style! + name: magic act chute - type: Transform - rot: 1.5707963267948966 rad - pos: 48.5,-4.5 + pos: -17.5,-10.5 parent: 31 - - uid: 585 + - uid: 4772 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,-3.5 + pos: 6.5,-30.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1187 + - uid: 5226 components: - type: Transform - pos: 39.5,6.5 + pos: 8.5,16.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1224 + - uid: 6978 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,9.5 + pos: 50.5,-11.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1226 + - uid: 7587 components: - type: Transform - pos: -4.5,14.5 + pos: -14.5,-20.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1248 + - uid: 8094 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,30.5 + pos: 60.5,0.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1293 + - uid: 8130 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-3.5 + pos: -4.5,-17.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1299 + - uid: 8443 components: - type: Transform - pos: -39.5,10.5 + pos: -8.5,1.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1345 + - uid: 8511 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-3.5 + pos: 4.5,28.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 1512 + - uid: 9343 components: - type: Transform - pos: 23.5,13.5 + pos: -34.5,6.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 2080 + - uid: 9417 components: - type: Transform - pos: -23.5,11.5 + pos: -8.5,-32.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 5354 + - uid: 10296 components: - type: Transform - pos: 23.5,5.5 + pos: -34.5,15.5 parent: 31 - - uid: 7249 + - uid: 10475 components: - type: Transform - pos: -14.5,5.5 + pos: 12.5,-3.5 parent: 31 - - uid: 7254 + - uid: 10721 components: - type: Transform - pos: 3.5,32.5 + pos: -17.5,-0.5 parent: 31 - - uid: 8839 + - uid: 12140 components: - type: Transform - pos: -4.5,1.5 + pos: 49.5,-15.5 parent: 31 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 10310 +- proto: DisposalYJunction + entities: + - uid: 5735 components: - type: Transform - pos: -9.5,-25.5 + rot: -1.5707963267948966 rad + pos: -28.5,-18.5 parent: 31 - - uid: 10311 + - uid: 6931 components: - type: Transform - pos: -6.5,-14.5 + pos: -32.5,3.5 parent: 31 -- proto: EmergencyMedipen + - uid: 7429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 29.5,4.5 + parent: 31 + - uid: 9558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,3.5 + parent: 31 +- proto: DogBed entities: - - uid: 7355 + - uid: 1244 components: - type: Transform - pos: -19.375961,-7.548489 + pos: 10.5,20.5 parent: 31 - - uid: 10988 + - uid: 8419 components: - type: Transform - pos: 12.5220375,-4.6149173 + pos: 8.5,26.5 parent: 31 -- proto: EmergencyRollerBed +- proto: DonkpocketBoxSpawner entities: - - uid: 1202 + - uid: 8044 components: - type: Transform - pos: 19.443876,-7.543538 + pos: 18.5,-24.5 parent: 31 -- proto: Emitter +- proto: DoorElectronics entities: - - uid: 4870 + - uid: 4269 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,2.5 + pos: 29.27434,-1.3043437 parent: 31 -- proto: EncryptionKeyCargo + - uid: 4284 + components: + - type: Transform + pos: 29.614664,-1.306627 + parent: 31 +- proto: DresserCaptainFilled entities: - - uid: 9154 + - uid: 11383 components: - type: Transform - parent: 9096 - - type: Physics - canCollide: False -- proto: EncryptionKeyCommand + pos: 11.5,23.5 + parent: 31 +- proto: DresserChiefEngineerFilled entities: - - uid: 3410 + - uid: 6968 components: - type: Transform - parent: 3371 - - type: Physics - canCollide: False -- proto: EncryptionKeyCommon + pos: 41.5,-0.5 + parent: 31 +- proto: DresserChiefMedicalOfficerFilled entities: - - uid: 9066 + - uid: 11386 components: - type: Transform - parent: 9065 - - type: Physics - canCollide: False - - uid: 10896 + pos: 24.5,-11.5 + parent: 31 +- proto: DresserHeadOfPersonnelFilled + entities: + - uid: 7085 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 48.434895,-3.386529 + pos: 7.5,16.5 parent: 31 - - uid: 10897 +- proto: DresserHeadOfSecurityFilled + entities: + - uid: 11382 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 48.611988,-3.445526 + pos: -8.5,22.5 parent: 31 -- proto: EncryptionKeyEngineering +- proto: DresserQuarterMasterFilled entities: - - uid: 10233 + - uid: 4909 components: - type: Transform - parent: 10232 - - type: Physics - canCollide: False - - uid: 10898 + pos: 26.5,10.5 + parent: 31 +- proto: DresserResearchDirectorFilled + entities: + - uid: 5153 components: - type: Transform - pos: 48.936653,-5.4514256 + pos: -5.5,-19.5 parent: 31 -- proto: EncryptionKeyMedical +- proto: DrinkBeerBottleFull entities: - - uid: 8122 + - uid: 8840 components: - type: Transform - parent: 8120 - - type: Physics - canCollide: False - - uid: 10894 + pos: -21.962059,17.224575 + parent: 31 +- proto: DrinkBottleBeer + entities: + - uid: 9557 components: - type: Transform rot: -1.5707963267948966 rad - pos: 55.474125,-11.511058 + pos: -21.320957,16.95895 parent: 31 -- proto: EncryptionKeyScience - entities: - - uid: 4604 + - uid: 13057 components: - type: Transform - parent: 4590 - - type: Physics - canCollide: False - - uid: 10895 + pos: -22.886969,16.397884 + parent: 31 + - uid: 13059 components: - type: Transform - pos: 56.448124,-11.363565 + rot: -1.5707963267948966 rad + pos: -23.027699,15.835385 parent: 31 -- proto: EncryptionKeySecurity - entities: - - uid: 8164 + - uid: 13060 components: - type: Transform - parent: 8163 - - type: Physics - canCollide: False -- proto: EncryptionKeyService - entities: - - uid: 9188 + rot: -1.5707963267948966 rad + pos: -24.262993,16.03851 + parent: 31 + - uid: 13061 components: - type: Transform - parent: 9179 - - type: Physics - canCollide: False -- proto: ExosuitFabricator + pos: -22.793148,17.13226 + parent: 31 +- proto: DrinkBottleOfNothingFull entities: - - uid: 9537 + - uid: 5727 components: - type: Transform - pos: -0.5,-24.5 + pos: -20.800508,-10.570335 parent: 31 -- proto: ExplosivesSignMed +- proto: DrinkBottleRum entities: - - uid: 8897 + - uid: 10630 components: - type: Transform - pos: -11.5,17.5 + pos: 42.56693,-8.254273 parent: 31 -- proto: ExtendedEmergencyOxygenTank +- proto: DrinkDeadRumGlass entities: - - uid: 3730 + - uid: 10660 components: - type: Transform - pos: -11.445563,-27.496508 + pos: 41.438732,-8.355759 parent: 31 -- proto: ExtinguisherCabinet +- proto: DrinkDoctorsDelightGlass entities: - - uid: 10537 + - uid: 1110 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-31.5 + pos: 22.757565,-9.802636 parent: 31 -- proto: ExtinguisherCabinetFilled +- proto: DrinkGildlagerBottleFull entities: - - uid: 517 + - uid: 9626 components: - type: Transform - pos: -10.5,12.5 + pos: -3.238819,18.880247 parent: 31 - - uid: 1868 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: DrinkGlass + entities: + - uid: 10625 components: - type: Transform - pos: 5.5,23.5 + pos: 40.353294,-10.29438 parent: 31 - - uid: 4807 + - uid: 10626 components: - type: Transform - pos: 14.5,-3.5 + pos: 40.382812,-10.471372 parent: 31 - - uid: 4895 + - uid: 10627 components: - type: Transform - pos: -34.5,-10.5 + pos: 40.530388,-10.353377 parent: 31 - - uid: 4899 +- proto: DrinkGoldenCup + entities: + - uid: 535 components: - type: Transform - pos: -30.5,10.5 + pos: -3.053735,18.815365 parent: 31 - - uid: 4900 +- proto: DrinkGreenTeaGlass + entities: + - uid: 10662 components: - type: Transform - pos: -34.5,-2.5 + pos: 42.91449,-8.318105 parent: 31 - - uid: 4901 +- proto: DrinkHotCoco + entities: + - uid: 2173 components: - type: Transform - pos: -16.5,-8.5 + pos: 7.752981,-13.56489 parent: 31 - - uid: 4908 +- proto: DrinkHotCoffee + entities: + - uid: 6990 components: - type: Transform - pos: 32.5,-5.5 + pos: -2.6763601,14.690386 parent: 31 - - uid: 4913 + - uid: 6991 components: - type: Transform - pos: 17.5,8.5 + pos: -2.4750185,14.448774 parent: 31 - - uid: 4914 + - uid: 10538 components: - type: Transform - pos: 9.5,12.5 + pos: -17.21707,-26.040907 parent: 31 - - uid: 4916 + - uid: 10790 components: - type: Transform - pos: -6.5,18.5 + pos: 22.658688,13.036925 parent: 31 - - uid: 4917 +- proto: DrinkIcedTeaCan + entities: + - uid: 10759 components: - type: Transform - pos: 0.5,16.5 + pos: -48.660885,-9.377042 parent: 31 - - uid: 4918 +- proto: DrinkIcedTeaGlass + entities: + - uid: 9922 components: - type: Transform - pos: 11.5,17.5 + pos: -2.992663,-1.3206873 parent: 31 - - uid: 4923 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 12169 components: - type: Transform - pos: 11.5,-28.5 + pos: -2.680163,-1.1956873 parent: 31 - - uid: 5305 +- proto: DrinkMeadGlass + entities: + - uid: 2952 components: - type: Transform - pos: 17.5,-29.5 + pos: -31.680155,17.680439 parent: 31 - - uid: 5306 +- proto: DrinkMilkCarton + entities: + - uid: 2283 components: - type: Transform - pos: -24.5,23.5 + pos: -11.776268,-3.7349403 parent: 31 - - uid: 7435 +- proto: DrinkMilkshake + entities: + - uid: 1589 components: - type: Transform - pos: -12.5,-26.5 + pos: 60.502117,-8.214837 parent: 31 - - uid: 8894 +- proto: DrinkMugBlue + entities: + - uid: 2844 components: - type: Transform - rot: 3.141592653589793 rad - pos: 51.5,4.5 + pos: -6.264754,27.451984 parent: 31 - - uid: 8905 +- proto: DrinkMugDog + entities: + - uid: 2749 components: - type: Transform - pos: 5.5,29.5 + pos: -5.212646,14.755907 parent: 31 - - uid: 10889 +- proto: DrinkMugMetal + entities: + - uid: 4205 components: - type: Transform - pos: 55.5,-5.5 + pos: -10.86558,-31.534925 parent: 31 - - uid: 11387 +- proto: DrinkMugRed + entities: + - uid: 4660 components: - type: Transform - pos: 42.5,-1.5 + pos: -2.0580988,14.730206 parent: 31 -- proto: FaxMachineBase +- proto: DrinkPoisonWinebottleFull entities: - - uid: 683 + - uid: 12194 components: - type: Transform - pos: 14.5,-4.5 + pos: -3.4315104,-6.2435474 parent: 31 - - type: FaxMachine - name: Medical - destinationAddress: Medical - - uid: 1264 +- proto: DrinkRamen + entities: + - uid: 7848 components: - type: Transform - pos: 40.5,4.5 + pos: -13.225656,24.798891 parent: 31 - - type: FaxMachine - name: engineering - - uid: 2045 - components: - - type: Transform - pos: -17.5,-25.5 - parent: 31 - - type: FaxMachine - name: Science - destinationAddress: Science - - uid: 8323 - components: - - type: Transform - pos: 9.5,-28.5 - parent: 31 - - type: FaxMachine - name: library - - uid: 8994 - components: - - type: Transform - pos: 13.5,12.5 - parent: 31 - - type: FaxMachine - name: Cargo - destinationAddress: Cargo - - uid: 9687 - components: - - type: Transform - pos: 8.5,18.5 - parent: 31 - - type: FaxMachine - name: hop's office - - uid: 10825 - components: - - type: Transform - pos: 1.5,32.5 - parent: 31 - - type: FaxMachine - name: bridge - destinationAddress: bridge -- proto: FaxMachineCaptain - entities: - - uid: 9686 - components: - - type: Transform - pos: 7.5,24.5 - parent: 31 - - type: FaxMachine - name: captain's office -- proto: filingCabinetDrawerRandom - entities: - - uid: 4637 - components: - - type: Transform - pos: -10.5,-30.5 - parent: 31 - - uid: 8890 - components: - - type: Transform - pos: 9.5,18.5 - parent: 31 -- proto: filingCabinetRandom - entities: - - uid: 4216 - components: - - type: Transform - pos: 6.5,26.5 - parent: 31 - - uid: 5628 - components: - - type: Transform - pos: 6.5,-5.5 - parent: 31 - - uid: 7542 - components: - - type: Transform - pos: -12.5,-39.5 - parent: 31 - - uid: 7710 - components: - - type: Transform - pos: 15.5,12.5 - parent: 31 - - uid: 8492 - components: - - type: Transform - pos: -2.5,14.5 - parent: 31 -- proto: filingCabinetTallRandom - entities: - - uid: 1424 - components: - - type: Transform - pos: -0.5,31.5 - parent: 31 -- proto: FireAlarm - entities: - - uid: 888 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-24.5 - parent: 31 - - type: DeviceList - devices: - - 11750 - - 613 - - 669 - - 2872 - - 2891 - - 7379 - - 11751 - - 11752 - - 11753 - - 11754 - - 11755 - - 11756 - - uid: 9041 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,2.5 - parent: 31 - - type: DeviceList - devices: - - 9972 - - 9971 - - 9970 - - 995 - - 179 - - 337 - - uid: 9985 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-14.5 - parent: 31 - - type: DeviceList - devices: - - 9988 - - 9989 - - 9990 - - uid: 9992 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,8.5 - parent: 31 - - type: DeviceList - devices: - - 8954 - - 8956 - - 852 - - 1027 - - 1028 - - 8885 - - 8884 - - 8883 - - 3959 - - 3944 - - 3943 - - 3989 - - 3987 - - 3988 - - 9988 - - 9989 - - 9990 - - 576 - - 1330 - - 1167 - - 7460 - - uid: 9993 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,1.5 - parent: 31 - - type: DeviceList - devices: - - 3928 - - 3934 - - 3935 - - 3969 - - 3970 - - 9972 - - 9971 - - 9970 - - 9994 - - 9995 - - uid: 9997 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -34.5,1.5 - parent: 31 - - type: DeviceList - devices: - - 3977 - - 3976 - - 3975 - - uid: 10002 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,27.5 - parent: 31 - - type: DeviceList - devices: - - 8816 - - 8813 - - 8810 - - 8814 - - 8815 - - 9969 - - uid: 10004 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,15.5 - parent: 31 - - type: DeviceList - devices: - - 8885 - - 8883 - - 8884 - - 5115 - - uid: 10006 - components: - - type: Transform - pos: 18.5,6.5 - parent: 31 - - type: DeviceList - devices: - - 4028 - - 4030 - - 4026 - - 8856 - - 8858 - - 8857 - - uid: 10023 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-3.5 - parent: 31 - - type: DeviceList - devices: - - 3943 - - 3944 - - 3959 - - 1167 - - 1330 - - 576 - - 4525 - - 4528 - - 4529 - - uid: 10243 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-13.5 - parent: 31 - - type: DeviceList - devices: - - 10313 - - 10314 - - 10315 - - 10240 - - 10241 - - 10242 - - uid: 10409 - components: - - type: Transform - pos: -17.5,-13.5 - parent: 31 - - type: DeviceList - devices: - - 10313 - - 10314 - - 10315 - - uid: 10410 - components: - - type: Transform - pos: -1.5,-13.5 - parent: 31 - - type: DeviceList - devices: - - 10316 - - 10317 - - 10318 - - uid: 10419 - components: - - type: Transform - pos: -11.5,-23.5 - parent: 31 - - type: DeviceList - devices: - - 3857 - - 3866 - - 3428 - - 3724 - - uid: 11003 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-3.5 - parent: 31 - - type: DeviceList - devices: - - 3989 - - 3987 - - 3988 - - 8940 - - 673 -- proto: FireAxeCabinetFilled - entities: - - uid: 4031 - components: - - type: Transform - pos: -1.5,32.5 - parent: 31 - - uid: 11444 - components: - - type: Transform - pos: 52.5,18.5 - parent: 31 -- proto: Firelock - entities: - - uid: 45 - components: - - type: Transform - pos: -32.5,-12.5 - parent: 31 - - uid: 179 - components: - - type: Transform - pos: -10.5,4.5 - parent: 31 - - uid: 308 - components: - - type: Transform - pos: -29.5,-18.5 - parent: 31 - - uid: 328 - components: - - type: Transform - pos: -22.5,14.5 - parent: 31 - - uid: 337 - components: - - type: Transform - pos: -10.5,3.5 - parent: 31 - - uid: 409 - components: - - type: Transform - pos: -6.5,-8.5 - parent: 31 - - uid: 575 - components: - - type: Transform - pos: 15.5,-3.5 - parent: 31 - - uid: 576 - components: - - type: Transform - pos: -7.5,2.5 - parent: 31 - - uid: 684 - components: - - type: Transform - pos: 21.5,-22.5 - parent: 31 - - uid: 995 - components: - - type: Transform - pos: -10.5,5.5 - parent: 31 - - uid: 1015 - components: - - type: Transform - pos: -22.5,13.5 - parent: 31 - - uid: 1167 - components: - - type: Transform - pos: -5.5,2.5 - parent: 31 - - uid: 1330 - components: - - type: Transform - pos: -6.5,2.5 - parent: 31 - - uid: 2180 - components: - - type: Transform - pos: 22.5,-22.5 - parent: 31 - - uid: 3413 - components: - - type: Transform - pos: -20.5,-28.5 - parent: 31 - - uid: 3855 - components: - - type: Transform - pos: -19.5,17.5 - parent: 31 - - uid: 3962 - components: - - type: Transform - pos: -6.5,-9.5 - parent: 31 - - uid: 3968 - components: - - type: Transform - pos: -32.5,-9.5 - parent: 31 - - uid: 3971 - components: - - type: Transform - pos: -6.5,-10.5 - parent: 31 - - uid: 3982 - components: - - type: Transform - pos: 13.5,-19.5 - parent: 31 - - uid: 3984 - components: - - type: Transform - pos: 13.5,-20.5 - parent: 31 - - uid: 3992 - components: - - type: Transform - pos: 37.5,-5.5 - parent: 31 - - uid: 3996 - components: - - type: Transform - pos: -33.5,-9.5 - parent: 31 - - uid: 4002 - components: - - type: Transform - pos: 25.5,-1.5 - parent: 31 - - uid: 4003 - components: - - type: Transform - pos: 25.5,-2.5 - parent: 31 - - uid: 4010 - components: - - type: Transform - pos: -1.5,6.5 - parent: 31 - - uid: 4015 - components: - - type: Transform - pos: 38.5,-5.5 - parent: 31 - - uid: 4019 - components: - - type: Transform - pos: 11.5,14.5 - parent: 31 - - uid: 4041 - components: - - type: Transform - pos: -10.5,24.5 - parent: 31 - - uid: 4042 - components: - - type: Transform - pos: -10.5,25.5 - parent: 31 - - uid: 4044 - components: - - type: Transform - pos: -18.5,17.5 - parent: 31 - - uid: 4975 - components: - - type: Transform - pos: -22.5,21.5 - parent: 31 - - uid: 5034 - components: - - type: Transform - pos: 26.5,-19.5 - parent: 31 - - uid: 5035 - components: - - type: Transform - pos: 23.5,-24.5 - parent: 31 - - uid: 5104 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 31 - - uid: 5115 - components: - - type: Transform - pos: 6.5,20.5 - parent: 31 - - uid: 5217 - components: - - type: Transform - pos: -27.5,16.5 - parent: 31 - - uid: 5312 - components: - - type: Transform - pos: 15.5,-26.5 - parent: 31 - - uid: 10302 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,-20.5 - parent: 31 - - uid: 11101 - components: - - type: Transform - pos: 27.5,-9.5 - parent: 31 - - uid: 11621 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-24.5 - parent: 31 - - uid: 11622 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-28.5 - parent: 31 - - uid: 11751 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-32.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 11752 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-31.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 11753 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,-30.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 11754 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-24.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 -- proto: FirelockEdge - entities: - - uid: 693 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,3.5 - parent: 31 - - uid: 3737 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -15.5,-18.5 - parent: 31 - - uid: 3738 - components: - - type: Transform - pos: -15.5,-18.5 - parent: 31 - - uid: 3740 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,-18.5 - parent: 31 - - uid: 4378 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,-25.5 - parent: 31 - - uid: 7040 - components: - - type: Transform - pos: -18.5,3.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 10021 - - uid: 7041 - components: - - type: Transform - pos: -19.5,3.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 10021 - - uid: 7042 - components: - - type: Transform - pos: -16.5,3.5 - parent: 31 - - uid: 7051 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,-24.5 - parent: 31 - - uid: 7052 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,-23.5 - parent: 31 - - uid: 8482 - components: - - type: Transform - pos: -16.5,-18.5 - parent: 31 - - uid: 10307 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -33.5,-21.5 - parent: 31 - - uid: 11755 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-28.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 11756 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-29.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 -- proto: FirelockElectronics - entities: - - uid: 13 - components: - - type: Transform - pos: -29.687315,9.038336 - parent: 31 - - uid: 55 - components: - - type: Transform - pos: -29.711033,9.429151 - parent: 31 - - uid: 4298 - components: - - type: Transform - pos: 29.352465,-1.4202437 - parent: 31 - - uid: 4324 - components: - - type: Transform - pos: 29.633715,-1.4827437 - parent: 31 -- proto: FirelockGlass - entities: - - uid: 24 - components: - - type: Transform - pos: 20.5,18.5 - parent: 31 - - uid: 613 - components: - - type: Transform - pos: 4.5,-23.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 669 - components: - - type: Transform - pos: 2.5,-23.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 673 - components: - - type: Transform - pos: 10.5,-6.5 - parent: 31 - - uid: 852 - components: - - type: Transform - pos: 5.5,5.5 - parent: 31 - - uid: 1027 - components: - - type: Transform - pos: 5.5,4.5 - parent: 31 - - uid: 1028 - components: - - type: Transform - pos: 5.5,3.5 - parent: 31 - - uid: 1185 - components: - - type: Transform - pos: 21.5,18.5 - parent: 31 - - uid: 1505 - components: - - type: Transform - pos: 15.5,8.5 - parent: 31 - - uid: 2872 - components: - - type: Transform - pos: 1.5,-29.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 2891 - components: - - type: Transform - pos: 1.5,-28.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 3428 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -9.5,-33.5 - parent: 31 - - uid: 3724 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,-27.5 - parent: 31 - - uid: 3857 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-23.5 - parent: 31 - - uid: 3866 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,-25.5 - parent: 31 - - uid: 3928 - components: - - type: Transform - pos: -26.5,3.5 - parent: 31 - - uid: 3934 - components: - - type: Transform - pos: -26.5,4.5 - parent: 31 - - uid: 3935 - components: - - type: Transform - pos: -26.5,5.5 - parent: 31 - - uid: 3943 - components: - - type: Transform - pos: 1.5,-2.5 - parent: 31 - - uid: 3944 - components: - - type: Transform - pos: 1.5,-1.5 - parent: 31 - - uid: 3959 - components: - - type: Transform - pos: 1.5,-0.5 - parent: 31 - - uid: 3969 - components: - - type: Transform - pos: -24.5,7.5 - parent: 31 - - uid: 3970 - components: - - type: Transform - pos: -23.5,7.5 - parent: 31 - - uid: 3975 - components: - - type: Transform - pos: -33.5,3.5 - parent: 31 - - uid: 3976 - components: - - type: Transform - pos: -33.5,4.5 - parent: 31 - - uid: 3977 - components: - - type: Transform - pos: -33.5,5.5 - parent: 31 - - uid: 3987 - components: - - type: Transform - pos: 5.5,-1.5 - parent: 31 - - uid: 3988 - components: - - type: Transform - pos: 5.5,-0.5 - parent: 31 - - uid: 3989 - components: - - type: Transform - pos: 5.5,-2.5 - parent: 31 - - uid: 4026 - components: - - type: Transform - pos: 11.5,3.5 - parent: 31 - - uid: 4028 - components: - - type: Transform - pos: 11.5,5.5 - parent: 31 - - uid: 4030 - components: - - type: Transform - pos: 11.5,4.5 - parent: 31 - - uid: 4210 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -13.5,-29.5 - parent: 31 - - uid: 4215 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,-38.5 - parent: 31 - - uid: 4334 - components: - - type: Transform - pos: 8.5,-8.5 - parent: 31 - - uid: 4345 - components: - - type: Transform - pos: 8.5,-10.5 - parent: 31 - - uid: 4525 - components: - - type: Transform - pos: -10.5,1.5 - parent: 31 - - uid: 4528 - components: - - type: Transform - pos: -10.5,0.5 - parent: 31 - - uid: 4529 - components: - - type: Transform - pos: -10.5,-0.5 - parent: 31 - - uid: 4613 - components: - - type: Transform - pos: 37.5,-8.5 - parent: 31 - - uid: 6957 - components: - - type: Transform - pos: 28.5,-17.5 - parent: 31 - - uid: 7178 - components: - - type: Transform - pos: 38.5,-8.5 - parent: 31 - - uid: 7325 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -37.5,-8.5 - parent: 31 - - uid: 7379 - components: - - type: Transform - pos: 1.5,-26.5 - parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 - - uid: 7460 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,4.5 - parent: 31 - - uid: 8399 - components: - - type: Transform - pos: 45.5,-6.5 - parent: 31 - - uid: 8810 - components: - - type: Transform - pos: 2.5,29.5 - parent: 31 - - uid: 8813 - components: - - type: Transform - pos: 1.5,28.5 - parent: 31 - - uid: 8814 - components: - - type: Transform - pos: 3.5,29.5 - parent: 31 - - uid: 8815 - components: - - type: Transform - pos: 4.5,29.5 - parent: 31 - - uid: 8816 - components: - - type: Transform - pos: 5.5,28.5 - parent: 31 - - uid: 8856 - components: - - type: Transform - pos: 24.5,5.5 - parent: 31 - - uid: 8857 - components: - - type: Transform - pos: 24.5,3.5 - parent: 31 - - uid: 8858 - components: - - type: Transform - pos: 24.5,4.5 - parent: 31 - - uid: 8883 - components: - - type: Transform - pos: 2.5,15.5 - parent: 31 - - uid: 8884 - components: - - type: Transform - pos: 3.5,15.5 - parent: 31 - - uid: 8885 - components: - - type: Transform - pos: 4.5,15.5 - parent: 31 - - uid: 8940 - components: - - type: Transform - pos: 9.5,-6.5 - parent: 31 - - uid: 8954 - components: - - type: Transform - pos: 1.5,3.5 - parent: 31 - - uid: 8956 - components: - - type: Transform - pos: 1.5,5.5 - parent: 31 - - uid: 9782 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-36.5 - parent: 31 - - uid: 9783 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,-36.5 - parent: 31 - - uid: 9958 - components: - - type: Transform - pos: 36.5,3.5 - parent: 31 - - uid: 9959 - components: - - type: Transform - pos: 36.5,4.5 - parent: 31 - - uid: 9960 - components: - - type: Transform - pos: 36.5,5.5 - parent: 31 - - uid: 9961 - components: - - type: Transform - pos: 33.5,7.5 - parent: 31 - - uid: 9962 - components: - - type: Transform - pos: 30.5,3.5 - parent: 31 - - uid: 9963 - components: - - type: Transform - pos: 30.5,5.5 - parent: 31 - - uid: 9964 - components: - - type: Transform - pos: 33.5,1.5 - parent: 31 - - uid: 9965 - components: - - type: Transform - pos: 25.5,17.5 - parent: 31 - - uid: 9966 - components: - - type: Transform - pos: 25.5,16.5 - parent: 31 - - uid: 9967 - components: - - type: Transform - pos: 21.5,14.5 - parent: 31 - - uid: 9968 - components: - - type: Transform - pos: 20.5,14.5 - parent: 31 - - uid: 9969 - components: - - type: Transform - pos: 3.5,26.5 - parent: 31 - - uid: 9970 - components: - - type: Transform - pos: -21.5,3.5 - parent: 31 - - uid: 9971 - components: - - type: Transform - pos: -21.5,4.5 - parent: 31 - - uid: 9972 - components: - - type: Transform - pos: -21.5,5.5 - parent: 31 - - uid: 9973 - components: - - type: Transform - pos: 54.5,2.5 - parent: 31 - - uid: 9981 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-21.5 - parent: 31 - - uid: 9982 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-22.5 - parent: 31 - - uid: 9988 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-12.5 - parent: 31 - - uid: 9989 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-12.5 - parent: 31 - - uid: 9990 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-12.5 - parent: 31 - - uid: 9994 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,1.5 - parent: 31 - - uid: 9995 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,1.5 - parent: 31 - - uid: 9999 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,6.5 - parent: 31 - - uid: 10000 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,6.5 - parent: 31 - - uid: 10008 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,8.5 - parent: 31 - - uid: 10017 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-9.5 - parent: 31 - - uid: 10099 - components: - - type: Transform - pos: 22.5,18.5 - parent: 31 - - uid: 10240 - components: - - type: Transform - pos: -22.5,-10.5 - parent: 31 - - uid: 10241 - components: - - type: Transform - pos: -23.5,-10.5 - parent: 31 - - uid: 10242 - components: - - type: Transform - pos: -24.5,-10.5 - parent: 31 - - uid: 10245 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -36.5,-8.5 - parent: 31 - - uid: 10246 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,-8.5 - parent: 31 - - uid: 10313 - components: - - type: Transform - pos: -19.5,-14.5 - parent: 31 - - uid: 10314 - components: - - type: Transform - pos: -19.5,-15.5 - parent: 31 - - uid: 10315 - components: - - type: Transform - pos: -19.5,-16.5 - parent: 31 - - uid: 10316 - components: - - type: Transform - pos: 0.5,-14.5 - parent: 31 - - uid: 10317 - components: - - type: Transform - pos: 0.5,-15.5 - parent: 31 - - uid: 10318 - components: - - type: Transform - pos: 0.5,-16.5 - parent: 31 - - uid: 10658 - components: - - type: Transform - pos: 40.5,-12.5 - parent: 31 - - uid: 10900 - components: - - type: Transform - pos: 49.5,-1.5 - parent: 31 - - uid: 11000 - components: - - type: Transform - pos: 9.5,-12.5 - parent: 31 - - uid: 11091 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,20.5 - parent: 31 - - uid: 11092 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,18.5 - parent: 31 - - uid: 11495 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,-22.5 - parent: 31 - - uid: 11498 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,-17.5 - parent: 31 - - uid: 11499 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,-21.5 - parent: 31 - - uid: 11501 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-22.5 - parent: 31 - - uid: 11502 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,-17.5 - parent: 31 - - uid: 11503 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-23.5 - parent: 31 - - uid: 11504 +- proto: DrinkRootBeerGlass + entities: + - uid: 7691 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-21.5 + pos: 16.50716,16.62439 parent: 31 - - uid: 11750 +- proto: DrinkSakeBottleFull + entities: + - uid: 12193 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-31.5 + pos: -3.6971354,-6.3372974 parent: 31 - - type: DeviceNetwork - deviceLists: - - 888 -- proto: Fireplace +- proto: DrinkSakeCup entities: - - uid: 3749 + - uid: 12177 components: - type: Transform - pos: 0.5,1.5 + pos: -2.4155946,-4.260042 parent: 31 - - uid: 8988 + - uid: 12178 components: - type: Transform - pos: 7.5,26.5 + pos: -2.3530946,-4.494417 parent: 31 -- proto: Flash +- proto: DrinkShaker entities: - - uid: 2092 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5096004,12.452274 - parent: 31 - - uid: 2499 + - uid: 10628 components: - type: Transform - pos: 8.497082,31.408243 + pos: 42.86208,-10.353377 parent: 31 -- proto: FlashlightLantern +- proto: DrinkShotGlass entities: - - uid: 7122 + - uid: 12189 components: - type: Transform - pos: -2.4670525,30.482414 + pos: -5.952992,-4.4935474 parent: 31 - - uid: 9950 + - uid: 12190 components: - type: Transform - pos: 27.403997,15.554827 + pos: -5.218617,-4.3060474 parent: 31 - - uid: 10696 + - uid: 12191 components: - type: Transform - pos: -0.47756696,-12.240095 + pos: -2.6404922,-5.5560474 parent: 31 -- proto: FlashlightSeclite +- proto: DrinkTequilaSunriseGlass entities: - - uid: 9117 + - uid: 10649 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.223138,16.03936 + pos: 43.593338,-8.411646 parent: 31 -- proto: FloorDrain +- proto: DrinkTokkuri entities: - - uid: 262 + - uid: 12176 components: - type: Transform - pos: 15.5,-17.5 + pos: -2.6187196,-4.525667 parent: 31 - - type: Fixtures - fixtures: {} - - uid: 2300 +- proto: DrinkWaterBottleFull + entities: + - uid: 622 components: - type: Transform - pos: -18.5,-11.5 + pos: -9.481841,-18.214483 parent: 31 - - type: Fixtures - fixtures: {} - - uid: 4337 + - uid: 2480 components: - type: Transform - pos: 12.5,27.5 - parent: 31 - - type: Fixtures - fixtures: {} - - uid: 9108 + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 2481 components: - type: Transform - pos: 17.5,-0.5 - parent: 31 - - type: Fixtures - fixtures: {} - - uid: 9109 + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 3041 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-4.5 - parent: 31 - - type: Fixtures - fixtures: {} -- proto: FloorTileItemArcadeBlue + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: DrinkWaterCup entities: - - uid: 7988 - components: - - type: Transform - pos: 27.598589,-5.5317454 - parent: 31 - - uid: 7989 - components: - - type: Transform - pos: 27.598589,-5.5317454 - parent: 31 - - uid: 7990 + - uid: 1066 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.5799503,27.463812 parent: 31 - - uid: 7991 + - uid: 4089 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -9.776992,-18.538967 parent: 31 - - uid: 7992 + - uid: 4713 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.792557,27.438795 parent: 31 - - uid: 7993 + - uid: 7607 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.7050133,27.67646 parent: 31 - - uid: 7994 + - uid: 11632 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.7014008,10.701864 parent: 31 - - uid: 7995 + - uid: 11634 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.500059,10.520657 parent: 31 - - uid: 7996 + - uid: 11636 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -6.3591194,10.701864 parent: 31 - - uid: 7997 +- proto: DrinkWhiskeyGlass + entities: + - uid: 7539 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -15.830059,-39.34384 parent: 31 - - uid: 7998 +- proto: DrinkWineBottleFull + entities: + - uid: 3536 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -17.805563,-6.218925 parent: 31 - - uid: 7999 + - uid: 12195 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -3.1815104,-6.3841724 parent: 31 - - uid: 8000 +- proto: DrinkWineGlass + entities: + - uid: 1736 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -17.357647,-5.9791746 parent: 31 - - uid: 8001 +- proto: EmergencyLight + entities: + - uid: 309 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: 1.5707963267948966 rad + pos: -40.5,5.5 parent: 31 - - uid: 8002 + - uid: 346 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: 1.5707963267948966 rad + pos: 48.5,-4.5 parent: 31 - - uid: 8003 + - uid: 585 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: -1.5707963267948966 rad + pos: -35.5,-3.5 parent: 31 - - uid: 8004 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1187 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: 39.5,6.5 parent: 31 - - uid: 8005 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1224 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: -1.5707963267948966 rad + pos: 10.5,9.5 parent: 31 - - uid: 8006 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1226 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -4.5,14.5 parent: 31 - - uid: 8007 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1299 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -39.5,10.5 parent: 31 - - uid: 8008 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1345 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: -1.5707963267948966 rad + pos: 12.5,-3.5 parent: 31 - - uid: 8009 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 1512 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: 23.5,13.5 parent: 31 - - uid: 8010 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 2080 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -23.5,11.5 parent: 31 - - uid: 8011 + - type: PointLight + enabled: True + - type: ActiveEmergencyLight + - uid: 5354 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: 23.5,5.5 parent: 31 - - uid: 8012 + - uid: 5768 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -4.5,-14.5 parent: 31 - - uid: 8013 + - uid: 7249 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -14.5,5.5 parent: 31 - - uid: 8014 + - uid: 10310 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: -9.5,-25.5 parent: 31 - - uid: 8015 + - uid: 13065 components: - type: Transform - pos: 27.598589,-5.5317454 + rot: -1.5707963267948966 rad + pos: 0.5,0.5 parent: 31 - - uid: 8016 +- proto: EmergencyMedipen + entities: + - uid: 10988 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: 12.5220375,-4.6149173 parent: 31 - - uid: 8017 +- proto: EmergencyRollerBed + entities: + - uid: 1202 components: - type: Transform - pos: 27.598589,-5.5317454 + pos: 19.443876,-7.543538 parent: 31 -- proto: FloraTreeLarge05 +- proto: Emitter entities: - - uid: 7374 + - uid: 4870 components: - type: Transform - pos: 49.515545,-24.586845 + rot: 1.5707963267948966 rad + pos: 60.5,2.5 parent: 31 -- proto: FoamBlade +- proto: EncryptionKeyCargo entities: - - uid: 10498 + - uid: 9154 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.435028,-32.52688 - parent: 31 -- proto: FoodApple + parent: 9096 + - type: Physics + canCollide: False +- proto: EncryptionKeyCommand entities: - - uid: 10797 + - uid: 3410 components: - type: Transform - pos: 45.728592,-20.95496 - parent: 31 -- proto: FoodBanana + parent: 3371 + - type: Physics + canCollide: False +- proto: EncryptionKeyCommon entities: - - uid: 1218 + - uid: 9066 components: - type: Transform - pos: -19.287416,-7.253504 - parent: 31 - - uid: 1549 + parent: 9065 + - type: Physics + canCollide: False + - uid: 10896 components: - type: Transform - pos: -19.31693,-7.194507 + rot: 1.5707963267948966 rad + pos: 48.434895,-3.386529 parent: 31 -- proto: FoodBowlBig - entities: - - uid: 8950 + - uid: 10897 components: - type: Transform - pos: 10.876451,-23.826777 + rot: 1.5707963267948966 rad + pos: 48.611988,-3.445526 parent: 31 -- proto: FoodBoxDonut +- proto: EncryptionKeyEngineering entities: - - uid: 261 + - uid: 10233 components: - type: Transform - pos: -4.454084,13.160239 - parent: 31 - - uid: 8989 + parent: 10232 + - type: Physics + canCollide: False + - uid: 10898 components: - type: Transform - pos: -1.5376439,25.04381 + pos: 48.936653,-5.4514256 parent: 31 -- proto: FoodCakeSuppermatter +- proto: EncryptionKeyMedical entities: - - uid: 12060 + - uid: 8122 components: - type: Transform - pos: 57.510113,3.4794123 - parent: 31 -- proto: FoodCondimentBottleEnzyme - entities: - - uid: 8441 + parent: 8120 + - type: Physics + canCollide: False + - uid: 10894 components: - type: Transform - pos: -14.835613,-0.50339985 + rot: -1.5707963267948966 rad + pos: 55.474125,-11.511058 parent: 31 - - type: Tag - tags: [] -- proto: FoodCondimentPacketSalt +- proto: EncryptionKeyScience entities: - - uid: 9576 + - uid: 4604 components: - type: Transform - pos: 29.558077,-6.33541 - parent: 31 -- proto: FoodDonkpocketPizza - entities: - - uid: 418 + parent: 4590 + - type: Physics + canCollide: False + - uid: 10895 components: - type: Transform - pos: -8.183176,-18.420973 + pos: 56.448124,-11.363565 parent: 31 -- proto: FoodDonutChocolate +- proto: EncryptionKeySecurity entities: - - uid: 46 + - uid: 8164 components: - type: Transform - pos: -2.214967,7.851863 - parent: 31 -- proto: FoodFrozenSandwich + parent: 8163 + - type: Physics + canCollide: False +- proto: EncryptionKeyService entities: - - uid: 5708 + - uid: 9188 components: - type: Transform - pos: -7.48876,-35.481796 - parent: 31 - - uid: 5709 + parent: 9179 + - type: Physics + canCollide: False +- proto: ExosuitFabricator + entities: + - uid: 9537 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.630615,-35.540794 + pos: -0.5,-24.5 parent: 31 -- proto: FoodMealSashimi +- proto: ExplosivesSignMed entities: - - uid: 11300 + - uid: 8897 components: - type: Transform - pos: -6.490023,-1.3167214 + pos: -11.5,17.5 parent: 31 - - uid: 12245 +- proto: ExtendedEmergencyOxygenTank + entities: + - uid: 3730 components: - type: Transform - pos: -6.474398,-0.36359644 + pos: -11.445563,-27.496508 parent: 31 -- proto: FoodMeatCrab +- proto: ExtinguisherCabinet entities: - - uid: 12241 + - uid: 10537 components: - type: Transform - pos: -9.299337,-4.3948464 + rot: 1.5707963267948966 rad + pos: 1.5,-31.5 parent: 31 - - uid: 12242 +- proto: ExtinguisherCabinetFilled + entities: + - uid: 517 components: - type: Transform - pos: -9.299337,-4.5198464 + pos: -10.5,12.5 parent: 31 - - uid: 12243 + - uid: 1868 components: - type: Transform - pos: -9.299337,-4.7385964 + pos: 5.5,23.5 parent: 31 - - uid: 12244 + - uid: 4807 components: - type: Transform - pos: -9.299337,-4.8323464 + pos: 14.5,-3.5 parent: 31 -- proto: FoodMeatFish - entities: - - uid: 6886 + - uid: 4895 components: - type: Transform - pos: -9.564962,-4.4729714 + pos: -34.5,-10.5 parent: 31 - - uid: 6903 + - uid: 4899 components: - type: Transform - pos: -9.564962,-4.3479714 + pos: -30.5,10.5 parent: 31 - - uid: 11479 + - uid: 4900 components: - type: Transform - pos: -9.564962,-4.6448464 + pos: -34.5,-2.5 parent: 31 - - uid: 12240 + - uid: 4908 components: - type: Transform - pos: -9.564962,-4.7698464 + pos: 32.5,-5.5 parent: 31 -- proto: FoodPieBananaCream - entities: - - uid: 1314 + - uid: 4913 components: - type: Transform - pos: -19.730143,-7.194507 + pos: 17.5,8.5 parent: 31 -- proto: FoodPizzaArnoldSlice - entities: - - uid: 9053 + - uid: 4914 components: - type: Transform - pos: -29.477003,17.566315 + pos: 9.5,12.5 parent: 31 -- proto: FoodPizzaPineapple - entities: - - uid: 8745 + - uid: 4916 components: - type: Transform - pos: -35.517406,-25.152033 + pos: -6.5,18.5 parent: 31 -- proto: FoodPlateSmall - entities: - - uid: 6646 + - uid: 4917 components: - type: Transform - pos: -3.414538,-1.2894373 + pos: 0.5,16.5 parent: 31 - - uid: 11302 + - uid: 4918 components: - type: Transform - pos: -2.523913,-1.3363123 + pos: 11.5,17.5 parent: 31 - - uid: 12208 + - uid: 4923 components: - type: Transform - pos: -10.520765,0.62183887 + pos: 11.5,-28.5 parent: 31 - - uid: 12209 + - uid: 5305 components: - type: Transform - pos: -10.395765,-0.33128613 + pos: 17.5,-29.5 parent: 31 - - uid: 12210 + - uid: 5306 components: - type: Transform - pos: -10.489515,1.5437138 + pos: -24.5,23.5 parent: 31 - - uid: 12238 + - uid: 7435 components: - type: Transform - pos: -6.5043883,-0.35773182 + pos: -12.5,-26.5 parent: 31 - - uid: 12239 + - uid: 8894 components: - type: Transform - pos: -6.5668883,-1.2483568 + rot: 3.141592653589793 rad + pos: 51.5,4.5 parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 -- proto: FoodPoppy - entities: - - uid: 4196 + - uid: 8905 components: - type: Transform - pos: -2.270069,18.786497 + pos: 5.5,29.5 parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 - - uid: 9762 + - uid: 10311 components: - type: Transform - pos: -16.049828,-39.578854 + pos: -16.5,-9.5 parent: 31 -- proto: FoodShakerSalt - entities: - - uid: 9577 + - uid: 11387 components: - type: Transform - pos: 29.948702,-6.58541 + pos: 42.5,-1.5 parent: 31 - - uid: 9578 +- proto: EZNutrientChemistryBottle + entities: + - uid: 10445 components: - type: Transform - pos: 29.136202,-6.538535 + pos: -22.720448,-0.21116775 parent: 31 -- proto: FoodSnackChocolate +- proto: FaxMachineBase entities: - - uid: 1913 + - uid: 683 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.419368,-3.3883321 + pos: 14.5,-4.5 parent: 31 - - uid: 5636 + - type: FaxMachine + name: Medical + destinationAddress: Medical + - uid: 802 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.617393,-3.3883321 + pos: 4.5,31.5 parent: 31 -- proto: FoodTinBeans - entities: - - uid: 3485 + - uid: 1264 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 3831 + pos: 40.5,4.5 + parent: 31 + - type: FaxMachine + name: engineering + - uid: 2045 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 3832 + pos: -17.5,-25.5 + parent: 31 + - type: FaxMachine + name: Science + destinationAddress: Science + - uid: 8323 components: - type: Transform - parent: 2363 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: FoodTinMRE - entities: - - uid: 7837 + pos: 9.5,-28.5 + parent: 31 + - type: FaxMachine + name: library + - uid: 8994 components: - type: Transform - pos: -26.53067,19.803333 + pos: 13.5,12.5 parent: 31 -- proto: FoodWatermelonSlice - entities: - - uid: 10793 + - type: FaxMachine + name: Cargo + destinationAddress: Cargo + - uid: 9687 components: - type: Transform - pos: 45.529526,-21.25198 + pos: 8.5,18.5 parent: 31 -- proto: Fork + - type: FaxMachine + name: hop's office +- proto: FaxMachineCaptain entities: - - uid: 12172 + - uid: 7191 components: - type: Transform - pos: -3.758288,-1.4300623 + pos: 6.5,24.5 parent: 31 - - uid: 12173 +- proto: filingCabinet + entities: + - uid: 2708 components: - type: Transform - pos: -2.867663,-1.3988123 + pos: 0.5,13.5 parent: 31 -- proto: ForkPlastic +- proto: filingCabinetDrawerRandom entities: - - uid: 12212 + - uid: 1758 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.44264,0.24683887 + pos: -1.5,11.5 parent: 31 - - uid: 12213 + - uid: 4637 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.41139,1.1999638 + pos: -10.5,-30.5 parent: 31 - - uid: 12214 + - uid: 8890 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.44264,-0.58128613 + pos: 9.5,18.5 parent: 31 -- proto: FuelDispenser +- proto: filingCabinetRandom entities: - - uid: 5080 + - uid: 4216 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,0.5 + pos: 6.5,26.5 parent: 31 - - uid: 11338 + - uid: 5628 components: - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,-5.5 + pos: 6.5,-5.5 parent: 31 -- proto: GasAnalyzer - entities: - - uid: 3985 + - uid: 7542 components: - type: Transform - pos: -11.359732,-27.422089 + pos: -12.5,-39.5 parent: 31 -- proto: GasFilter - entities: - - uid: 7125 + - uid: 7710 components: - - type: MetaData - name: waste filter - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-16.5 + pos: 15.5,12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' -- proto: GasFilterFlipped +- proto: FireAlarm entities: - - uid: 4431 + - uid: 888 components: - type: Transform - pos: 71.5,9.5 + rot: 1.5707963267948966 rad + pos: 1.5,-24.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4432 + - type: DeviceList + devices: + - 11750 + - 613 + - 669 + - 2872 + - 2891 + - 7379 + - 11751 + - 11752 + - 11753 + - 11754 + - 11755 + - 11756 + - uid: 4101 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,6.5 + rot: 1.5707963267948966 rad + pos: 1.5,26.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4556 + - type: DeviceList + devices: + - 7209 + - 7166 + - 4073 + - 7270 + - 7337 + - 7351 + - 7353 + - 7354 + - 7355 + - uid: 9041 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 69.5,6.5 + rot: 3.141592653589793 rad + pos: -14.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4559 + - type: DeviceList + devices: + - 9972 + - 9970 + - 995 + - 179 + - 337 + - uid: 9985 components: - type: Transform rot: -1.5707963267948966 rad - pos: 67.5,6.5 - parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6850 - components: - - type: Transform - pos: 71.5,7.5 + pos: 6.5,-14.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7367 + - type: DeviceList + devices: + - 9988 + - 9990 + - uid: 9992 components: - type: Transform rot: -1.5707963267948966 rad - pos: 38.5,16.5 + pos: 5.5,8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8437 + - type: DeviceList + devices: + - 8954 + - 8956 + - 852 + - 1027 + - 1028 + - 8885 + - 8883 + - 3959 + - 3944 + - 3943 + - 3989 + - 3987 + - 3988 + - 9988 + - 9990 + - 576 + - 1330 + - 1167 + - uid: 9997 components: - type: Transform rot: -1.5707963267948966 rad - pos: 36.5,16.5 + pos: -34.5,1.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9086 + - type: DeviceList + devices: + - 3977 + - 3976 + - 3975 + - uid: 10004 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,16.5 + rot: 3.141592653589793 rad + pos: 5.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9099 + - type: DeviceList + devices: + - 8885 + - 8883 + - 5115 + - uid: 10006 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,16.5 + pos: 18.5,6.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9190 + - type: DeviceList + devices: + - 4028 + - 4030 + - 4026 + - 8856 + - 8857 + - uid: 10023 components: - type: Transform rot: -1.5707963267948966 rad - pos: 34.5,16.5 + pos: 1.5,-3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9391 + - type: DeviceList + devices: + - 3943 + - 3944 + - 3959 + - 1167 + - 1330 + - 576 + - 4525 + - 4528 + - 4529 + - uid: 10243 components: - type: Transform rot: -1.5707963267948966 rad - pos: 44.5,16.5 + pos: -21.5,-13.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10106 + - type: DeviceList + devices: + - 10313 + - 10314 + - 10315 + - uid: 10409 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,16.5 + pos: -17.5,-13.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10108 + - type: DeviceList + devices: + - 10313 + - 10314 + - 10315 + - uid: 10410 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,16.5 + pos: -1.5,-13.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' -- proto: GasMinerAmmonia - entities: - - uid: 6657 + - type: DeviceList + devices: + - 10316 + - 10318 + - uid: 10419 components: - type: Transform - pos: 46.5,22.5 + pos: -11.5,-23.5 parent: 31 -- proto: GasMinerCarbonDioxide - entities: - - uid: 6655 + - type: DeviceList + devices: + - 3857 + - 3866 + - 3428 + - 3724 + - uid: 11003 components: - type: Transform - pos: 40.5,22.5 + rot: 1.5707963267948966 rad + pos: 5.5,-3.5 parent: 31 -- proto: GasMinerNitrogenStation + - type: DeviceList + devices: + - 3989 + - 3987 + - 3988 + - 8940 + - 673 +- proto: FireAxeCabinetFilled entities: - - uid: 6545 + - uid: 9896 components: - type: Transform - pos: 34.5,22.5 + pos: -0.5,30.5 parent: 31 -- proto: GasMinerNitrousOxide - entities: - - uid: 6654 + - uid: 11444 components: - type: Transform - pos: 38.5,22.5 + pos: 52.5,18.5 parent: 31 -- proto: GasMinerOxygenStation +- proto: Firelock entities: - - uid: 6538 + - uid: 45 components: - type: Transform - pos: 36.5,22.5 + pos: -32.5,-12.5 parent: 31 -- proto: GasMinerPlasma - entities: - - uid: 6656 + - uid: 179 components: - type: Transform - pos: 42.5,22.5 + pos: -10.5,4.5 parent: 31 -- proto: GasMixerFlipped - entities: - - uid: 7310 + - uid: 308 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,15.5 + pos: -29.5,-18.5 parent: 31 - - uid: 7477 + - uid: 337 components: - type: Transform - rot: 3.141592653589793 rad - pos: 34.5,14.5 + pos: -10.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8303 + - uid: 409 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,15.5 + pos: -6.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8428 + - uid: 575 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,15.5 + pos: 15.5,-3.5 parent: 31 - - uid: 12140 + - uid: 576 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,15.5 + pos: -7.5,2.5 parent: 31 - - uid: 12141 + - uid: 684 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,15.5 + pos: 21.5,-22.5 parent: 31 - - uid: 12142 + - uid: 995 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,15.5 + pos: -10.5,5.5 parent: 31 -- proto: GasOutletInjector - entities: - - uid: 672 + - uid: 1167 components: - type: Transform - pos: 42.5,21.5 + pos: -5.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2177 + - uid: 1330 components: - type: Transform - pos: 34.5,21.5 + pos: -6.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2668 + - uid: 2180 components: - type: Transform - pos: 40.5,21.5 + pos: 22.5,-22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 3461 + - uid: 3376 components: - type: Transform - pos: 38.5,21.5 + pos: -18.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4034 + - uid: 3962 components: - type: Transform - pos: 36.5,21.5 + pos: -6.5,-9.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11045 + - uid: 3968 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,12.5 + pos: -32.5,-9.5 parent: 31 - - uid: 11062 + - uid: 3982 components: - type: Transform - pos: 46.5,21.5 + pos: 13.5,-19.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11069 + - uid: 3984 components: - type: Transform - pos: 44.5,21.5 + pos: 13.5,-20.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' -- proto: GasPassiveVent - entities: - - uid: 7 + - uid: 3992 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,23.5 + pos: 37.5,-5.5 parent: 31 - - uid: 49 + - uid: 3996 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,23.5 + pos: -33.5,-9.5 parent: 31 - - uid: 52 + - uid: 4002 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,23.5 + pos: 25.5,-1.5 parent: 31 - - uid: 127 + - uid: 4003 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,23.5 + pos: 25.5,-2.5 parent: 31 - - uid: 3124 + - uid: 4010 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,23.5 + pos: -1.5,6.5 parent: 31 - - uid: 3477 + - uid: 4015 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,23.5 + pos: 38.5,-5.5 parent: 31 - - uid: 4443 + - uid: 4019 components: - type: Transform - rot: 3.141592653589793 rad - pos: 66.5,3.5 + pos: 11.5,14.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4477 + - uid: 4041 components: - type: Transform - rot: 3.141592653589793 rad - pos: 67.5,3.5 + pos: -10.5,24.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4560 + - uid: 4042 components: - type: Transform - pos: 66.5,1.5 + pos: -10.5,25.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4641 + - uid: 4975 components: - type: Transform - pos: 67.5,1.5 + pos: -22.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5547 + - uid: 5034 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-4.5 + pos: 26.5,-19.5 parent: 31 - - uid: 5752 + - uid: 5035 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,-29.5 + pos: 23.5,-24.5 parent: 31 - - uid: 6211 + - uid: 5104 components: - type: Transform - pos: 33.5,19.5 + pos: 13.5,-0.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6856 + - uid: 5115 components: - type: Transform - rot: 3.141592653589793 rad - pos: 68.5,3.5 + pos: 6.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6864 + - uid: 5217 components: - type: Transform - pos: 68.5,1.5 + pos: -27.5,16.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9392 + - uid: 5312 components: - type: Transform - pos: 48.5,19.5 + pos: 15.5,-26.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11025 + - uid: 10302 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,23.5 + pos: -28.5,-20.5 parent: 31 - - uid: 12128 + - uid: 11101 components: - type: Transform - pos: 66.5,13.5 + pos: 27.5,-9.5 parent: 31 -- proto: GasPipeBend - entities: - - uid: 1 + - uid: 11621 components: - type: Transform - pos: 39.5,23.5 + rot: -1.5707963267948966 rad + pos: -22.5,-24.5 parent: 31 - - uid: 21 + - uid: 11622 components: - type: Transform - pos: 41.5,23.5 + rot: -1.5707963267948966 rad + pos: -20.5,-28.5 parent: 31 - - uid: 129 + - uid: 11751 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 39.5,6.5 + rot: -1.5707963267948966 rad + pos: 5.5,-32.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 644 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 11752 components: - type: Transform rot: -1.5707963267948966 rad - pos: 50.5,11.5 + pos: 8.5,-31.5 parent: 31 - - uid: 667 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 11753 components: - type: Transform - pos: 45.5,23.5 + rot: -1.5707963267948966 rad + pos: 10.5,-30.5 parent: 31 - - uid: 898 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 11754 components: - type: Transform - pos: 43.5,23.5 + rot: -1.5707963267948966 rad + pos: 13.5,-24.5 parent: 31 - - uid: 954 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 12682 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,10.5 + pos: -28.5,-25.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 981 +- proto: FirelockEdge + entities: + - uid: 693 components: - type: Transform - pos: 10.5,24.5 + rot: 3.141592653589793 rad + pos: 53.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1250 + - uid: 3737 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,25.5 + rot: 3.141592653589793 rad + pos: -15.5,-18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1634 + - uid: 3738 components: - type: Transform - pos: -4.5,25.5 + pos: -15.5,-18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1914 + - uid: 3740 components: - type: Transform - pos: 64.5,13.5 + rot: 3.141592653589793 rad + pos: -16.5,-18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2417 + - uid: 4073 components: - type: Transform - pos: 37.5,23.5 + rot: 1.5707963267948966 rad + pos: -0.5,29.5 parent: 31 - - uid: 3011 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7270 components: - type: Transform - pos: 35.5,23.5 + rot: 1.5707963267948966 rad + pos: -0.5,28.5 parent: 31 - - uid: 3206 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 8482 components: - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,10.5 + pos: -16.5,-18.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 3207 + - uid: 10307 components: - type: Transform - pos: 24.5,11.5 + rot: 1.5707963267948966 rad + pos: -33.5,-21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 3841 + - uid: 11755 components: - type: Transform - pos: -23.5,9.5 + rot: -1.5707963267948966 rad + pos: 5.5,-28.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 3946 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 11756 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,13.5 + rot: -1.5707963267948966 rad + pos: 5.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4316 + - type: DeviceNetwork + deviceLists: + - 888 +- proto: FirelockElectronics + entities: + - uid: 13 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 22.5,16.5 + pos: -29.687315,9.038336 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4373 + - uid: 55 components: - type: Transform - rot: 3.141592653589793 rad - pos: 62.5,2.5 + pos: -29.711033,9.429151 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4400 + - uid: 4298 components: - type: Transform - pos: 54.5,25.5 + pos: 29.352465,-1.4202437 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4430 + - uid: 4324 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,24.5 + pos: 29.633715,-1.4827437 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4434 + - uid: 11189 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 65.5,7.5 + pos: -17.2592,20.436329 parent: 31 - - uid: 4435 +- proto: FirelockFrame + entities: + - uid: 3419 components: - type: Transform - pos: 68.5,4.5 + pos: -17.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4482 +- proto: FirelockGlass + entities: + - uid: 24 components: - type: Transform - pos: 31.5,19.5 + pos: 20.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4543 + - uid: 263 components: - type: Transform - pos: 63.5,12.5 + pos: -24.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4553 + - uid: 613 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,10.5 + pos: 4.5,-23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4601 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 669 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 71.5,6.5 + pos: 2.5,-23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4642 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 673 components: - type: Transform - rot: 3.141592653589793 rad - pos: -40.5,-4.5 + pos: 10.5,-6.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4649 + - uid: 852 components: - type: Transform - pos: 55.5,2.5 + pos: 5.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4773 + - uid: 1027 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 70.5,2.5 + pos: 5.5,4.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4788 + - uid: 1028 components: - type: Transform - pos: 55.5,23.5 + pos: 5.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4796 + - uid: 1185 components: - type: Transform - pos: 63.5,7.5 + pos: 21.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4846 + - uid: 1505 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,25.5 + pos: 15.5,8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4932 + - uid: 2148 components: - type: Transform - pos: 47.5,23.5 + pos: -26.5,-8.5 parent: 31 - - uid: 5456 + - uid: 2872 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,11.5 + pos: 1.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5457 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 2891 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,10.5 + pos: 1.5,-28.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5538 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 3305 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,-1.5 + pos: 1.5,4.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5551 + - type: DeviceNetwork + deviceLists: + - 9979 + - uid: 3428 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,-4.5 + rot: 3.141592653589793 rad + pos: -9.5,-33.5 parent: 31 - - uid: 5553 + - uid: 3724 components: - type: Transform - pos: 10.5,-1.5 + rot: 3.141592653589793 rad + pos: -4.5,-27.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5554 + - uid: 3857 components: - type: Transform - pos: 11.5,0.5 + rot: 3.141592653589793 rad + pos: -10.5,-23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5582 + - uid: 3866 components: - type: Transform - pos: 19.5,-8.5 + rot: 3.141592653589793 rad + pos: -12.5,-25.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5589 + - uid: 3943 components: - type: Transform - pos: 18.5,-10.5 + pos: 1.5,-2.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5627 + - uid: 3944 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-15.5 + pos: 1.5,-1.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5639 + - uid: 3959 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-8.5 + pos: 1.5,-0.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5640 + - uid: 3969 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-10.5 + pos: -24.5,7.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5682 + - uid: 3970 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,-17.5 + pos: -23.5,7.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5683 + - uid: 3975 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-17.5 + pos: -33.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5697 + - uid: 3976 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-25.5 + pos: -33.5,4.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5702 + - uid: 3977 components: - type: Transform - pos: 7.5,-19.5 + pos: -33.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5703 + - uid: 3987 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-20.5 + pos: 5.5,-1.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5722 + - uid: 3988 components: - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,13.5 + pos: 5.5,-0.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5724 + - uid: 3989 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-29.5 + pos: 5.5,-2.5 parent: 31 - - uid: 5778 + - uid: 4026 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-25.5 + pos: 11.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5779 + - uid: 4028 components: - type: Transform - pos: 15.5,-25.5 + pos: 11.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5783 + - uid: 4030 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,23.5 + pos: 11.5,4.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5892 + - uid: 4210 components: - type: Transform rot: 3.141592653589793 rad - pos: -4.5,20.5 + pos: -13.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5896 + - uid: 4215 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,25.5 + rot: 3.141592653589793 rad + pos: -5.5,-38.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5897 + - uid: 4334 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,19.5 + pos: 8.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5944 + - uid: 4345 components: - type: Transform - pos: 8.5,9.5 + pos: 8.5,-10.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5971 + - uid: 4525 components: - type: Transform - pos: -5.5,10.5 + pos: -10.5,1.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5991 + - uid: 4528 components: - type: Transform - pos: -4.5,10.5 + pos: -10.5,0.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6001 + - uid: 4529 + components: + - type: Transform + pos: -10.5,-0.5 + parent: 31 + - uid: 4613 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,21.5 + pos: 37.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6016 + - uid: 6002 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,10.5 + pos: 24.5,4.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6025 + - type: DeviceNetwork + deviceLists: + - 9978 + - uid: 6957 components: - type: Transform - pos: -11.5,16.5 + pos: 28.5,-17.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6026 + - uid: 7166 components: - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,16.5 + rot: 1.5707963267948966 rad + pos: -3.5,28.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6096 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7178 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-17.5 + pos: 38.5,-8.5 parent: 31 - - uid: 6106 + - uid: 7209 components: - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,9.5 + rot: 1.5707963267948966 rad + pos: -3.5,30.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6214 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7325 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,17.5 + rot: -1.5707963267948966 rad + pos: -37.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6228 + - uid: 7337 components: - type: Transform rot: 3.141592653589793 rad - pos: 44.5,2.5 + pos: 3.5,27.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6265 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7351 components: - type: Transform rot: 3.141592653589793 rad - pos: 38.5,0.5 + pos: 1.5,25.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6266 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7353 components: - type: Transform - pos: 39.5,0.5 + rot: 3.141592653589793 rad + pos: 1.5,24.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6274 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7354 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,-0.5 + pos: 3.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6540 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7355 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,9.5 + rot: 3.141592653589793 rad + pos: 5.5,25.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6578 + - type: DeviceNetwork + deviceLists: + - 4101 + - uid: 7379 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,8.5 + pos: 1.5,-26.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6632 + - type: DeviceNetwork + deviceLists: + - 888 + - uid: 8399 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,-16.5 + pos: 45.5,-6.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6753 + - uid: 8856 components: - type: Transform - pos: 70.5,8.5 + pos: 24.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6762 + - uid: 8857 components: - type: Transform - pos: 67.5,7.5 + pos: 24.5,3.5 parent: 31 - - uid: 6764 + - uid: 8883 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,19.5 + pos: 2.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6846 + - uid: 8885 components: - type: Transform - rot: 3.141592653589793 rad - pos: 63.5,9.5 + pos: 4.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6867 + - uid: 8940 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,24.5 + pos: 9.5,-6.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6927 + - uid: 8954 components: - type: Transform - rot: 3.141592653589793 rad - pos: 54.5,23.5 + pos: 1.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7091 + - uid: 8956 components: - type: Transform - rot: 3.141592653589793 rad - pos: 23.5,9.5 + pos: 1.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7092 + - uid: 9782 components: - type: Transform - pos: 23.5,10.5 + rot: 3.141592653589793 rad + pos: 8.5,-36.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7183 + - uid: 9783 components: - type: Transform rot: 3.141592653589793 rad - pos: 55.5,1.5 + pos: 9.5,-36.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7228 + - uid: 9958 components: - type: Transform - rot: 3.141592653589793 rad - pos: 62.5,-1.5 + pos: 36.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7426 + - uid: 9960 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,-8.5 + pos: 36.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7638 + - uid: 9961 components: - type: Transform - rot: 3.141592653589793 rad - pos: 57.5,14.5 + pos: 33.5,7.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7726 + - uid: 9962 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,3.5 + pos: 30.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8110 + - uid: 9963 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-17.5 + pos: 30.5,5.5 parent: 31 - - uid: 8232 + - uid: 9964 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,14.5 + pos: 33.5,1.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8426 + - uid: 9965 components: - type: Transform - pos: 57.5,15.5 + pos: 25.5,17.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8427 + - uid: 9966 components: - type: Transform - rot: 3.141592653589793 rad - pos: 62.5,13.5 + pos: 25.5,16.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8430 + - uid: 9967 components: - type: Transform - pos: 62.5,14.5 + pos: 21.5,14.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8458 + - uid: 9968 components: - type: Transform - pos: 59.5,13.5 + pos: 20.5,14.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8459 + - uid: 9970 components: - type: Transform - rot: 3.141592653589793 rad - pos: 59.5,12.5 + pos: -21.5,3.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8990 + - uid: 9972 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,16.5 + pos: -21.5,5.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9057 + - uid: 9973 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,-0.5 + pos: 54.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9152 + - uid: 9981 components: - type: Transform rot: 1.5707963267948966 rad - pos: 62.5,-0.5 + pos: -27.5,-21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9200 + - uid: 9982 components: - type: Transform rot: 1.5707963267948966 rad - pos: -37.5,0.5 + pos: -27.5,-22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9224 + - uid: 9988 components: - type: Transform - rot: 3.141592653589793 rad - pos: -38.5,13.5 + rot: -1.5707963267948966 rad + pos: 2.5,-12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9263 + - uid: 9990 components: - type: Transform - pos: 33.5,12.5 + rot: -1.5707963267948966 rad + pos: 4.5,-12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 9353 + - uid: 9999 components: - type: Transform - pos: -24.5,14.5 + rot: 1.5707963267948966 rad + pos: -5.5,6.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9354 + - uid: 10000 components: - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,14.5 + rot: 1.5707963267948966 rad + pos: -4.5,6.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9355 + - uid: 10008 components: - type: Transform rot: 1.5707963267948966 rad - pos: -25.5,19.5 + pos: 45.5,8.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10103 + - uid: 10017 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,15.5 + rot: -1.5707963267948966 rad + pos: 13.5,-9.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10381 + - uid: 10099 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-29.5 + pos: 22.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10913 + - uid: 10245 components: - type: Transform - pos: 56.5,-3.5 + rot: -1.5707963267948966 rad + pos: -36.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10955 + - uid: 10246 components: - type: Transform - pos: 55.5,-8.5 + rot: -1.5707963267948966 rad + pos: -35.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10956 + - uid: 10313 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,-9.5 + pos: -19.5,-14.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10957 + - uid: 10314 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,-8.5 + pos: -19.5,-15.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11050 + - uid: 10315 components: - type: Transform - pos: 50.5,13.5 + pos: -19.5,-16.5 parent: 31 - - uid: 11567 + - uid: 10316 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,-14.5 + pos: 0.5,-14.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11573 + - uid: 10318 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-22.5 + pos: 0.5,-16.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11590 + - uid: 10658 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-23.5 + pos: 40.5,-12.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11591 + - uid: 10900 components: - type: Transform - pos: -22.5,-23.5 + pos: 49.5,-1.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11595 + - uid: 11000 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-27.5 + pos: 9.5,-12.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11603 + - uid: 11091 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -31.5,-21.5 + rot: -1.5707963267948966 rad + pos: 29.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11604 + - uid: 11092 components: - type: Transform rot: -1.5707963267948966 rad - pos: -31.5,-22.5 + pos: 31.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11605 + - uid: 11495 components: - type: Transform rot: 1.5707963267948966 rad - pos: -30.5,-22.5 + pos: -18.5,-22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11797 + - uid: 11498 components: - type: Transform - pos: 75.5,10.5 + rot: 1.5707963267948966 rad + pos: -23.5,-17.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11799 + - uid: 11499 components: - type: Transform - pos: 76.5,8.5 + rot: 1.5707963267948966 rad + pos: -18.5,-21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11800 + - uid: 11501 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 76.5,3.5 + rot: 1.5707963267948966 rad + pos: -27.5,-22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11806 + - uid: 11502 components: - type: Transform rot: 1.5707963267948966 rad - pos: 73.5,8.5 + pos: -22.5,-17.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11810 + - uid: 11503 components: - type: Transform rot: 1.5707963267948966 rad - pos: 72.5,3.5 + pos: -25.5,-23.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11865 + - uid: 11504 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-21.5 + parent: 31 + - uid: 11750 components: - type: Transform rot: -1.5707963267948966 rad - pos: 72.5,0.5 + pos: 3.5,-31.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11866 + - type: DeviceNetwork + deviceLists: + - 888 +- proto: Fireplace + entities: + - uid: 3749 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,0.5 + pos: 0.5,1.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11867 + - uid: 8988 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 71.5,-0.5 + pos: 7.5,26.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11868 +- proto: FlashlightLantern + entities: + - uid: 9950 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,-0.5 + pos: 27.403997,15.554827 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11869 + - uid: 10696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 70.5,-1.5 + pos: -0.47756696,-12.240095 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11882 +- proto: FlashlightSeclite + entities: + - uid: 9117 components: - type: Transform rot: -1.5707963267948966 rad - pos: 68.5,0.5 + pos: -14.223138,16.03936 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12152 +- proto: FloorDrain + entities: + - uid: 262 components: - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,12.5 + pos: 15.5,-17.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 12154 + - type: Fixtures + fixtures: {} + - uid: 675 + components: + - type: Transform + pos: -6.5,-12.5 + parent: 31 + - type: Fixtures + fixtures: {} + - uid: 4337 components: - type: Transform - pos: 32.5,13.5 + pos: 12.5,27.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 12248 + - type: Fixtures + fixtures: {} + - uid: 9108 components: - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,13.5 + pos: 17.5,-0.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12250 + - type: Fixtures + fixtures: {} + - uid: 9109 components: - type: Transform rot: 3.141592653589793 rad - pos: 32.5,14.5 + pos: -10.5,-4.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12580 + - type: Fixtures + fixtures: {} + - uid: 10391 components: - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,13.5 + pos: -21.5,-6.5 parent: 31 -- proto: GasPipeBroken + - type: Fixtures + fixtures: {} +- proto: FloorTileItemArcadeBlue entities: - - uid: 1352 + - uid: 7988 components: - type: Transform - pos: 34.5,14.5 + pos: 27.598589,-5.5317454 parent: 31 -- proto: GasPipeFourway - entities: - - uid: 583 + - uid: 7989 components: - type: Transform - pos: -7.5,-19.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5321 + - uid: 7990 components: - type: Transform - pos: 2.5,3.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5322 + - uid: 7991 components: - type: Transform - pos: 4.5,5.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5325 + - uid: 7992 components: - type: Transform - pos: 4.5,-1.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5361 + - uid: 7993 components: - type: Transform - pos: 2.5,0.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5813 + - uid: 7994 components: - type: Transform - pos: 2.5,24.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5823 + - uid: 7995 components: - type: Transform - pos: 4.5,25.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5828 + - uid: 7996 components: - type: Transform - pos: 4.5,20.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5952 + - uid: 7997 components: - type: Transform - pos: 32.5,5.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5953 + - uid: 7998 components: - type: Transform - pos: 33.5,3.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6082 + - uid: 7999 components: - type: Transform - pos: -23.5,3.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6083 + - uid: 8000 components: - type: Transform - pos: -24.5,5.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6144 + - uid: 8001 components: - type: Transform - pos: -35.5,5.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6150 + - uid: 8002 components: - type: Transform - pos: -36.5,3.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6444 + - uid: 8003 components: - type: Transform - pos: 33.5,9.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7414 + - uid: 8004 components: - type: Transform - pos: 2.5,-16.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11407 + - uid: 8005 components: - type: Transform - pos: -37.5,-5.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11798 + - uid: 8006 components: - type: Transform - pos: 75.5,8.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' -- proto: GasPipeStraight - entities: - - uid: 57 + - uid: 8007 components: - type: Transform - pos: 8.5,18.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 109 + - uid: 8008 components: - type: Transform - pos: 39.5,20.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 110 + - uid: 8009 components: - type: Transform - pos: 39.5,19.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 111 + - uid: 8010 components: - type: Transform - pos: 41.5,18.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 115 + - uid: 8011 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,25.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 132 + - uid: 8012 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,3.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 159 + - uid: 8013 components: - type: Transform - pos: 39.5,21.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 347 + - uid: 8014 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-8.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 354 + - uid: 8015 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-21.5 + pos: 27.598589,-5.5317454 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 415 + - uid: 8016 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-29.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 467 + - uid: 8017 components: - type: Transform - pos: 45.5,22.5 + pos: 27.598589,-5.5317454 parent: 31 - - uid: 561 +- proto: FoodBanana + entities: + - uid: 5010 components: - type: Transform rot: 3.141592653589793 rad - pos: 35.5,20.5 + pos: -20.507698,-10.269954 parent: 31 - - uid: 602 + - uid: 12079 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,19.5 + rot: -1.5707963267948966 rad + pos: -20.640728,-11.195335 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 715 +- proto: FoodBowlBig + entities: + - uid: 8950 components: - type: Transform - pos: 37.5,19.5 + pos: 10.876451,-23.826777 parent: 31 - - uid: 750 +- proto: FoodBoxDonut + entities: + - uid: 2604 components: - type: Transform - pos: -24.5,12.5 + pos: -5.5081687,13.587074 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 773 + - uid: 8517 components: - type: Transform - rot: 3.141592653589793 rad - pos: 40.5,18.5 + pos: 4.6367803,35.863194 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 789 + - uid: 8989 components: - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,20.5 + pos: -1.5376439,25.04381 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 800 +- proto: FoodCakeSuppermatter + entities: + - uid: 12060 components: - type: Transform - pos: -9.5,-20.5 + pos: 57.510113,3.4794123 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 813 +- proto: FoodCondimentBottleEnzyme + entities: + - uid: 8441 components: - type: Transform - pos: 39.5,22.5 + pos: -14.835613,-0.50339985 parent: 31 - - uid: 822 + - type: Tag + tags: [] +- proto: FoodCondimentPacketSalt + entities: + - uid: 9576 components: - type: Transform - rot: 3.141592653589793 rad - pos: 40.5,19.5 + pos: 29.558077,-6.33541 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 899 +- proto: FoodDonkpocketPizza + entities: + - uid: 418 components: - type: Transform - pos: -4.5,24.5 + pos: -8.183176,-18.420973 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 925 +- proto: FoodDonutChocolate + entities: + - uid: 46 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,20.5 + pos: -2.214967,7.851863 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 928 +- proto: FoodGalaxythistle + entities: + - uid: 10401 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-16.5 + pos: -17.579866,1.4005744 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 978 +- proto: FoodMealSashimi + entities: + - uid: 11300 components: - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,19.5 + pos: -6.490023,-1.3167214 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 980 + - uid: 12245 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,25.5 + pos: -6.474398,-0.36359644 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 991 +- proto: FoodMeatCrab + entities: + - uid: 12241 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,18.5 + pos: -9.299337,-4.3948464 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1067 + - uid: 12242 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,19.5 + pos: -9.299337,-4.5198464 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1086 + - uid: 12243 components: - type: Transform - pos: -9.5,-17.5 + pos: -9.299337,-4.7385964 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1093 + - uid: 12244 components: - type: Transform - pos: -9.5,-18.5 + pos: -9.299337,-4.8323464 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1165 +- proto: FoodMeatDragon + entities: + - uid: 4520 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,25.5 + pos: -14.773218,-3.3475776 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1238 + - uid: 10553 components: - type: Transform - pos: -24.5,10.5 + pos: -14.762801,-3.576903 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1289 + - uid: 11778 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,8.5 + pos: -14.762801,-3.8479247 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1470 +- proto: FoodMeatFish + entities: + - uid: 6886 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,-16.5 + pos: -9.564962,-4.4729714 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1473 + - uid: 6903 components: - type: Transform - pos: -9.5,-19.5 + pos: -9.564962,-4.3479714 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1486 + - uid: 11479 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-14.5 + pos: -9.564962,-4.6448464 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1487 + - uid: 12240 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-12.5 + pos: -9.564962,-4.7698464 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1490 +- proto: FoodMeatXeno + entities: + - uid: 1809 components: - type: Transform - pos: -7.5,-17.5 + pos: -14.387801,-3.618599 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1514 + - uid: 8203 components: - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,21.5 + pos: -14.346134,-3.368425 parent: 31 - - uid: 1515 + - uid: 11385 components: - type: Transform - pos: 33.5,18.5 + pos: -14.377384,-3.8687725 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1516 +- proto: FoodPieBananaCream + entities: + - uid: 473 components: - type: Transform - pos: 36.5,20.5 + pos: -19.338718,-10.382835 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1533 + - uid: 2752 components: - type: Transform - pos: 39.5,18.5 + pos: -19.338718,-10.132835 parent: 31 - - uid: 1543 +- proto: FoodPizzaArnoldSlice + entities: + - uid: 9053 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,5.5 + pos: -29.477003,17.566315 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1544 +- proto: FoodPlateSmall + entities: + - uid: 6646 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,5.5 + pos: -3.414538,-1.2894373 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1590 + - uid: 11302 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,11.5 + pos: -2.523913,-1.3363123 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1689 + - uid: 12208 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-19.5 + pos: -10.520765,0.62183887 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1714 + - uid: 12209 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-19.5 + pos: -10.395765,-0.33128613 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1716 + - uid: 12210 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 22.5,11.5 + pos: -10.489515,1.5437138 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1724 + - uid: 12238 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,5.5 + pos: -6.5043883,-0.35773182 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1725 + - uid: 12239 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,5.5 + pos: -6.5668883,-1.2483568 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1739 + - type: Physics + angularDamping: 0 + linearDamping: 0 +- proto: FoodPoppy + entities: + - uid: 4196 components: - type: Transform - pos: -25.5,16.5 + pos: -2.270069,18.786497 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1773 + - type: Physics + angularDamping: 0 + linearDamping: 0 + - uid: 9762 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-11.5 + pos: -16.049828,-39.578854 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1781 +- proto: FoodShakerSalt + entities: + - uid: 9577 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-11.5 + pos: 29.948702,-6.58541 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 1804 + - uid: 9578 components: - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,19.5 + pos: 29.136202,-6.538535 parent: 31 - - uid: 1810 +- proto: FoodSnackChocolate + entities: + - uid: 1913 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,-12.5 + rot: 1.5707963267948966 rad + pos: 8.419368,-3.3883321 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2206 + - uid: 5636 components: - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,16.5 + rot: 1.5707963267948966 rad + pos: 8.617393,-3.3883321 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2207 +- proto: FoodTinBeans + entities: + - uid: 3485 components: - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,15.5 - parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2216 + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 3831 components: - type: Transform - pos: -9.5,-16.5 - parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2332 + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 3832 components: - type: Transform - pos: 34.5,19.5 - parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2333 + parent: 2363 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: FoodTinMRE + entities: + - uid: 7837 components: - type: Transform - pos: 34.5,18.5 + pos: -26.53067,19.803333 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2401 +- proto: Fork + entities: + - uid: 12172 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,20.5 + pos: -3.758288,-1.4300623 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2414 + - uid: 12173 components: - type: Transform - pos: 37.5,20.5 + pos: -2.867663,-1.3988123 parent: 31 - - uid: 2559 +- proto: ForkPlastic + entities: + - uid: 12212 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,18.5 + rot: 1.5707963267948966 rad + pos: -10.44264,0.24683887 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2669 + - uid: 12213 components: - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,17.5 + rot: 1.5707963267948966 rad + pos: -10.41139,1.1999638 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2741 + - uid: 12214 components: - type: Transform rot: 1.5707963267948966 rad - pos: 5.5,-19.5 + pos: -10.44264,-0.58128613 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2886 +- proto: FuelDispenser + entities: + - uid: 5080 components: - type: Transform rot: -1.5707963267948966 rad - pos: -13.5,-29.5 + pos: 20.5,0.5 parent: 31 - - uid: 2947 + - uid: 11338 components: - type: Transform rot: 3.141592653589793 rad - pos: -38.5,16.5 + pos: 31.5,-5.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2948 +- proto: FurnitureWashingmachineIndustrial + entities: + - uid: 9917 components: - type: Transform - rot: 3.141592653589793 rad - pos: -38.5,17.5 + pos: -28.5,-7.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 2950 +- proto: GasAnalyzer + entities: + - uid: 3985 components: - type: Transform - rot: 3.141592653589793 rad - pos: -38.5,14.5 + pos: -11.359732,-27.422089 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 3042 +- proto: GasFilter + entities: + - uid: 7125 components: + - type: MetaData + name: waste filter - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,9.5 + rot: -1.5707963267948966 rad + pos: 8.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3043 + color: '#A01E16FF' +- proto: GasFilterFlipped + entities: + - uid: 4431 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 25.5,9.5 + pos: 71.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3044 + color: '#990000FF' + - uid: 4432 components: - type: Transform - pos: 20.5,13.5 + rot: -1.5707963267948966 rad + pos: 68.5,6.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3045 + - uid: 4556 components: - type: Transform - pos: 22.5,11.5 + rot: -1.5707963267948966 rad + pos: 69.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3046 + color: '#990000FF' + - uid: 4559 components: - type: Transform - pos: 20.5,12.5 + rot: -1.5707963267948966 rad + pos: 67.5,6.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3047 + - uid: 6850 components: - type: Transform - pos: 22.5,12.5 + pos: 71.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3048 + color: '#990000FF' + - uid: 7367 components: - type: Transform - pos: 20.5,14.5 + rot: -1.5707963267948966 rad + pos: 38.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3049 + - uid: 8437 components: - type: Transform - pos: 22.5,13.5 + rot: -1.5707963267948966 rad + pos: 36.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3238 + color: '#990000FF' + - uid: 9086 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,24.5 + rot: -1.5707963267948966 rad + pos: 42.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3411 + - uid: 9099 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,-14.5 + pos: 40.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3590 + color: '#990000FF' + - uid: 9190 components: - type: Transform rot: -1.5707963267948966 rad - pos: 20.5,-9.5 + pos: 34.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3709 + color: '#990000FF' + - uid: 9391 components: - type: Transform - pos: 4.5,-20.5 + rot: -1.5707963267948966 rad + pos: 44.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3753 + color: '#990000FF' + - uid: 10106 components: - type: Transform - rot: 3.141592653589793 rad - pos: 36.5,17.5 + rot: -1.5707963267948966 rad + pos: 46.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3873 - components: - - type: Transform - pos: 35.5,18.5 - parent: 31 - - uid: 4024 + - uid: 10108 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,-12.5 + pos: 33.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4033 + color: '#990000FF' +- proto: GasMinerAmmonia + entities: + - uid: 6657 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-12.5 + pos: 46.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4060 +- proto: GasMinerCarbonDioxide + entities: + - uid: 6655 components: - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,16.5 + pos: 40.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4096 +- proto: GasMinerNitrogenStation + entities: + - uid: 6545 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,16.5 + pos: 34.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4135 +- proto: GasMinerNitrousOxide + entities: + - uid: 6654 components: - type: Transform - pos: -7.5,-18.5 + pos: 38.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4136 +- proto: GasMinerOxygenStation + entities: + - uid: 6538 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-16.5 + pos: 36.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4137 +- proto: GasMinerPlasma + entities: + - uid: 6656 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,-14.5 + pos: 42.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4138 +- proto: GasMixer + entities: + - uid: 3963 components: - type: Transform - pos: -8.5,-22.5 + pos: 43.5,13.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4141 + - type: GasMixer + inletTwoConcentration: 0.98 + inletOneConcentration: 0.02 + targetPressure: 1000 +- proto: GasMixerFlipped + entities: + - uid: 3484 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,-21.5 + pos: 43.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4142 + - uid: 7310 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,-21.5 + pos: 39.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4152 + - uid: 7477 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,15.5 + rot: 3.141592653589793 rad + pos: 34.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4174 + color: '#234FDEFF' + - uid: 8303 components: - type: Transform rot: -1.5707963267948966 rad - pos: 51.5,15.5 + pos: 37.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4176 + color: '#234FDEFF' + - uid: 8428 components: - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,18.5 + rot: -1.5707963267948966 rad + pos: 41.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4177 + - uid: 12141 components: - type: Transform rot: -1.5707963267948966 rad - pos: 50.5,15.5 + pos: 45.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4200 + - uid: 12142 components: - type: Transform rot: -1.5707963267948966 rad - pos: -8.5,-14.5 + pos: 47.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4236 +- proto: GasOutletInjector + entities: + - uid: 672 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,12.5 + pos: 42.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4319 + color: '#990000FF' + - uid: 2177 components: - type: Transform - pos: 20.5,16.5 + pos: 34.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4320 + - uid: 2668 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 22.5,17.5 + pos: 40.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4321 + - uid: 3461 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,17.5 + pos: 38.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4322 + - uid: 4034 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,17.5 + pos: 36.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4323 + - uid: 11045 components: - type: Transform rot: -1.5707963267948966 rad - pos: 24.5,17.5 + pos: 48.5,12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4332 + - uid: 11062 components: - type: Transform - rot: 3.141592653589793 rad - pos: 63.5,11.5 + pos: 46.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4352 + - uid: 11069 components: - type: Transform - rot: 3.141592653589793 rad - pos: 63.5,10.5 + pos: 44.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4359 +- proto: GasPassiveVent + entities: + - uid: 7 components: - type: Transform - rot: 3.141592653589793 rad - pos: 70.5,6.5 + rot: 1.5707963267948966 rad + pos: 40.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4360 + - uid: 49 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 65.5,2.5 + rot: 1.5707963267948966 rad + pos: 42.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4371 + - uid: 52 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 69.5,2.5 + rot: 1.5707963267948966 rad + pos: 38.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4387 + - uid: 127 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-14.5 + rot: 1.5707963267948966 rad + pos: 44.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4414 + - uid: 3124 components: - type: Transform - rot: 3.141592653589793 rad - pos: 71.5,8.5 + rot: 1.5707963267948966 rad + pos: 36.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4417 + - uid: 3477 components: - type: Transform rot: 1.5707963267948966 rad - pos: 65.5,9.5 + pos: 34.5,23.5 + parent: 31 + - uid: 4443 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,3.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4429 + - uid: 4477 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 70.5,7.5 + rot: 3.141592653589793 rad + pos: 67.5,3.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4439 + - uid: 4560 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-14.5 + pos: 66.5,1.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 4463 + - uid: 4641 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,25.5 + pos: 67.5,1.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 4472 + - uid: 5752 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 69.5,8.5 + rot: 1.5707963267948966 rad + pos: -15.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4475 + - uid: 6211 components: - type: Transform - pos: 30.5,21.5 + pos: 33.5,19.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4476 + - uid: 6856 components: - type: Transform - pos: 66.5,5.5 + rot: 3.141592653589793 rad + pos: 68.5,3.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4481 + - uid: 6864 components: - type: Transform - pos: 69.5,8.5 + pos: 68.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4485 + color: '#0055CCFF' + - uid: 9392 components: - type: Transform - pos: -37.5,-8.5 + pos: 48.5,19.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4535 + - uid: 11025 components: - type: Transform - pos: -37.5,-9.5 + rot: 1.5707963267948966 rad + pos: 46.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4545 + - uid: 12128 components: - type: Transform - rot: 3.141592653589793 rad - pos: 70.5,3.5 + pos: 66.5,13.5 + parent: 31 +- proto: GasPipeBend + entities: + - uid: 1 + components: + - type: Transform + pos: 39.5,23.5 + parent: 31 + - uid: 21 + components: + - type: Transform + pos: 41.5,23.5 + parent: 31 + - uid: 129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4548 + color: '#1739A6FF' + - uid: 273 components: - type: Transform rot: 3.141592653589793 rad - pos: 70.5,7.5 + pos: -6.5,29.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4551 + color: '#A01E16FF' + - uid: 644 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 67.5,9.5 + rot: -1.5707963267948966 rad + pos: 50.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4554 + color: '#00FF00FF' + - uid: 667 + components: + - type: Transform + pos: 45.5,23.5 + parent: 31 + - uid: 898 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-15.5 + pos: 43.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4570 + - uid: 954 components: - type: Transform rot: -1.5707963267948966 rad - pos: 70.5,6.5 + pos: 34.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4603 + color: '#1739A6FF' + - uid: 981 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,7.5 + pos: 10.5,24.5 parent: 31 - - uid: 4651 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 1057 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 64.5,9.5 + rot: -1.5707963267948966 rad + pos: -17.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4682 + color: '#1739A6FF' + - uid: 1250 components: - type: Transform - pos: -9.5,-15.5 + rot: -1.5707963267948966 rad + pos: 12.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4685 + color: '#1739A6FF' + - uid: 1313 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 25.5,10.5 + pos: -24.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4687 + color: '#A01E16FF' + - uid: 1634 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,11.5 + pos: -4.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4696 + color: '#1739A6FF' + - uid: 1914 components: - type: Transform - pos: -24.5,11.5 + pos: 64.5,13.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 4698 + - uid: 2417 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,25.5 + pos: 37.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4704 + - uid: 2448 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-21.5 + rot: 3.141592653589793 rad + pos: -5.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4729 + color: '#1739A6FF' + - uid: 3011 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,3.5 + pos: 35.5,23.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 4730 + - uid: 3206 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 39.5,3.5 + rot: 3.141592653589793 rad + pos: 24.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4732 + color: '#A01E16FF' + - uid: 3207 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,3.5 + pos: 24.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4737 + color: '#A01E16FF' + - uid: 3841 components: - type: Transform - pos: -24.5,9.5 + pos: -23.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4828 + color: '#A01E16FF' + - uid: 3946 components: - type: Transform rot: 3.141592653589793 rad - pos: 70.5,4.5 + pos: 55.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4833 + - uid: 4316 components: - type: Transform - pos: 62.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4845 + color: '#1739A6FF' + - uid: 4373 components: - type: Transform - pos: 30.5,23.5 + rot: 3.141592653589793 rad + pos: 62.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4847 + color: '#0055CCFF' + - uid: 4400 components: - type: Transform - pos: 30.5,20.5 + pos: 54.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4856 + - uid: 4430 components: - type: Transform - rot: 3.141592653589793 rad - pos: 40.5,20.5 + rot: 1.5707963267948966 rad + pos: 30.5,24.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4949 + - uid: 4434 components: - type: Transform - pos: 47.5,22.5 + rot: 1.5707963267948966 rad + pos: 65.5,7.5 parent: 31 - - uid: 4976 + - uid: 4435 components: - type: Transform - pos: 41.5,22.5 + pos: 68.5,4.5 parent: 31 - - uid: 5012 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4469 components: - type: Transform - pos: 45.5,18.5 + pos: 39.5,14.5 parent: 31 - - uid: 5013 + - type: AtmosPipeColor + color: '#234FDEFF' + - uid: 4482 components: - type: Transform - pos: 43.5,18.5 + pos: 31.5,19.5 parent: 31 - - uid: 5015 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4518 components: - type: Transform - pos: 43.5,19.5 + pos: -23.5,-9.5 parent: 31 - - uid: 5016 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4543 components: - type: Transform - pos: 45.5,20.5 + pos: 63.5,12.5 parent: 31 - - uid: 5030 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4553 components: - type: Transform - pos: 36.5,19.5 + rot: 1.5707963267948966 rad + pos: 71.5,10.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5031 + - uid: 4601 components: - type: Transform - pos: 36.5,18.5 + rot: -1.5707963267948966 rad + pos: 71.5,6.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5044 + - uid: 4624 components: - type: Transform - pos: 43.5,21.5 + rot: -1.5707963267948966 rad + pos: -16.5,0.5 parent: 31 - - uid: 5045 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4642 components: - type: Transform - pos: 45.5,21.5 + rot: 3.141592653589793 rad + pos: -40.5,-4.5 parent: 31 - - uid: 5046 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4649 components: - type: Transform - pos: 43.5,20.5 + pos: 55.5,2.5 parent: 31 - - uid: 5047 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4686 components: - type: Transform - pos: 45.5,19.5 + rot: -1.5707963267948966 rad + pos: 51.5,19.5 parent: 31 - - uid: 5048 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 4711 components: - type: Transform - pos: 41.5,19.5 + rot: 1.5707963267948966 rad + pos: -32.5,-7.5 parent: 31 - - uid: 5049 + - uid: 4788 components: - type: Transform - pos: 41.5,20.5 + pos: 55.5,23.5 parent: 31 - - uid: 5050 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4796 components: - type: Transform - pos: 41.5,21.5 + pos: 63.5,7.5 parent: 31 - - uid: 5056 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 4829 components: - type: Transform - pos: 43.5,22.5 + rot: 3.141592653589793 rad + pos: 48.5,20.5 parent: 31 - - uid: 5123 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 4846 components: - type: Transform - pos: -37.5,-10.5 + rot: 1.5707963267948966 rad + pos: 32.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5126 + - uid: 4932 + components: + - type: Transform + pos: 47.5,23.5 + parent: 31 + - uid: 4985 components: - type: Transform rot: 3.141592653589793 rad - pos: 35.5,22.5 + pos: 39.5,13.5 parent: 31 - - uid: 5133 + - type: AtmosPipeColor + color: '#234FDEFF' + - uid: 5066 components: - type: Transform - pos: 37.5,18.5 + pos: -1.5,29.5 parent: 31 - - uid: 5155 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5067 components: - type: Transform rot: 1.5707963267948966 rad - pos: 32.5,9.5 + pos: 50.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5240 + color: '#ADD8E6FF' + - uid: 5456 components: - type: Transform rot: 1.5707963267948966 rad - pos: -20.5,19.5 + pos: 15.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5308 + color: '#A01E16FF' + - uid: 5457 components: - type: Transform - pos: 48.5,18.5 + rot: 1.5707963267948966 rad + pos: 13.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5323 + color: '#1739A6FF' + - uid: 5553 components: - type: Transform - pos: 2.5,2.5 + pos: 10.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5324 + color: '#1739A6FF' + - uid: 5554 components: - type: Transform - pos: 2.5,1.5 + pos: 11.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5326 + color: '#A01E16FF' + - uid: 5582 components: - type: Transform - pos: 2.5,-0.5 + pos: 19.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5327 + color: '#1739A6FF' + - uid: 5589 components: - type: Transform - pos: 2.5,-1.5 + pos: 18.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5328 + color: '#A01E16FF' + - uid: 5627 components: - type: Transform - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 14.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5329 + color: '#1739A6FF' + - uid: 5639 components: - type: Transform - pos: 2.5,-3.5 + rot: 1.5707963267948966 rad + pos: 9.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5330 + color: '#1739A6FF' + - uid: 5640 components: - type: Transform - pos: 2.5,-4.5 + rot: 1.5707963267948966 rad + pos: 8.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5331 + color: '#A01E16FF' + - uid: 5682 components: - type: Transform - pos: 2.5,-5.5 + rot: -1.5707963267948966 rad + pos: 15.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5333 + color: '#1739A6FF' + - uid: 5683 components: - type: Transform - pos: 2.5,-7.5 + rot: 1.5707963267948966 rad + pos: 14.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5334 + color: '#1739A6FF' + - uid: 5697 components: - type: Transform - pos: 2.5,-8.5 + rot: 3.141592653589793 rad + pos: 8.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5335 + color: '#1739A6FF' + - uid: 5702 components: - type: Transform - pos: 2.5,-9.5 + pos: 7.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5336 + color: '#1739A6FF' + - uid: 5703 components: - type: Transform - pos: 2.5,-10.5 + rot: 3.141592653589793 rad + pos: 7.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5337 + color: '#1739A6FF' + - uid: 5722 components: - type: Transform - pos: 2.5,-11.5 + rot: 3.141592653589793 rad + pos: -36.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5338 + color: '#1739A6FF' + - uid: 5724 components: - type: Transform - pos: 2.5,-12.5 + rot: -1.5707963267948966 rad + pos: -11.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5339 + - uid: 5778 components: - type: Transform - pos: 2.5,-13.5 + rot: 3.141592653589793 rad + pos: 14.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5340 + color: '#1739A6FF' + - uid: 5779 components: - type: Transform - pos: 2.5,-14.5 + pos: 15.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5341 + color: '#1739A6FF' + - uid: 5783 components: - type: Transform - pos: 2.5,-15.5 + rot: 1.5707963267948966 rad + pos: -22.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5343 + color: '#1739A6FF' + - uid: 5892 components: - type: Transform - pos: 2.5,-17.5 + rot: 3.141592653589793 rad + pos: -4.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5344 + color: '#1739A6FF' + - uid: 5896 components: - type: Transform - pos: 2.5,-18.5 + rot: 1.5707963267948966 rad + pos: -18.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5346 + color: '#1739A6FF' + - uid: 5897 components: - type: Transform - pos: 2.5,-20.5 + rot: -1.5707963267948966 rad + pos: -18.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5347 + color: '#1739A6FF' + - uid: 5944 components: - type: Transform - pos: 2.5,-21.5 + pos: 8.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5348 + color: '#1739A6FF' + - uid: 5971 components: - type: Transform - pos: 2.5,-22.5 + pos: -5.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5350 + color: '#A01E16FF' + - uid: 5991 components: - type: Transform - pos: 2.5,-24.5 + pos: -4.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5351 + color: '#1739A6FF' + - uid: 6001 components: - type: Transform - pos: 2.5,-25.5 + rot: 1.5707963267948966 rad + pos: -8.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5352 + color: '#A01E16FF' + - uid: 6016 components: - type: Transform - pos: 2.5,-26.5 + rot: 3.141592653589793 rad + pos: -5.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5353 + color: '#1739A6FF' + - uid: 6025 components: - type: Transform - pos: 2.5,-27.5 + pos: -11.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5355 + color: '#1739A6FF' + - uid: 6026 components: - type: Transform - pos: 4.5,4.5 + rot: 3.141592653589793 rad + pos: -12.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5356 + color: '#1739A6FF' + - uid: 6096 components: - type: Transform - pos: 4.5,3.5 + rot: 3.141592653589793 rad + pos: 7.5,-17.5 + parent: 31 + - uid: 6106 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5357 + color: '#A01E16FF' + - uid: 6166 components: - type: Transform - pos: 4.5,2.5 + rot: 1.5707963267948966 rad + pos: 45.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5358 + color: '#00FF00FF' + - uid: 6214 components: - type: Transform - pos: 4.5,1.5 + rot: 1.5707963267948966 rad + pos: 20.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5359 + color: '#A01E16FF' + - uid: 6228 components: - type: Transform - pos: 4.5,0.5 + rot: 3.141592653589793 rad + pos: 44.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5360 + color: '#1739A6FF' + - uid: 6265 components: - type: Transform - pos: 4.5,-0.5 + rot: 3.141592653589793 rad + pos: 38.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5362 + color: '#A01E16FF' + - uid: 6266 components: - type: Transform - pos: 4.5,-2.5 + pos: 39.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5363 + color: '#A01E16FF' + - uid: 6274 components: - type: Transform - pos: 4.5,-3.5 + rot: 3.141592653589793 rad + pos: 37.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5364 + color: '#1739A6FF' + - uid: 6540 components: - type: Transform - pos: 4.5,-4.5 + rot: 1.5707963267948966 rad + pos: 43.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5366 + color: '#A01E16FF' + - uid: 6578 components: - type: Transform - pos: 4.5,-6.5 + rot: 1.5707963267948966 rad + pos: 44.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5367 + color: '#1739A6FF' + - uid: 6580 components: - type: Transform - pos: 4.5,-7.5 + rot: 1.5707963267948966 rad + pos: -17.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5368 + color: '#1739A6FF' + - uid: 6632 components: - type: Transform - pos: 4.5,-8.5 + rot: 1.5707963267948966 rad + pos: -22.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5369 + color: '#A01E16FF' + - uid: 6753 components: - type: Transform - pos: 4.5,-9.5 + pos: 70.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5370 + color: '#A01E16FF' + - uid: 6762 components: - type: Transform - pos: 4.5,-10.5 + pos: 67.5,7.5 + parent: 31 + - uid: 6764 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5371 + color: '#990000FF' + - uid: 6846 components: - type: Transform - pos: 4.5,-11.5 + rot: 3.141592653589793 rad + pos: 63.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5372 + color: '#990000FF' + - uid: 6867 components: - type: Transform - pos: 4.5,-12.5 + rot: -1.5707963267948966 rad + pos: 32.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5373 + color: '#990000FF' + - uid: 6927 components: - type: Transform - pos: 4.5,-13.5 + rot: 3.141592653589793 rad + pos: 54.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5375 + color: '#990000FF' + - uid: 6963 components: - type: Transform - pos: 4.5,-15.5 + rot: 3.141592653589793 rad + pos: -25.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5376 + color: '#A01E16FF' + - uid: 6983 components: - type: Transform - pos: 4.5,-16.5 + pos: -24.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5378 + color: '#1739A6FF' + - uid: 7015 components: - type: Transform - pos: 4.5,-18.5 + rot: 1.5707963267948966 rad + pos: 51.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5381 + color: '#A01E16FF' + - uid: 7068 components: - type: Transform - pos: 4.5,-21.5 + rot: 3.141592653589793 rad + pos: 45.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5382 + color: '#00FF00FF' + - uid: 7091 components: - type: Transform - pos: 4.5,-22.5 + rot: 3.141592653589793 rad + pos: 23.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5383 + color: '#1739A6FF' + - uid: 7092 components: - type: Transform - pos: 4.5,-23.5 + pos: 23.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5384 + color: '#1739A6FF' + - uid: 7183 components: - type: Transform - pos: 4.5,-24.5 + rot: 3.141592653589793 rad + pos: 55.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5385 + color: '#1739A6FF' + - uid: 7228 components: - type: Transform - pos: 4.5,-25.5 + rot: 3.141592653589793 rad + pos: 62.5,-1.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5386 + - uid: 7571 components: - type: Transform - pos: 4.5,-26.5 + rot: 1.5707963267948966 rad + pos: 2.5,32.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5387 + color: '#A01E16FF' + - uid: 7638 components: - type: Transform - pos: 4.5,-27.5 + rot: 3.141592653589793 rad + pos: 57.5,14.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5388 + - uid: 7726 components: - type: Transform - pos: 4.5,-28.5 + rot: 3.141592653589793 rad + pos: -37.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5389 + color: '#A01E16FF' + - uid: 8110 components: - type: Transform rot: -1.5707963267948966 rad - pos: 7.5,5.5 + pos: 9.5,-17.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5390 + - uid: 8267 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,5.5 + rot: 1.5707963267948966 rad + pos: 69.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5391 + color: '#A01E16FF' + - uid: 8304 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,5.5 + pos: 70.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5393 + color: '#A01E16FF' + - uid: 8426 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,3.5 + pos: 57.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5394 + color: '#0055CCFF' + - uid: 8427 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,3.5 + rot: 3.141592653589793 rad + pos: 62.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5395 + color: '#0055CCFF' + - uid: 8430 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,3.5 + pos: 62.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5398 + color: '#0055CCFF' + - uid: 8458 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,3.5 + pos: 59.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5400 + - uid: 8459 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 10.5,3.5 + rot: 3.141592653589793 rad + pos: 59.5,12.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5401 + - uid: 8479 components: - type: Transform rot: -1.5707963267948966 rad - pos: 11.5,3.5 + pos: 51.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5402 + color: '#A01E16FF' + - uid: 8523 components: - type: Transform rot: -1.5707963267948966 rad - pos: 12.5,3.5 + pos: 53.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5403 + color: '#A01E16FF' + - uid: 8704 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,3.5 + rot: 3.141592653589793 rad + pos: 47.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5404 + color: '#1739A6FF' + - uid: 8990 components: - type: Transform rot: -1.5707963267948966 rad - pos: 14.5,3.5 + pos: 48.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5406 + - uid: 9057 components: - type: Transform rot: -1.5707963267948966 rad - pos: 16.5,3.5 + pos: 64.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5407 + color: '#0055CCFF' + - uid: 9152 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,3.5 + rot: 1.5707963267948966 rad + pos: 62.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5408 + color: '#0055CCFF' + - uid: 9200 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,3.5 + rot: 1.5707963267948966 rad + pos: -37.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5409 + color: '#A01E16FF' + - uid: 9224 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,3.5 + rot: 3.141592653589793 rad + pos: -38.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5410 + color: '#A01E16FF' + - uid: 9263 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,3.5 + pos: 33.5,12.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5411 + - uid: 9353 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,5.5 + pos: -24.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5412 + color: '#1739A6FF' + - uid: 9354 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 20.5,5.5 + rot: 3.141592653589793 rad + pos: -25.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5413 + color: '#1739A6FF' + - uid: 9355 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,5.5 + rot: 1.5707963267948966 rad + pos: -25.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5414 + color: '#1739A6FF' + - uid: 9919 components: - type: Transform rot: -1.5707963267948966 rad - pos: 18.5,5.5 + pos: 69.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5415 + color: '#A01E16FF' + - uid: 9937 components: - type: Transform rot: -1.5707963267948966 rad - pos: 17.5,5.5 + pos: 68.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5416 + color: '#A01E16FF' + - uid: 9939 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,5.5 + rot: 1.5707963267948966 rad + pos: 68.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5417 + color: '#A01E16FF' + - uid: 10103 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,5.5 + rot: 1.5707963267948966 rad + pos: 34.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5418 + - uid: 10381 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,5.5 + rot: 1.5707963267948966 rad + pos: 0.5,-29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5420 + color: '#1739A6FF' + - uid: 10913 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,5.5 + pos: 56.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5421 + color: '#A01E16FF' + - uid: 10955 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,5.5 + pos: 55.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5423 + color: '#1739A6FF' + - uid: 10956 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,5.5 + rot: 3.141592653589793 rad + pos: 55.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5426 + color: '#1739A6FF' + - uid: 10957 components: - type: Transform rot: 1.5707963267948966 rad - pos: 22.5,3.5 + pos: 47.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5427 + color: '#1739A6FF' + - uid: 11047 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 23.5,3.5 + rot: 3.141592653589793 rad + pos: -1.5,28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5428 + color: '#A01E16FF' + - uid: 11050 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,3.5 + pos: 50.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5429 + color: '#00FF00FF' + - uid: 11112 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 25.5,3.5 + rot: -1.5707963267948966 rad + pos: 50.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5431 + color: '#00FF00FF' + - uid: 11115 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 27.5,3.5 + rot: -1.5707963267948966 rad + pos: 49.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5432 + color: '#00FF00FF' + - uid: 11128 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 28.5,3.5 + pos: 51.5,26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5433 + color: '#ADD8E6FF' + - uid: 11130 components: - type: Transform rot: 1.5707963267948966 rad - pos: 29.5,3.5 + pos: 48.5,26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5434 + color: '#ADD8E6FF' + - uid: 11320 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,3.5 + pos: -25.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5435 + color: '#A01E16FF' + - uid: 11567 components: - type: Transform rot: 1.5707963267948966 rad - pos: 31.5,3.5 + pos: -23.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5436 + color: '#1739A6FF' + - uid: 11573 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,5.5 + rot: -1.5707963267948966 rad + pos: -22.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5437 + color: '#A01E16FF' + - uid: 11590 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,5.5 + rot: 3.141592653589793 rad + pos: -23.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5438 + color: '#1739A6FF' + - uid: 11591 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 29.5,5.5 + pos: -22.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5440 + color: '#1739A6FF' + - uid: 11603 components: - type: Transform rot: 1.5707963267948966 rad - pos: 27.5,5.5 + pos: -31.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5441 + color: '#1739A6FF' + - uid: 11604 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 26.5,5.5 + rot: -1.5707963267948966 rad + pos: -31.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5442 + color: '#1739A6FF' + - uid: 11605 components: - type: Transform rot: 1.5707963267948966 rad - pos: 25.5,5.5 + pos: -30.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5443 + color: '#A01E16FF' + - uid: 11633 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 24.5,5.5 + pos: -26.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5444 + color: '#1739A6FF' + - uid: 11658 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 23.5,5.5 + rot: 3.141592653589793 rad + pos: -24.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5445 + color: '#A01E16FF' + - uid: 11661 components: - type: Transform - pos: 13.5,6.5 + rot: 3.141592653589793 rad + pos: -26.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5446 + color: '#1739A6FF' + - uid: 11797 components: - type: Transform - pos: 13.5,7.5 + pos: 75.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5447 + color: '#990000FF' + - uid: 11799 components: - type: Transform - pos: 13.5,8.5 + pos: 76.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5448 + color: '#990000FF' + - uid: 11800 components: - type: Transform - pos: 13.5,9.5 + rot: -1.5707963267948966 rad + pos: 76.5,3.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5449 + - uid: 11806 components: - type: Transform - pos: 15.5,4.5 + rot: 1.5707963267948966 rad + pos: 73.5,8.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5450 + - uid: 11810 components: - type: Transform - pos: 15.5,5.5 + rot: 1.5707963267948966 rad + pos: 72.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5451 + color: '#0055CCFF' + - uid: 11861 components: - type: Transform - pos: 15.5,6.5 + rot: 3.141592653589793 rad + pos: 50.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5452 + color: '#A01E16FF' + - uid: 11864 components: - type: Transform - pos: 15.5,7.5 + rot: -1.5707963267948966 rad + pos: 48.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5453 + color: '#1739A6FF' + - uid: 11865 components: - type: Transform - pos: 15.5,8.5 + rot: -1.5707963267948966 rad + pos: 72.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5454 + color: '#0055CCFF' + - uid: 11866 components: - type: Transform - pos: 15.5,9.5 + rot: 1.5707963267948966 rad + pos: 71.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5455 + color: '#0055CCFF' + - uid: 11867 components: - type: Transform - pos: 15.5,10.5 + rot: -1.5707963267948966 rad + pos: 71.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5460 + color: '#0055CCFF' + - uid: 11868 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 15.5,10.5 + rot: 1.5707963267948966 rad + pos: 70.5,-0.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5461 + - uid: 11869 components: - type: Transform rot: -1.5707963267948966 rad - pos: 16.5,10.5 + pos: 70.5,-1.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5462 + - uid: 11882 components: - type: Transform rot: -1.5707963267948966 rad - pos: 17.5,10.5 + pos: 68.5,0.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5463 + - uid: 11907 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,10.5 + pos: 51.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5466 + color: '#A01E16FF' + - uid: 11908 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,10.5 + rot: 1.5707963267948966 rad + pos: 47.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5467 + color: '#1739A6FF' + - uid: 12046 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,11.5 + rot: 3.141592653589793 rad + pos: 47.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5468 + color: '#1739A6FF' + - uid: 12063 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,11.5 + pos: 48.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5469 + color: '#1739A6FF' + - uid: 12064 components: - type: Transform rot: -1.5707963267948966 rad - pos: 17.5,11.5 + pos: 51.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5475 + color: '#A01E16FF' + - uid: 12066 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,6.5 + rot: 1.5707963267948966 rad + pos: 50.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5480 + color: '#A01E16FF' + - uid: 12152 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,10.5 + rot: 3.141592653589793 rad + pos: 32.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5482 + color: '#990000FF' + - uid: 12154 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,0.5 + pos: 32.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5483 + - uid: 12248 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,0.5 + rot: 3.141592653589793 rad + pos: 33.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5484 + color: '#0055CCFF' + - uid: 12250 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,0.5 + rot: 3.141592653589793 rad + pos: 32.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5485 + color: '#0055CCFF' + - uid: 12580 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,0.5 + rot: 3.141592653589793 rad + pos: 31.5,13.5 + parent: 31 +- proto: GasPipeBroken + entities: + - uid: 1352 + components: + - type: Transform + pos: 34.5,14.5 + parent: 31 +- proto: GasPipeFourway + entities: + - uid: 583 + components: + - type: Transform + pos: -7.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5486 + color: '#A01E16FF' + - uid: 5321 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,0.5 + pos: 2.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5487 + color: '#A01E16FF' + - uid: 5322 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,0.5 + pos: 4.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5489 + color: '#1739A6FF' + - uid: 5325 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,0.5 + pos: 4.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5490 + color: '#1739A6FF' + - uid: 5361 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-1.5 + pos: 2.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5492 + color: '#A01E16FF' + - uid: 5813 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-1.5 + pos: 2.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5493 + color: '#A01E16FF' + - uid: 5823 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-1.5 + pos: 4.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5494 + color: '#1739A6FF' + - uid: 5828 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-1.5 + pos: 4.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5497 + color: '#1739A6FF' + - uid: 5952 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,0.5 + pos: 32.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5498 + color: '#1739A6FF' + - uid: 5953 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,0.5 + pos: 33.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5499 + color: '#A01E16FF' + - uid: 6144 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,0.5 + pos: -35.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5501 + color: '#1739A6FF' + - uid: 6150 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,0.5 + pos: -36.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5502 + color: '#A01E16FF' + - uid: 6444 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,0.5 + pos: 33.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5503 + color: '#A01E16FF' + - uid: 7414 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,0.5 + pos: 2.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5504 + color: '#A01E16FF' + - uid: 9083 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,0.5 + pos: 49.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5505 + color: '#00FF00FF' + - uid: 11407 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,0.5 + pos: -37.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5506 + color: '#A01E16FF' + - uid: 11798 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,0.5 + pos: 75.5,8.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5507 +- proto: GasPipeHalf + entities: + - uid: 3678 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,0.5 + rot: -1.5707963267948966 rad + pos: 69.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5508 +- proto: GasPipeStraight + entities: + - uid: 57 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,0.5 + pos: 8.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5509 + color: '#1739A6FF' + - uid: 109 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,0.5 + pos: 39.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5510 + - uid: 110 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,0.5 + pos: 39.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5511 + - uid: 111 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-1.5 + pos: 41.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5512 + - uid: 115 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,-1.5 + pos: 11.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5513 + color: '#1739A6FF' + - uid: 132 components: - type: Transform rot: 1.5707963267948966 rad - pos: 1.5,-1.5 + pos: 36.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5514 + color: '#A01E16FF' + - uid: 159 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-1.5 + pos: 39.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5515 + - uid: 249 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-1.5 + rot: -1.5707963267948966 rad + pos: -28.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5517 + color: '#1739A6FF' + - uid: 328 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-1.5 + rot: -1.5707963267948966 rad + pos: -3.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5518 + color: '#1739A6FF' + - uid: 354 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,-1.5 + rot: -1.5707963267948966 rad + pos: -6.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5519 + color: '#1739A6FF' + - uid: 415 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-1.5 + rot: -1.5707963267948966 rad + pos: -14.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5520 + - uid: 462 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-1.5 + rot: -1.5707963267948966 rad + pos: 3.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5521 + color: '#1739A6FF' + - uid: 467 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,-1.5 + pos: 45.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5522 + - uid: 561 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,-1.5 + rot: 3.141592653589793 rad + pos: 35.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5523 + - uid: 602 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,-1.5 + rot: 3.141592653589793 rad + pos: 42.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5524 + color: '#990000FF' + - uid: 660 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-1.5 + rot: 3.141592653589793 rad + pos: 50.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5525 + color: '#A01E16FF' + - uid: 715 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-1.5 + pos: 37.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5526 + - uid: 750 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,-1.5 + pos: -24.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5529 + color: '#1739A6FF' + - uid: 773 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,0.5 + rot: 3.141592653589793 rad + pos: 40.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5530 + - uid: 784 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,0.5 + pos: 50.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5531 + color: '#A01E16FF' + - uid: 789 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,0.5 + rot: 3.141592653589793 rad + pos: 38.5,20.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5532 + - uid: 800 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,0.5 + pos: -9.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5533 + color: '#1739A6FF' + - uid: 813 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,0.5 + pos: 39.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5534 + - uid: 822 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,0.5 + rot: 3.141592653589793 rad + pos: 40.5,19.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5535 + - uid: 840 components: - type: Transform rot: 3.141592653589793 rad - pos: -16.5,1.5 + pos: -26.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5536 + color: '#A01E16FF' + - uid: 844 components: - type: Transform rot: 3.141592653589793 rad - pos: -16.5,0.5 + pos: -27.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5537 + color: '#1739A6FF' + - uid: 899 components: - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,-0.5 + pos: -4.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5539 + color: '#1739A6FF' + - uid: 925 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,5.5 + rot: 3.141592653589793 rad + pos: 44.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5540 + color: '#990000FF' + - uid: 928 components: - type: Transform rot: 1.5707963267948966 rad - pos: -26.5,5.5 + pos: -5.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5548 + color: '#A01E16FF' + - uid: 978 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-4.5 + rot: 3.141592653589793 rad + pos: 38.5,19.5 parent: 31 - - uid: 5549 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 980 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-4.5 + rot: 1.5707963267948966 rad + pos: 9.5,25.5 parent: 31 - - uid: 5550 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 991 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,-4.5 + rot: 3.141592653589793 rad + pos: 42.5,18.5 parent: 31 - - uid: 5555 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 1067 components: - type: Transform - pos: 10.5,-2.5 + rot: 3.141592653589793 rad + pos: 44.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5556 + color: '#990000FF' + - uid: 1086 components: - type: Transform - pos: 10.5,-3.5 + pos: -9.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5557 + color: '#1739A6FF' + - uid: 1093 components: - type: Transform - pos: 10.5,-4.5 + pos: -9.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5558 + color: '#1739A6FF' + - uid: 1165 components: - type: Transform - pos: 10.5,-5.5 + rot: 1.5707963267948966 rad + pos: 8.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5559 + color: '#1739A6FF' + - uid: 1188 components: - type: Transform - pos: 10.5,-6.5 + pos: 51.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5560 + color: '#ADD8E6FF' + - uid: 1210 components: - type: Transform - pos: 10.5,-7.5 + rot: 3.141592653589793 rad + pos: 47.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5561 + color: '#1739A6FF' + - uid: 1238 components: - type: Transform - pos: 11.5,-0.5 + pos: -24.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5562 + color: '#1739A6FF' + - uid: 1289 components: - type: Transform - pos: 11.5,-1.5 + rot: -1.5707963267948966 rad + pos: 32.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5563 + color: '#A01E16FF' + - uid: 1320 components: - type: Transform - pos: 11.5,-2.5 + rot: 3.141592653589793 rad + pos: 53.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5564 + color: '#A01E16FF' + - uid: 1470 components: - type: Transform - pos: 11.5,-3.5 + rot: 1.5707963267948966 rad + pos: -6.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5565 + color: '#A01E16FF' + - uid: 1473 components: - type: Transform - pos: 11.5,-4.5 + pos: -9.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5566 + color: '#1739A6FF' + - uid: 1486 components: - type: Transform - pos: 11.5,-5.5 + rot: -1.5707963267948966 rad + pos: -6.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5567 + color: '#1739A6FF' + - uid: 1487 components: - type: Transform - pos: 11.5,-6.5 + rot: -1.5707963267948966 rad + pos: -21.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5568 + color: '#1739A6FF' + - uid: 1490 components: - type: Transform - pos: 11.5,-7.5 + pos: -7.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5569 + color: '#A01E16FF' + - uid: 1514 components: - type: Transform - pos: 11.5,-8.5 + rot: 3.141592653589793 rad + pos: 35.5,21.5 + parent: 31 + - uid: 1515 + components: + - type: Transform + pos: 33.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5570 + - uid: 1516 components: - type: Transform - pos: 11.5,-9.5 + pos: 36.5,20.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5573 + - uid: 1533 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,-8.5 + pos: 39.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5575 + - uid: 1543 components: - type: Transform rot: 1.5707963267948966 rad - pos: 13.5,-8.5 + pos: 36.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5576 + color: '#1739A6FF' + - uid: 1544 components: - type: Transform rot: 1.5707963267948966 rad - pos: 14.5,-8.5 + pos: 38.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5578 + color: '#1739A6FF' + - uid: 1590 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-10.5 + rot: 3.141592653589793 rad + pos: 4.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5580 + color: '#1739A6FF' + - uid: 1689 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,-10.5 + rot: -1.5707963267948966 rad + pos: -4.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5581 + color: '#A01E16FF' + - uid: 1714 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,-8.5 + rot: -1.5707963267948966 rad + pos: -6.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5583 + color: '#A01E16FF' + - uid: 1716 components: - type: Transform - pos: 17.5,-9.5 + rot: 1.5707963267948966 rad + pos: 22.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5585 + color: '#A01E16FF' + - uid: 1724 components: - type: Transform rot: 1.5707963267948966 rad - pos: 13.5,-10.5 + pos: 35.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5588 + color: '#1739A6FF' + - uid: 1725 components: - type: Transform rot: 1.5707963267948966 rad - pos: 17.5,-8.5 + pos: 33.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5590 + color: '#1739A6FF' + - uid: 1739 components: - type: Transform - pos: 17.5,-8.5 + pos: -25.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5591 + color: '#1739A6FF' + - uid: 1773 components: - type: Transform - pos: 17.5,-7.5 + rot: -1.5707963267948966 rad + pos: -22.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5593 + color: '#A01E16FF' + - uid: 1781 components: - type: Transform - pos: 17.5,-5.5 + rot: -1.5707963267948966 rad + pos: -21.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5594 + color: '#A01E16FF' + - uid: 1804 components: - type: Transform - pos: 17.5,-4.5 + rot: 3.141592653589793 rad + pos: 35.5,19.5 + parent: 31 + - uid: 1810 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5595 + color: '#1739A6FF' + - uid: 1885 components: - type: Transform - pos: 17.5,-3.5 + rot: -1.5707963267948966 rad + pos: -1.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5596 + color: '#1739A6FF' + - uid: 1957 components: - type: Transform - pos: 17.5,-2.5 + rot: -1.5707963267948966 rad + pos: 0.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5598 + color: '#1739A6FF' + - uid: 1959 components: - type: Transform - pos: 16.5,-7.5 + rot: -1.5707963267948966 rad + pos: -0.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5599 + color: '#1739A6FF' + - uid: 2003 components: - type: Transform - pos: 16.5,-6.5 + pos: -24.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5601 + color: '#A01E16FF' + - uid: 2007 components: - type: Transform - pos: 16.5,-4.5 + rot: 1.5707963267948966 rad + pos: -23.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5602 + color: '#A01E16FF' + - uid: 2206 components: - type: Transform - pos: 16.5,-3.5 + rot: 3.141592653589793 rad + pos: -36.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5603 + color: '#1739A6FF' + - uid: 2207 components: - type: Transform - pos: 16.5,-2.5 + rot: 3.141592653589793 rad + pos: -36.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5604 + color: '#1739A6FF' + - uid: 2216 components: - type: Transform - pos: 16.5,-1.5 + pos: -9.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5608 + color: '#1739A6FF' + - uid: 2332 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,3.5 + pos: 34.5,19.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5612 + - uid: 2333 components: - type: Transform - pos: 18.5,-12.5 + pos: 34.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5613 + - uid: 2401 components: - type: Transform - pos: 18.5,-13.5 + rot: 3.141592653589793 rad + pos: 42.5,20.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5615 + - uid: 2414 components: - type: Transform - pos: 19.5,-10.5 + pos: 37.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5616 + - uid: 2559 components: - type: Transform - pos: 19.5,-11.5 + rot: 3.141592653589793 rad + pos: 44.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5617 + color: '#990000FF' + - uid: 2669 components: - type: Transform - pos: 19.5,-12.5 + rot: 3.141592653589793 rad + pos: -36.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5618 + color: '#1739A6FF' + - uid: 2709 components: - type: Transform - pos: 19.5,-13.5 + rot: 3.141592653589793 rad + pos: 53.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5619 + color: '#A01E16FF' + - uid: 2741 components: - type: Transform - pos: 19.5,-14.5 + rot: 1.5707963267948966 rad + pos: 5.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5620 + color: '#1739A6FF' + - uid: 2753 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-14.5 + rot: 3.141592653589793 rad + pos: 47.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5621 + color: '#1739A6FF' + - uid: 2775 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,-14.5 + rot: 1.5707963267948966 rad + pos: -8.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5622 + color: '#1739A6FF' + - uid: 2886 components: - type: Transform rot: -1.5707963267948966 rad - pos: 15.5,-14.5 + pos: -13.5,-29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5623 + - uid: 2947 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,-15.5 + rot: 3.141592653589793 rad + pos: -38.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5624 + color: '#A01E16FF' + - uid: 2948 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-15.5 + rot: 3.141592653589793 rad + pos: -38.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5625 + color: '#A01E16FF' + - uid: 2950 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,-15.5 + rot: 3.141592653589793 rad + pos: -38.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5641 + color: '#A01E16FF' + - uid: 3042 components: - type: Transform rot: 1.5707963267948966 rad - pos: 10.5,-10.5 + pos: 24.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5642 + color: '#1739A6FF' + - uid: 3043 components: - type: Transform rot: 1.5707963267948966 rad - pos: 9.5,-10.5 + pos: 25.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5643 + color: '#1739A6FF' + - uid: 3044 components: - type: Transform - pos: 9.5,-9.5 + pos: 20.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5644 + color: '#A01E16FF' + - uid: 3045 components: - type: Transform - pos: 9.5,-10.5 + pos: 22.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5645 + color: '#1739A6FF' + - uid: 3046 components: - type: Transform - pos: 9.5,-11.5 + pos: 20.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5646 + color: '#A01E16FF' + - uid: 3047 components: - type: Transform - pos: 9.5,-12.5 + pos: 22.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5647 + color: '#1739A6FF' + - uid: 3048 components: - type: Transform - pos: 9.5,-13.5 + pos: 20.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5649 + color: '#A01E16FF' + - uid: 3049 components: - type: Transform - pos: 8.5,-14.5 + pos: 22.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5651 + color: '#1739A6FF' + - uid: 3238 components: - type: Transform - pos: 8.5,-12.5 + rot: 1.5707963267948966 rad + pos: 9.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5652 + color: '#A01E16FF' + - uid: 3374 components: - type: Transform - pos: 8.5,-11.5 + pos: -27.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5654 + color: '#1739A6FF' + - uid: 3411 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,5.5 + rot: -1.5707963267948966 rad + pos: -5.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5655 + color: '#1739A6FF' + - uid: 3586 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,-5.5 + rot: 3.141592653589793 rad + pos: -22.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5656 + color: '#1739A6FF' + - uid: 3590 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,-5.5 + rot: -1.5707963267948966 rad + pos: 20.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5657 + color: '#1739A6FF' + - uid: 3709 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,-5.5 + pos: 4.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5658 + color: '#1739A6FF' + - uid: 3727 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,-5.5 + rot: 3.141592653589793 rad + pos: 50.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5659 + color: '#00FF00FF' + - uid: 3736 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,-5.5 + rot: 3.141592653589793 rad + pos: 4.5,26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5660 + color: '#1739A6FF' + - uid: 3753 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 22.5,-5.5 + rot: 3.141592653589793 rad + pos: 36.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5661 + color: '#990000FF' + - uid: 3780 components: - type: Transform rot: 1.5707963267948966 rad - pos: 18.5,-6.5 + pos: 48.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5662 + color: '#00FF00FF' + - uid: 3803 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,-6.5 + pos: -32.5,-8.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5663 + - uid: 3827 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,-6.5 + pos: 51.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5664 + color: '#ADD8E6FF' + - uid: 3873 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 21.5,-6.5 + pos: 35.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5667 + - uid: 3888 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,3.5 + pos: 51.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5668 + color: '#ADD8E6FF' + - uid: 3922 components: - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,-15.5 + pos: 2.5,31.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5669 + color: '#A01E16FF' + - uid: 4024 components: - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,-16.5 + rot: -1.5707963267948966 rad + pos: -22.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5670 + color: '#1739A6FF' + - uid: 4033 components: - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,-17.5 + rot: -1.5707963267948966 rad + pos: -23.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5673 + color: '#1739A6FF' + - uid: 4060 components: - type: Transform rot: 3.141592653589793 rad - pos: 19.5,-16.5 + pos: 35.5,16.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5676 + - uid: 4096 components: - type: Transform - pos: -12.5,-2.5 + rot: -1.5707963267948966 rad + pos: 47.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5681 + color: '#990000FF' + - uid: 4135 components: - type: Transform - pos: 15.5,-16.5 + pos: -7.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5684 + color: '#A01E16FF' + - uid: 4136 components: - type: Transform - pos: 14.5,-18.5 + rot: 1.5707963267948966 rad + pos: -4.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5685 + color: '#A01E16FF' + - uid: 4137 components: - type: Transform - pos: 14.5,-19.5 + rot: -1.5707963267948966 rad + pos: -7.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5687 + color: '#1739A6FF' + - uid: 4138 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-20.5 + pos: -8.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5688 + color: '#1739A6FF' + - uid: 4141 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-20.5 + pos: -7.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5689 + color: '#1739A6FF' + - uid: 4142 components: - type: Transform rot: -1.5707963267948966 rad - pos: 11.5,-20.5 + pos: -5.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5690 + color: '#1739A6FF' + - uid: 4152 components: - type: Transform rot: -1.5707963267948966 rad - pos: 12.5,-20.5 + pos: 49.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5691 + - uid: 4174 components: - type: Transform rot: -1.5707963267948966 rad - pos: 13.5,-20.5 + pos: 51.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5693 + - uid: 4176 components: - type: Transform - pos: 8.5,-21.5 + rot: 3.141592653589793 rad + pos: 38.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5694 + color: '#990000FF' + - uid: 4177 components: - type: Transform - pos: 8.5,-22.5 + rot: -1.5707963267948966 rad + pos: 50.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5695 + - uid: 4200 components: - type: Transform - pos: 8.5,-23.5 + rot: -1.5707963267948966 rad + pos: -8.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5696 + color: '#1739A6FF' + - uid: 4236 components: - type: Transform - pos: 8.5,-24.5 + rot: 3.141592653589793 rad + pos: -5.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5699 + color: '#1739A6FF' + - uid: 4319 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-19.5 + pos: 20.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5716 + color: '#A01E16FF' + - uid: 4320 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-14.5 + rot: -1.5707963267948966 rad + pos: 22.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5717 + color: '#A01E16FF' + - uid: 4321 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-14.5 + rot: -1.5707963267948966 rad + pos: 23.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5718 + color: '#A01E16FF' + - uid: 4322 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-14.5 + rot: -1.5707963267948966 rad + pos: 21.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5723 + color: '#A01E16FF' + - uid: 4323 components: - type: Transform rot: -1.5707963267948966 rad - pos: 1.5,-16.5 + pos: 24.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5762 + color: '#A01E16FF' + - uid: 4332 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,25.5 + rot: 3.141592653589793 rad + pos: 63.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5768 + color: '#990000FF' + - uid: 4336 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,11.5 + pos: 2.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5774 + color: '#A01E16FF' + - uid: 4352 components: - type: Transform rot: 3.141592653589793 rad - pos: 14.5,-21.5 + pos: 63.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5775 + color: '#990000FF' + - uid: 4359 components: - type: Transform rot: 3.141592653589793 rad - pos: 14.5,-22.5 + pos: 70.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5776 + color: '#A01E16FF' + - uid: 4360 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-23.5 + rot: -1.5707963267948966 rad + pos: 65.5,2.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5777 + - uid: 4378 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-24.5 + pos: -27.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5780 + color: '#1739A6FF' + - uid: 4387 components: - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,-26.5 + rot: -1.5707963267948966 rad + pos: -3.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5781 + color: '#1739A6FF' + - uid: 4414 components: - type: Transform rot: 3.141592653589793 rad - pos: 15.5,-27.5 + pos: 71.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5786 + color: '#990000FF' + - uid: 4417 components: - type: Transform rot: 1.5707963267948966 rad - pos: 3.5,-23.5 + pos: 65.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5787 + - uid: 4429 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,-23.5 + rot: -1.5707963267948966 rad + pos: 70.5,7.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5788 + - uid: 4439 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,-23.5 + rot: -1.5707963267948966 rad + pos: -4.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5789 + color: '#1739A6FF' + - uid: 4463 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-23.5 + rot: -1.5707963267948966 rad + pos: -6.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5790 + color: '#1739A6FF' + - uid: 4472 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-23.5 + rot: -1.5707963267948966 rad + pos: 69.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5791 + color: '#A01E16FF' + - uid: 4475 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-23.5 + pos: 30.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5793 + - uid: 4476 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,4.5 + pos: 66.5,5.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5794 + - uid: 4481 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,5.5 + pos: 69.5,8.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5795 + - uid: 4485 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,6.5 + pos: -37.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5796 + color: '#A01E16FF' + - uid: 4535 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,7.5 + pos: -37.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5797 + color: '#A01E16FF' + - uid: 4548 components: - type: Transform rot: 3.141592653589793 rad - pos: 2.5,8.5 + pos: 70.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5798 + color: '#A01E16FF' + - uid: 4551 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,9.5 + rot: 1.5707963267948966 rad + pos: 67.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5799 + - uid: 4554 components: - type: Transform rot: 3.141592653589793 rad - pos: 2.5,10.5 + pos: 8.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5800 + color: '#A01E16FF' + - uid: 4570 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,11.5 + rot: -1.5707963267948966 rad + pos: 70.5,6.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5802 + - uid: 4595 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,13.5 + pos: 50.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5803 + color: '#A01E16FF' + - uid: 4603 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,14.5 + rot: 1.5707963267948966 rad + pos: 66.5,7.5 + parent: 31 + - uid: 4625 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5804 + color: '#1739A6FF' + - uid: 4651 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,15.5 + rot: 1.5707963267948966 rad + pos: 64.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5805 + - uid: 4682 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,16.5 + pos: -9.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5808 + color: '#1739A6FF' + - uid: 4684 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,19.5 + rot: 1.5707963267948966 rad + pos: 38.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5809 + color: '#234FDEFF' + - uid: 4685 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,20.5 + rot: 1.5707963267948966 rad + pos: 25.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5810 + color: '#A01E16FF' + - uid: 4687 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,21.5 + rot: -1.5707963267948966 rad + pos: 23.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5811 + color: '#A01E16FF' + - uid: 4696 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,22.5 + pos: -24.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5814 + color: '#1739A6FF' + - uid: 4698 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,25.5 + rot: -1.5707963267948966 rad + pos: -7.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5815 + color: '#1739A6FF' + - uid: 4704 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,26.5 + rot: -1.5707963267948966 rad + pos: -4.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5816 + color: '#1739A6FF' + - uid: 4729 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,27.5 + rot: 1.5707963267948966 rad + pos: 40.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5817 + color: '#A01E16FF' + - uid: 4730 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,28.5 + rot: 1.5707963267948966 rad + pos: 39.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5818 + color: '#A01E16FF' + - uid: 4732 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,29.5 + rot: 1.5707963267948966 rad + pos: 37.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5819 + color: '#A01E16FF' + - uid: 4737 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,29.5 + pos: -24.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5820 + color: '#1739A6FF' + - uid: 4833 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,28.5 + pos: 62.5,5.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5821 + - uid: 4845 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,27.5 + pos: 30.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5824 + color: '#990000FF' + - uid: 4847 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,24.5 + pos: 30.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5825 + color: '#990000FF' + - uid: 4856 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,23.5 + pos: 40.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5826 + color: '#990000FF' + - uid: 4858 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,22.5 + rot: -1.5707963267948966 rad + pos: -6.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5827 + color: '#1739A6FF' + - uid: 4949 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,21.5 + pos: 47.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5830 + - uid: 4976 components: - type: Transform - pos: 4.5,18.5 + pos: 41.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5831 + - uid: 4977 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,17.5 + rot: 1.5707963267948966 rad + pos: 47.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5832 + color: '#00FF00FF' + - uid: 4981 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,16.5 + rot: 1.5707963267948966 rad + pos: 46.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5833 + color: '#00FF00FF' + - uid: 4984 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,15.5 + rot: 1.5707963267948966 rad + pos: 48.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5836 + color: '#00FF00FF' + - uid: 4986 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,12.5 + pos: 69.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5838 + color: '#A01E16FF' + - uid: 4987 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,10.5 + rot: -1.5707963267948966 rad + pos: -4.5,29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5839 + color: '#A01E16FF' + - uid: 5012 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,9.5 + pos: 45.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5840 + - uid: 5013 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,8.5 + pos: 43.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5841 + - uid: 5015 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,7.5 + pos: 43.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5842 + - uid: 5016 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,6.5 + pos: 45.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5843 + - uid: 5030 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,5.5 + pos: 36.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5844 + color: '#990000FF' + - uid: 5031 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,5.5 + pos: 36.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5845 + color: '#990000FF' + - uid: 5044 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,5.5 + pos: 43.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5846 + - uid: 5045 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,3.5 + pos: 45.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5847 + - uid: 5046 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,3.5 + pos: 43.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5850 + - uid: 5047 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,24.5 + pos: 45.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5851 + - uid: 5048 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,24.5 + pos: 41.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5852 + - uid: 5049 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,24.5 + pos: 41.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5853 + - uid: 5050 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,24.5 + pos: 41.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 5854 + - uid: 5056 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,25.5 + pos: 43.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5855 + - uid: 5061 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,25.5 + pos: 1.5,28.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5857 + color: '#A01E16FF' + - uid: 5123 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,25.5 + pos: -37.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5858 + color: '#A01E16FF' + - uid: 5126 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,25.5 + rot: 3.141592653589793 rad + pos: 35.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5859 + - uid: 5133 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,25.5 + pos: 37.5,18.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5860 + - uid: 5155 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,25.5 + rot: 1.5707963267948966 rad + pos: 32.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5861 + color: '#A01E16FF' + - uid: 5240 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,24.5 + rot: 1.5707963267948966 rad + pos: -20.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5862 + color: '#1739A6FF' + - uid: 5308 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,24.5 + pos: 48.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5863 + - uid: 5323 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,24.5 + pos: 2.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5866 + color: '#A01E16FF' + - uid: 5324 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,24.5 + pos: 2.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5872 + color: '#A01E16FF' + - uid: 5326 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,17.5 + pos: 2.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5873 + color: '#A01E16FF' + - uid: 5327 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,17.5 + pos: 2.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5874 + color: '#A01E16FF' + - uid: 5328 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,17.5 + pos: 2.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5875 + color: '#A01E16FF' + - uid: 5329 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,17.5 + pos: 2.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5876 + color: '#A01E16FF' + - uid: 5330 components: - type: Transform - pos: 8.5,19.5 + pos: 2.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5877 + color: '#A01E16FF' + - uid: 5331 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,17.5 + pos: 2.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5878 + color: '#A01E16FF' + - uid: 5333 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,20.5 + pos: 2.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5879 + color: '#A01E16FF' + - uid: 5334 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,20.5 + pos: 2.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5880 + color: '#A01E16FF' + - uid: 5335 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,20.5 + pos: 2.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5884 + color: '#A01E16FF' + - uid: 5336 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,20.5 + pos: 2.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5885 + color: '#A01E16FF' + - uid: 5337 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,20.5 + pos: 2.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5886 + color: '#A01E16FF' + - uid: 5338 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,20.5 + pos: 2.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5887 + color: '#A01E16FF' + - uid: 5339 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,20.5 + pos: 2.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5888 + color: '#A01E16FF' + - uid: 5340 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,20.5 + pos: 2.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5889 + color: '#A01E16FF' + - uid: 5341 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,20.5 + pos: 2.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5890 + color: '#A01E16FF' + - uid: 5343 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,20.5 + pos: 2.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5891 + color: '#A01E16FF' + - uid: 5344 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,20.5 + pos: 2.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5899 + color: '#A01E16FF' + - uid: 5346 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,19.5 + pos: 2.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5900 + color: '#A01E16FF' + - uid: 5347 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,19.5 + pos: 2.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5901 + color: '#A01E16FF' + - uid: 5348 components: - type: Transform - pos: -18.5,20.5 + pos: 2.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5902 + color: '#A01E16FF' + - uid: 5350 components: - type: Transform - pos: -18.5,21.5 + pos: 2.5,-24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5903 + color: '#A01E16FF' + - uid: 5351 components: - type: Transform - pos: -18.5,22.5 + pos: 2.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5904 + color: '#A01E16FF' + - uid: 5352 components: - type: Transform - pos: -18.5,23.5 + pos: 2.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5905 + color: '#A01E16FF' + - uid: 5353 components: - type: Transform - pos: -18.5,24.5 + pos: 2.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5906 + color: '#A01E16FF' + - uid: 5355 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,25.5 + pos: 4.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5907 + color: '#1739A6FF' + - uid: 5356 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,25.5 + pos: 4.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5908 + color: '#1739A6FF' + - uid: 5357 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,25.5 + pos: 4.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5909 + color: '#1739A6FF' + - uid: 5358 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,25.5 + pos: 4.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5910 + color: '#1739A6FF' + - uid: 5359 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,25.5 + pos: 4.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5911 + color: '#1739A6FF' + - uid: 5360 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,25.5 + pos: 4.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5912 + color: '#1739A6FF' + - uid: 5362 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,25.5 + pos: 4.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5913 + color: '#1739A6FF' + - uid: 5363 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,25.5 + pos: 4.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5914 + color: '#1739A6FF' + - uid: 5364 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,25.5 + pos: 4.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5915 + color: '#1739A6FF' + - uid: 5366 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,25.5 + pos: 4.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5918 + color: '#1739A6FF' + - uid: 5367 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,23.5 + pos: 4.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5919 + color: '#1739A6FF' + - uid: 5368 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,22.5 + pos: 4.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5920 + color: '#1739A6FF' + - uid: 5369 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,20.5 + pos: 4.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5921 + color: '#1739A6FF' + - uid: 5370 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,21.5 + pos: 4.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5922 + color: '#1739A6FF' + - uid: 5371 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,21.5 + pos: 4.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5923 + color: '#1739A6FF' + - uid: 5372 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,22.5 + pos: 4.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5930 + color: '#1739A6FF' + - uid: 5373 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 5.5,14.5 + pos: 4.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5931 + color: '#1739A6FF' + - uid: 5375 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,14.5 + pos: 4.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5932 + color: '#1739A6FF' + - uid: 5376 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,14.5 + pos: 4.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5933 + color: '#1739A6FF' + - uid: 5378 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,14.5 + pos: 4.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5934 + color: '#1739A6FF' + - uid: 5381 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,14.5 + pos: 4.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5935 + color: '#1739A6FF' + - uid: 5382 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,14.5 + pos: 4.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5936 + color: '#1739A6FF' + - uid: 5383 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 11.5,14.5 + pos: 4.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5937 + color: '#1739A6FF' + - uid: 5384 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,14.5 + pos: 4.5,-24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5942 + color: '#1739A6FF' + - uid: 5385 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,7.5 + pos: 4.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5943 + color: '#1739A6FF' + - uid: 5386 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,8.5 + pos: 4.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5945 + color: '#1739A6FF' + - uid: 5387 components: - type: Transform - pos: 9.5,4.5 + pos: 4.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5946 + color: '#1739A6FF' + - uid: 5388 components: - type: Transform - pos: 9.5,5.5 + pos: 4.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5947 + color: '#1739A6FF' + - uid: 5389 components: - type: Transform - pos: 9.5,6.5 + rot: -1.5707963267948966 rad + pos: 7.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5948 + color: '#1739A6FF' + - uid: 5390 components: - type: Transform - pos: 9.5,7.5 + rot: -1.5707963267948966 rad + pos: 6.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5949 + color: '#1739A6FF' + - uid: 5391 components: - type: Transform - pos: 9.5,8.5 + rot: -1.5707963267948966 rad + pos: 5.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5954 + color: '#1739A6FF' + - uid: 5393 components: - type: Transform rot: -1.5707963267948966 rad - pos: -0.5,3.5 + pos: 4.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5956 + color: '#A01E16FF' + - uid: 5394 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,3.5 + pos: 5.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5957 + color: '#A01E16FF' + - uid: 5395 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,3.5 + pos: 6.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5958 + color: '#A01E16FF' + - uid: 5398 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,3.5 + pos: 8.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5959 + color: '#A01E16FF' + - uid: 5400 components: - type: Transform rot: -1.5707963267948966 rad - pos: -0.5,5.5 + pos: 10.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5961 + color: '#A01E16FF' + - uid: 5401 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,5.5 + pos: 11.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5962 + color: '#A01E16FF' + - uid: 5402 components: - type: Transform rot: -1.5707963267948966 rad - pos: -1.5,5.5 + pos: 12.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5965 + color: '#A01E16FF' + - uid: 5403 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,4.5 + rot: -1.5707963267948966 rad + pos: 13.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5966 + color: '#A01E16FF' + - uid: 5404 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,5.5 + rot: -1.5707963267948966 rad + pos: 14.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5967 + color: '#A01E16FF' + - uid: 5406 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,6.5 + rot: -1.5707963267948966 rad + pos: 16.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5968 + color: '#A01E16FF' + - uid: 5407 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,7.5 + rot: -1.5707963267948966 rad + pos: 17.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5970 + color: '#A01E16FF' + - uid: 5408 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,9.5 + rot: -1.5707963267948966 rad + pos: 18.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5972 + color: '#A01E16FF' + - uid: 5409 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,6.5 + rot: -1.5707963267948966 rad + pos: 19.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5974 + color: '#A01E16FF' + - uid: 5410 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,8.5 + rot: -1.5707963267948966 rad + pos: 20.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5975 + color: '#A01E16FF' + - uid: 5411 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,9.5 + rot: -1.5707963267948966 rad + pos: 21.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5984 + color: '#1739A6FF' + - uid: 5412 components: - type: Transform rot: -1.5707963267948966 rad - pos: -6.5,10.5 + pos: 20.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5985 + color: '#1739A6FF' + - uid: 5413 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,10.5 + rot: -1.5707963267948966 rad + pos: 19.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5986 + color: '#1739A6FF' + - uid: 5414 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,11.5 + rot: -1.5707963267948966 rad + pos: 18.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5987 + color: '#1739A6FF' + - uid: 5415 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,12.5 + rot: -1.5707963267948966 rad + pos: 17.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5990 + color: '#1739A6FF' + - uid: 5416 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,13.5 + rot: -1.5707963267948966 rad + pos: 16.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5995 + color: '#1739A6FF' + - uid: 5417 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,15.5 + rot: -1.5707963267948966 rad + pos: 15.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5996 + color: '#1739A6FF' + - uid: 5418 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,16.5 + rot: -1.5707963267948966 rad + pos: 14.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5997 + color: '#1739A6FF' + - uid: 5420 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,17.5 + rot: -1.5707963267948966 rad + pos: 12.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5998 + color: '#1739A6FF' + - uid: 5421 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,18.5 + rot: -1.5707963267948966 rad + pos: 11.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5999 + color: '#1739A6FF' + - uid: 5423 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,19.5 + rot: -1.5707963267948966 rad + pos: 9.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6002 + color: '#1739A6FF' + - uid: 5426 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,16.5 + rot: 1.5707963267948966 rad + pos: 22.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6003 + color: '#A01E16FF' + - uid: 5427 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,17.5 + rot: 1.5707963267948966 rad + pos: 23.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6004 + color: '#A01E16FF' + - uid: 5428 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,18.5 + rot: 1.5707963267948966 rad + pos: 24.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6005 + color: '#A01E16FF' + - uid: 5429 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,19.5 + rot: 1.5707963267948966 rad + pos: 25.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6006 + color: '#A01E16FF' + - uid: 5431 components: - type: Transform rot: 1.5707963267948966 rad - pos: -6.5,15.5 + pos: 27.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6007 + color: '#A01E16FF' + - uid: 5432 components: - type: Transform rot: 1.5707963267948966 rad - pos: -8.5,15.5 + pos: 28.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6008 + color: '#A01E16FF' + - uid: 5433 components: - type: Transform rot: 1.5707963267948966 rad - pos: -9.5,15.5 + pos: 29.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6009 + color: '#A01E16FF' + - uid: 5434 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,15.5 + pos: 30.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6011 + color: '#A01E16FF' + - uid: 5435 components: - type: Transform rot: 1.5707963267948966 rad - pos: -9.5,14.5 + pos: 31.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6012 + color: '#A01E16FF' + - uid: 5436 components: - type: Transform rot: 1.5707963267948966 rad - pos: -11.5,14.5 + pos: 31.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6013 + color: '#1739A6FF' + - uid: 5437 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,14.5 + pos: 30.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6014 + color: '#1739A6FF' + - uid: 5438 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,14.5 + rot: 1.5707963267948966 rad + pos: 29.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6027 + color: '#1739A6FF' + - uid: 5440 components: - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,17.5 + rot: 1.5707963267948966 rad + pos: 27.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6028 + color: '#1739A6FF' + - uid: 5441 components: - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,18.5 + rot: 1.5707963267948966 rad + pos: 26.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6029 + color: '#1739A6FF' + - uid: 5442 components: - type: Transform rot: 1.5707963267948966 rad - pos: -9.5,20.5 + pos: 25.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6030 + color: '#1739A6FF' + - uid: 5443 components: - type: Transform rot: 1.5707963267948966 rad - pos: -11.5,20.5 + pos: 24.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6031 + color: '#1739A6FF' + - uid: 5444 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,20.5 + pos: 23.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6034 + color: '#1739A6FF' + - uid: 5445 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,8.5 + pos: 13.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6035 + color: '#1739A6FF' + - uid: 5446 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,8.5 + pos: 13.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6036 + color: '#1739A6FF' + - uid: 5447 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,8.5 + pos: 13.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6037 + color: '#1739A6FF' + - uid: 5448 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,8.5 + pos: 13.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6038 + color: '#1739A6FF' + - uid: 5449 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,7.5 + pos: 15.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6039 + color: '#A01E16FF' + - uid: 5450 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,7.5 + pos: 15.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6040 + color: '#A01E16FF' + - uid: 5451 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,7.5 + pos: 15.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6045 + color: '#A01E16FF' + - uid: 5452 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,5.5 + pos: 15.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6046 + color: '#A01E16FF' + - uid: 5453 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,5.5 + pos: 15.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6047 + color: '#A01E16FF' + - uid: 5454 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,5.5 + pos: 15.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6048 + color: '#A01E16FF' + - uid: 5455 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,5.5 + pos: 15.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6049 + color: '#A01E16FF' + - uid: 5460 components: - type: Transform rot: -1.5707963267948966 rad - pos: -9.5,5.5 + pos: 15.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6052 + color: '#1739A6FF' + - uid: 5461 components: - type: Transform rot: -1.5707963267948966 rad - pos: -12.5,5.5 + pos: 16.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6053 + color: '#1739A6FF' + - uid: 5462 components: - type: Transform rot: -1.5707963267948966 rad - pos: -13.5,5.5 + pos: 17.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6054 + color: '#1739A6FF' + - uid: 5463 components: - type: Transform rot: -1.5707963267948966 rad - pos: -14.5,5.5 + pos: 18.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6055 + color: '#1739A6FF' + - uid: 5466 components: - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,5.5 + pos: 19.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6056 + color: '#1739A6FF' + - uid: 5467 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,5.5 + rot: -1.5707963267948966 rad + pos: 19.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6057 + color: '#A01E16FF' + - uid: 5468 components: - type: Transform rot: -1.5707963267948966 rad - pos: -17.5,5.5 + pos: 18.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6058 + color: '#A01E16FF' + - uid: 5469 components: - type: Transform rot: -1.5707963267948966 rad - pos: -18.5,5.5 + pos: 17.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6059 + color: '#A01E16FF' + - uid: 5475 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,5.5 + rot: 3.141592653589793 rad + pos: 8.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6060 + color: '#1739A6FF' + - uid: 5480 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,5.5 + rot: 1.5707963267948966 rad + pos: 21.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6061 + color: '#1739A6FF' + - uid: 5482 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,5.5 + rot: 1.5707963267948966 rad + pos: 3.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6062 + color: '#A01E16FF' + - uid: 5483 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,5.5 + rot: 1.5707963267948966 rad + pos: 4.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6063 + color: '#A01E16FF' + - uid: 5484 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,3.5 + rot: 1.5707963267948966 rad + pos: 5.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6064 + color: '#A01E16FF' + - uid: 5485 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,3.5 + rot: 1.5707963267948966 rad + pos: 6.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6065 + color: '#A01E16FF' + - uid: 5486 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,3.5 + rot: 1.5707963267948966 rad + pos: 7.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6066 + color: '#A01E16FF' + - uid: 5487 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,3.5 + rot: 1.5707963267948966 rad + pos: 8.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6067 + color: '#A01E16FF' + - uid: 5489 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,3.5 + rot: 1.5707963267948966 rad + pos: 10.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6068 + color: '#A01E16FF' + - uid: 5490 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,3.5 + rot: 1.5707963267948966 rad + pos: 9.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6069 + color: '#1739A6FF' + - uid: 5492 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,3.5 + rot: 1.5707963267948966 rad + pos: 7.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6070 + color: '#1739A6FF' + - uid: 5493 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,3.5 + rot: 1.5707963267948966 rad + pos: 6.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6072 + color: '#1739A6FF' + - uid: 5494 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,3.5 + rot: 1.5707963267948966 rad + pos: 5.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6073 + color: '#1739A6FF' + - uid: 5497 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,3.5 + rot: 1.5707963267948966 rad + pos: -11.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6074 + color: '#A01E16FF' + - uid: 5498 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,3.5 + rot: 1.5707963267948966 rad + pos: -10.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6075 + color: '#A01E16FF' + - uid: 5499 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,3.5 + rot: 1.5707963267948966 rad + pos: -9.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6076 + color: '#A01E16FF' + - uid: 5501 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,3.5 + rot: 1.5707963267948966 rad + pos: -7.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6077 + color: '#A01E16FF' + - uid: 5502 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,3.5 + rot: 1.5707963267948966 rad + pos: -6.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6078 + color: '#A01E16FF' + - uid: 5503 components: - type: Transform rot: -1.5707963267948966 rad - pos: -21.5,3.5 + pos: -5.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6081 + color: '#A01E16FF' + - uid: 5504 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,5.5 + pos: -4.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6085 + color: '#A01E16FF' + - uid: 5505 components: - type: Transform - pos: -24.5,4.5 + rot: 1.5707963267948966 rad + pos: -3.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6086 + color: '#A01E16FF' + - uid: 5506 components: - type: Transform - pos: -24.5,3.5 + rot: 1.5707963267948966 rad + pos: -2.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6087 + color: '#A01E16FF' + - uid: 5507 components: - type: Transform - pos: -24.5,2.5 + rot: 1.5707963267948966 rad + pos: -1.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6088 + color: '#A01E16FF' + - uid: 5508 components: - type: Transform - pos: -24.5,1.5 + rot: 1.5707963267948966 rad + pos: -0.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6089 + color: '#A01E16FF' + - uid: 5509 components: - type: Transform - pos: -24.5,0.5 + rot: 1.5707963267948966 rad + pos: 0.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6090 + color: '#A01E16FF' + - uid: 5510 components: - type: Transform - pos: -24.5,-0.5 + rot: 1.5707963267948966 rad + pos: 1.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6091 + color: '#A01E16FF' + - uid: 5511 components: - type: Transform - pos: -24.5,-1.5 + rot: 1.5707963267948966 rad + pos: 3.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6092 + color: '#1739A6FF' + - uid: 5512 components: - type: Transform - pos: -16.5,4.5 + rot: 1.5707963267948966 rad + pos: 2.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6093 + color: '#1739A6FF' + - uid: 5513 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,6.5 + rot: 1.5707963267948966 rad + pos: 1.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6094 + color: '#1739A6FF' + - uid: 5514 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,7.5 + rot: 1.5707963267948966 rad + pos: 0.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6097 + color: '#1739A6FF' + - uid: 5515 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,9.5 + rot: 1.5707963267948966 rad + pos: -0.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6102 + color: '#1739A6FF' + - uid: 5517 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,9.5 + rot: 1.5707963267948966 rad + pos: -2.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6103 + color: '#1739A6FF' + - uid: 5518 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,9.5 + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6104 + color: '#1739A6FF' + - uid: 5519 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,8.5 + rot: 1.5707963267948966 rad + pos: -4.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6105 + color: '#1739A6FF' + - uid: 5520 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,8.5 + rot: 1.5707963267948966 rad + pos: -5.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6107 + color: '#1739A6FF' + - uid: 5521 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,8.5 + rot: 1.5707963267948966 rad + pos: -6.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6108 + color: '#1739A6FF' + - uid: 5522 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,7.5 + rot: 1.5707963267948966 rad + pos: -7.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6109 + color: '#1739A6FF' + - uid: 5523 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,6.5 + rot: 1.5707963267948966 rad + pos: -8.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6110 + color: '#1739A6FF' + - uid: 5524 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,5.5 + rot: 1.5707963267948966 rad + pos: -9.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6111 + color: '#1739A6FF' + - uid: 5525 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,4.5 + rot: 1.5707963267948966 rad + pos: -10.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6113 + color: '#1739A6FF' + - uid: 5526 components: - type: Transform - pos: -16.5,3.5 + rot: 1.5707963267948966 rad + pos: -11.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6121 + color: '#1739A6FF' + - uid: 5529 components: - type: Transform - pos: -23.5,2.5 + rot: -1.5707963267948966 rad + pos: -12.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6122 + color: '#A01E16FF' + - uid: 5530 components: - type: Transform - pos: -23.5,1.5 + rot: -1.5707963267948966 rad + pos: -14.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6123 + color: '#A01E16FF' + - uid: 5531 components: - type: Transform - pos: -23.5,0.5 + rot: -1.5707963267948966 rad + pos: -15.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6124 + color: '#A01E16FF' + - uid: 5540 components: - type: Transform - pos: -23.5,-0.5 + rot: 1.5707963267948966 rad + pos: -26.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6125 + color: '#1739A6FF' + - uid: 5555 components: - type: Transform - pos: -23.5,-1.5 + pos: 10.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6126 + color: '#1739A6FF' + - uid: 5556 components: - type: Transform - pos: -23.5,-2.5 + pos: 10.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6128 + color: '#1739A6FF' + - uid: 5557 components: - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,2.5 + pos: 10.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6131 + color: '#1739A6FF' + - uid: 5558 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,3.5 + pos: 10.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6132 + color: '#1739A6FF' + - uid: 5559 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,3.5 + pos: 10.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6133 + color: '#1739A6FF' + - uid: 5560 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,3.5 + pos: 10.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6134 + color: '#1739A6FF' + - uid: 5561 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,3.5 + pos: 11.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6139 + color: '#A01E16FF' + - uid: 5562 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -30.5,5.5 + pos: 11.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6140 + color: '#A01E16FF' + - uid: 5563 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -31.5,5.5 + pos: 11.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6142 + color: '#A01E16FF' + - uid: 5564 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -33.5,5.5 + pos: 11.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6143 + color: '#A01E16FF' + - uid: 5565 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -34.5,5.5 + pos: 11.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6145 + color: '#A01E16FF' + - uid: 5566 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -31.5,3.5 + pos: 11.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6146 + color: '#A01E16FF' + - uid: 5567 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,3.5 + pos: 11.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6147 + color: '#A01E16FF' + - uid: 5568 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -33.5,3.5 + pos: 11.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6148 + color: '#A01E16FF' + - uid: 5569 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -34.5,3.5 + pos: 11.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6149 + color: '#A01E16FF' + - uid: 5570 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -35.5,3.5 + pos: 11.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6153 + color: '#A01E16FF' + - uid: 5573 components: - type: Transform - pos: -35.5,4.5 + rot: 1.5707963267948966 rad + pos: 11.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6154 + color: '#1739A6FF' + - uid: 5575 components: - type: Transform - pos: -35.5,3.5 + rot: 1.5707963267948966 rad + pos: 13.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6155 + color: '#1739A6FF' + - uid: 5576 components: - type: Transform - pos: -35.5,2.5 + rot: 1.5707963267948966 rad + pos: 14.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6156 + color: '#1739A6FF' + - uid: 5578 components: - type: Transform - pos: -35.5,1.5 + rot: 1.5707963267948966 rad + pos: 14.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6157 + color: '#A01E16FF' + - uid: 5580 components: - type: Transform - pos: -35.5,0.5 + rot: 1.5707963267948966 rad + pos: 16.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6158 + color: '#A01E16FF' + - uid: 5581 components: - type: Transform - pos: -35.5,-0.5 + rot: 1.5707963267948966 rad + pos: 18.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6159 + color: '#1739A6FF' + - uid: 5583 components: - type: Transform - pos: -35.5,-1.5 + pos: 17.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6160 + color: '#A01E16FF' + - uid: 5585 components: - type: Transform - pos: -35.5,-2.5 + rot: 1.5707963267948966 rad + pos: 13.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6161 + color: '#A01E16FF' + - uid: 5588 components: - type: Transform - pos: -35.5,-3.5 + rot: 1.5707963267948966 rad + pos: 17.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6162 + color: '#1739A6FF' + - uid: 5590 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -39.5,-5.5 + pos: 17.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6163 + color: '#A01E16FF' + - uid: 5591 components: - type: Transform - pos: -35.5,-5.5 + pos: 17.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6164 + color: '#A01E16FF' + - uid: 5593 components: - type: Transform - pos: -36.5,2.5 + pos: 17.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6165 + color: '#A01E16FF' + - uid: 5594 components: - type: Transform - pos: -36.5,1.5 + pos: 17.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6167 + color: '#A01E16FF' + - uid: 5595 components: - type: Transform - pos: -25.5,15.5 + pos: 17.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6170 + color: '#A01E16FF' + - uid: 5596 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,3.5 + pos: 17.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6171 + color: '#A01E16FF' + - uid: 5598 components: - type: Transform - pos: 32.5,6.5 + pos: 16.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6172 + color: '#1739A6FF' + - uid: 5599 components: - type: Transform - pos: 32.5,7.5 + pos: 16.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6173 + color: '#1739A6FF' + - uid: 5601 components: - type: Transform - pos: 32.5,8.5 + pos: 16.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6176 + color: '#1739A6FF' + - uid: 5602 components: - type: Transform - pos: 33.5,5.5 + pos: 16.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6177 + color: '#1739A6FF' + - uid: 5603 components: - type: Transform - pos: 33.5,4.5 + pos: 16.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6178 + color: '#1739A6FF' + - uid: 5604 components: - type: Transform - pos: 33.5,6.5 + pos: 16.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6179 + color: '#1739A6FF' + - uid: 5608 components: - type: Transform - pos: 33.5,7.5 + rot: 1.5707963267948966 rad + pos: -28.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6185 + color: '#A01E16FF' + - uid: 5612 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,3.5 + pos: 18.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6186 + color: '#A01E16FF' + - uid: 5613 components: - type: Transform - pos: 32.5,4.5 + pos: 18.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6187 + color: '#A01E16FF' + - uid: 5615 components: - type: Transform - pos: 32.5,3.5 + pos: 19.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6188 + color: '#1739A6FF' + - uid: 5616 components: - type: Transform - pos: 32.5,2.5 + pos: 19.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6189 + color: '#1739A6FF' + - uid: 5617 components: - type: Transform - pos: 32.5,1.5 + pos: 19.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6190 + color: '#1739A6FF' + - uid: 5618 components: - type: Transform - pos: 32.5,0.5 + pos: 19.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6191 + color: '#1739A6FF' + - uid: 5619 components: - type: Transform - pos: 32.5,-0.5 + pos: 19.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6192 + color: '#1739A6FF' + - uid: 5620 components: - type: Transform - pos: 32.5,-1.5 + rot: -1.5707963267948966 rad + pos: 17.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6193 + color: '#A01E16FF' + - uid: 5621 components: - type: Transform - pos: 33.5,2.5 + rot: -1.5707963267948966 rad + pos: 16.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6194 + color: '#A01E16FF' + - uid: 5622 components: - type: Transform - pos: 33.5,1.5 + rot: -1.5707963267948966 rad + pos: 15.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6195 + color: '#A01E16FF' + - uid: 5623 components: - type: Transform - pos: 33.5,0.5 + rot: -1.5707963267948966 rad + pos: 18.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6196 + color: '#1739A6FF' + - uid: 5624 components: - type: Transform - pos: 33.5,-0.5 + rot: -1.5707963267948966 rad + pos: 17.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6200 + color: '#1739A6FF' + - uid: 5625 components: - type: Transform rot: -1.5707963267948966 rad - pos: 40.5,6.5 + pos: 16.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6201 + color: '#1739A6FF' + - uid: 5641 components: - type: Transform rot: 1.5707963267948966 rad - pos: 41.5,6.5 + pos: 10.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6202 + color: '#A01E16FF' + - uid: 5642 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,6.5 + pos: 9.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6203 + color: '#A01E16FF' + - uid: 5643 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,6.5 + pos: 9.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6206 + color: '#1739A6FF' + - uid: 5644 components: - type: Transform - pos: 43.5,4.5 + pos: 9.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6207 + color: '#1739A6FF' + - uid: 5645 components: - type: Transform - pos: 43.5,5.5 + pos: 9.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6208 + color: '#1739A6FF' + - uid: 5646 components: - type: Transform - pos: 43.5,6.5 + pos: 9.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6209 + color: '#1739A6FF' + - uid: 5647 components: - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,7.5 + pos: 9.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6217 + color: '#1739A6FF' + - uid: 5649 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,5.5 + pos: 8.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6218 + color: '#A01E16FF' + - uid: 5651 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,4.5 + pos: 8.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6219 + color: '#A01E16FF' + - uid: 5652 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,3.5 + pos: 8.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6220 + color: '#A01E16FF' + - uid: 5654 components: - type: Transform rot: 1.5707963267948966 rad - pos: 44.5,3.5 + pos: -28.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6221 + color: '#1739A6FF' + - uid: 5655 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,3.5 + pos: 17.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6222 + color: '#1739A6FF' + - uid: 5656 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,3.5 + pos: 18.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6224 + color: '#1739A6FF' + - uid: 5657 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,3.5 + pos: 19.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6225 + color: '#1739A6FF' + - uid: 5658 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,2.5 + pos: 20.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6227 + color: '#1739A6FF' + - uid: 5659 components: - type: Transform rot: 1.5707963267948966 rad - pos: 47.5,2.5 + pos: 21.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6229 + color: '#1739A6FF' + - uid: 5660 components: - type: Transform - pos: 48.5,-0.5 + rot: 1.5707963267948966 rad + pos: 22.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6233 + color: '#1739A6FF' + - uid: 5661 components: - type: Transform - pos: 48.5,-1.5 + rot: 1.5707963267948966 rad + pos: 18.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6234 + color: '#A01E16FF' + - uid: 5662 components: - type: Transform - pos: 49.5,2.5 + rot: 1.5707963267948966 rad + pos: 19.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6235 + color: '#A01E16FF' + - uid: 5663 components: - type: Transform - pos: 49.5,1.5 + rot: 1.5707963267948966 rad + pos: 20.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6236 + color: '#A01E16FF' + - uid: 5664 components: - type: Transform - pos: 49.5,0.5 + rot: 1.5707963267948966 rad + pos: 21.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6237 + color: '#A01E16FF' + - uid: 5667 components: - type: Transform - pos: 49.5,-0.5 + rot: 1.5707963267948966 rad + pos: -29.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6238 + color: '#A01E16FF' + - uid: 5668 components: - type: Transform - pos: 49.5,-1.5 + rot: 3.141592653589793 rad + pos: 18.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6239 + color: '#A01E16FF' + - uid: 5669 components: - type: Transform - pos: 48.5,0.5 + rot: 3.141592653589793 rad + pos: 18.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6240 + color: '#A01E16FF' + - uid: 5670 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,3.5 + rot: 3.141592653589793 rad + pos: 18.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6247 + color: '#A01E16FF' + - uid: 5673 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,12.5 + rot: 3.141592653589793 rad + pos: 19.5,-16.5 parent: 31 - - uid: 6254 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5676 components: - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,9.5 + pos: -12.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6260 + color: '#1739A6FF' + - uid: 5681 components: - type: Transform - pos: 22.5,14.5 + pos: 15.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6263 + color: '#1739A6FF' + - uid: 5684 components: - type: Transform - pos: 38.5,2.5 + pos: 14.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6264 + color: '#1739A6FF' + - uid: 5685 components: - type: Transform - pos: 38.5,1.5 + pos: 14.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6269 + color: '#1739A6FF' + - uid: 5687 components: - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,4.5 + rot: -1.5707963267948966 rad + pos: 9.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6270 + color: '#1739A6FF' + - uid: 5688 components: - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,3.5 + rot: -1.5707963267948966 rad + pos: 10.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6271 + color: '#1739A6FF' + - uid: 5689 components: - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,2.5 + rot: -1.5707963267948966 rad + pos: 11.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6272 + color: '#1739A6FF' + - uid: 5690 components: - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,1.5 + rot: -1.5707963267948966 rad + pos: 12.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6273 + color: '#1739A6FF' + - uid: 5691 components: - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,0.5 + rot: -1.5707963267948966 rad + pos: 13.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6315 + color: '#1739A6FF' + - uid: 5693 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,10.5 + pos: 8.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6349 + color: '#1739A6FF' + - uid: 5694 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,9.5 + pos: 8.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6363 + color: '#1739A6FF' + - uid: 5695 components: - type: Transform - pos: 37.5,21.5 + pos: 8.5,-23.5 parent: 31 - - uid: 6392 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5696 components: - type: Transform - pos: 43.5,8.5 + pos: 8.5,-24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6409 + color: '#1739A6FF' + - uid: 5699 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-17.5 + rot: -1.5707963267948966 rad + pos: 6.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6411 + color: '#1739A6FF' + - uid: 5706 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,9.5 + pos: -28.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6439 + color: '#1739A6FF' + - uid: 5716 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-16.5 + rot: 1.5707963267948966 rad + pos: 3.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6465 + color: '#1739A6FF' + - uid: 5717 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-16.5 + rot: 1.5707963267948966 rad + pos: 2.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6480 + color: '#1739A6FF' + - uid: 5718 components: - type: Transform rot: 1.5707963267948966 rad - pos: -21.5,-18.5 + pos: 1.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6490 + color: '#1739A6FF' + - uid: 5723 components: - type: Transform rot: -1.5707963267948966 rad - pos: -9.5,-16.5 + pos: 1.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6534 + color: '#A01E16FF' + - uid: 5762 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,9.5 + rot: -1.5707963267948966 rad + pos: -5.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6549 + color: '#1739A6FF' + - uid: 5774 components: - type: Transform - pos: 46.5,18.5 + rot: 3.141592653589793 rad + pos: 14.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6558 + color: '#1739A6FF' + - uid: 5775 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,16.5 + pos: 14.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6559 + color: '#1739A6FF' + - uid: 5776 components: - type: Transform - pos: 44.5,7.5 + rot: 3.141592653589793 rad + pos: 14.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6562 + color: '#1739A6FF' + - uid: 5777 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,8.5 + rot: 3.141592653589793 rad + pos: 14.5,-24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6569 + color: '#1739A6FF' + - uid: 5780 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,8.5 + rot: 3.141592653589793 rad + pos: 15.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6572 + color: '#1739A6FF' + - uid: 5781 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,16.5 + rot: 3.141592653589793 rad + pos: 15.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6573 + color: '#1739A6FF' + - uid: 5786 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,16.5 + rot: 1.5707963267948966 rad + pos: 3.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6577 - components: - - type: Transform - pos: 37.5,22.5 - parent: 31 - - uid: 6579 + color: '#A01E16FF' + - uid: 5787 components: - type: Transform - pos: 34.5,21.5 + rot: 1.5707963267948966 rad + pos: 4.5,-23.5 parent: 31 - - uid: 6604 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5788 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,-16.5 + rot: 1.5707963267948966 rad + pos: 5.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6619 + color: '#A01E16FF' + - uid: 5789 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-16.5 + rot: 1.5707963267948966 rad + pos: 6.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6634 + color: '#A01E16FF' + - uid: 5790 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-16.5 + rot: 1.5707963267948966 rad + pos: 7.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6642 + color: '#A01E16FF' + - uid: 5791 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-16.5 + rot: 1.5707963267948966 rad + pos: 8.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6693 + color: '#A01E16FF' + - uid: 5793 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,-17.5 + pos: 2.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6696 + color: '#A01E16FF' + - uid: 5794 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,-16.5 + pos: 2.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6704 - components: - - type: Transform - pos: 34.5,22.5 - parent: 31 - - uid: 6712 + color: '#A01E16FF' + - uid: 5795 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6713 + color: '#A01E16FF' + - uid: 5796 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,-15.5 + pos: 2.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6714 + color: '#A01E16FF' + - uid: 5797 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6715 + color: '#A01E16FF' + - uid: 5798 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6716 + color: '#A01E16FF' + - uid: 5799 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6717 + color: '#A01E16FF' + - uid: 5800 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6718 + color: '#A01E16FF' + - uid: 5802 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6719 + color: '#A01E16FF' + - uid: 5803 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,-16.5 + rot: 3.141592653589793 rad + pos: 2.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6727 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,12.5 - parent: 31 - - uid: 6734 + color: '#A01E16FF' + - uid: 5804 components: - type: Transform - pos: 30.5,22.5 + rot: 3.141592653589793 rad + pos: 2.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6741 + color: '#A01E16FF' + - uid: 5805 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,2.5 + rot: 3.141592653589793 rad + pos: 2.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6749 + color: '#A01E16FF' + - uid: 5808 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,25.5 + rot: 3.141592653589793 rad + pos: 2.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6755 + color: '#A01E16FF' + - uid: 5809 components: - type: Transform rot: 3.141592653589793 rad - pos: 70.5,5.5 + pos: 2.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6765 + color: '#A01E16FF' + - uid: 5810 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,9.5 + rot: 3.141592653589793 rad + pos: 2.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6766 + color: '#A01E16FF' + - uid: 5811 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,9.5 + rot: 3.141592653589793 rad + pos: 2.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6830 + color: '#A01E16FF' + - uid: 5814 components: - type: Transform - pos: 68.5,8.5 + rot: 3.141592653589793 rad + pos: 2.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6842 + color: '#A01E16FF' + - uid: 5815 components: - type: Transform - pos: 68.5,7.5 + rot: 3.141592653589793 rad + pos: 2.5,26.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6895 + color: '#A01E16FF' + - uid: 5816 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,16.5 + rot: 3.141592653589793 rad + pos: 2.5,27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6896 + color: '#A01E16FF' + - uid: 5818 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 25.5,17.5 + rot: 3.141592653589793 rad + pos: 2.5,29.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6925 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5819 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,12.5 + rot: 3.141592653589793 rad + pos: 4.5,29.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6926 + color: '#1739A6FF' + - uid: 5820 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,12.5 + rot: 3.141592653589793 rad + pos: 4.5,28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6945 + color: '#1739A6FF' + - uid: 5821 components: - type: Transform - pos: 48.5,1.5 + rot: 3.141592653589793 rad + pos: 4.5,27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7072 + color: '#1739A6FF' + - uid: 5824 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,2.5 + rot: 3.141592653589793 rad + pos: 4.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7073 + color: '#1739A6FF' + - uid: 5825 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,2.5 + rot: 3.141592653589793 rad + pos: 4.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7075 + color: '#1739A6FF' + - uid: 5826 components: - type: Transform rot: 3.141592653589793 rad - pos: 33.5,10.5 + pos: 4.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7076 + color: '#1739A6FF' + - uid: 5827 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,10.5 + rot: 3.141592653589793 rad + pos: 4.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7129 + color: '#1739A6FF' + - uid: 5830 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,-8.5 + pos: 4.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7131 + color: '#1739A6FF' + - uid: 5831 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-8.5 + rot: 3.141592653589793 rad + pos: 4.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7132 + color: '#1739A6FF' + - uid: 5832 components: - type: Transform - pos: 34.5,20.5 + rot: 3.141592653589793 rad + pos: 4.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7143 + color: '#1739A6FF' + - uid: 5833 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-8.5 + rot: 3.141592653589793 rad + pos: 4.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7152 + color: '#1739A6FF' + - uid: 5836 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-8.5 + rot: 3.141592653589793 rad + pos: 4.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7156 + color: '#1739A6FF' + - uid: 5838 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -31.5,-8.5 + rot: 3.141592653589793 rad + pos: 4.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7175 + color: '#1739A6FF' + - uid: 5839 components: - type: Transform rot: 3.141592653589793 rad - pos: -32.5,-9.5 + pos: 4.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7179 + color: '#1739A6FF' + - uid: 5840 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,2.5 + rot: 3.141592653589793 rad + pos: 4.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7180 + color: '#1739A6FF' + - uid: 5841 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,2.5 + rot: 3.141592653589793 rad + pos: 4.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7182 + color: '#1739A6FF' + - uid: 5842 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,2.5 + rot: 3.141592653589793 rad + pos: 4.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7197 + color: '#1739A6FF' + - uid: 5843 components: - type: Transform - pos: 36.5,21.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 31 - - uid: 7205 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5844 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,3.5 + rot: 1.5707963267948966 rad + pos: 1.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7206 + color: '#1739A6FF' + - uid: 5845 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7207 + color: '#1739A6FF' + - uid: 5846 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7208 + color: '#A01E16FF' + - uid: 5847 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,3.5 + rot: 1.5707963267948966 rad + pos: 1.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7210 + color: '#A01E16FF' + - uid: 5850 components: - type: Transform rot: -1.5707963267948966 rad - pos: 51.5,3.5 + pos: 3.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7212 + color: '#A01E16FF' + - uid: 5851 components: - type: Transform rot: -1.5707963267948966 rad - pos: 53.5,2.5 + pos: 4.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7218 + color: '#A01E16FF' + - uid: 5852 components: - type: Transform rot: -1.5707963267948966 rad - pos: 53.5,3.5 + pos: 5.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7227 + color: '#A01E16FF' + - uid: 5853 components: - type: Transform - pos: 64.5,4.5 + rot: -1.5707963267948966 rad + pos: 6.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7257 + color: '#A01E16FF' + - uid: 5854 components: - type: Transform - rot: 3.141592653589793 rad - pos: -32.5,-10.5 + rot: -1.5707963267948966 rad + pos: 5.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7266 + color: '#1739A6FF' + - uid: 5855 components: - type: Transform - rot: 3.141592653589793 rad - pos: -32.5,-11.5 + rot: -1.5707963267948966 rad + pos: 6.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7267 + color: '#1739A6FF' + - uid: 5857 components: - type: Transform - rot: 3.141592653589793 rad - pos: -32.5,-12.5 + rot: -1.5707963267948966 rad + pos: 2.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7268 + color: '#1739A6FF' + - uid: 5858 components: - type: Transform - rot: 3.141592653589793 rad - pos: -32.5,-13.5 + rot: -1.5707963267948966 rad + pos: 1.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7270 + color: '#1739A6FF' + - uid: 5859 components: - type: Transform rot: -1.5707963267948966 rad - pos: -24.5,-8.5 + pos: 0.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7271 + color: '#1739A6FF' + - uid: 5860 components: - type: Transform rot: -1.5707963267948966 rad - pos: -25.5,-8.5 + pos: -0.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7309 + color: '#1739A6FF' + - uid: 5861 components: - type: Transform rot: -1.5707963267948966 rad - pos: 31.5,24.5 + pos: 1.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7311 + color: '#A01E16FF' + - uid: 5862 components: - type: Transform rot: -1.5707963267948966 rad - pos: 44.5,25.5 + pos: 0.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7312 + color: '#A01E16FF' + - uid: 5863 components: - type: Transform rot: -1.5707963267948966 rad - pos: 42.5,25.5 + pos: -0.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7346 + color: '#A01E16FF' + - uid: 5866 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,-0.5 + rot: 1.5707963267948966 rad + pos: 8.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7382 + color: '#A01E16FF' + - uid: 5872 components: - type: Transform - rot: 3.141592653589793 rad - pos: 40.5,17.5 + rot: 1.5707963267948966 rad + pos: 3.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7413 + color: '#A01E16FF' + - uid: 5873 components: - type: Transform - pos: 2.5,-19.5 + rot: 1.5707963267948966 rad + pos: 4.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7419 + color: '#A01E16FF' + - uid: 5874 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -32.5,5.5 + rot: 1.5707963267948966 rad + pos: 5.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7458 + color: '#A01E16FF' + - uid: 5875 components: - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,16.5 + rot: 1.5707963267948966 rad + pos: 6.5,17.5 parent: 31 - - uid: 7464 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5876 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,16.5 + pos: 8.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7470 + color: '#1739A6FF' + - uid: 5877 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-2.5 + rot: 1.5707963267948966 rad + pos: 8.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7557 + color: '#A01E16FF' + - uid: 5878 components: - type: Transform - pos: -24.5,13.5 + rot: 1.5707963267948966 rad + pos: 5.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7693 + color: '#1739A6FF' + - uid: 5879 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,25.5 + rot: 1.5707963267948966 rad + pos: 6.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7727 + color: '#1739A6FF' + - uid: 5880 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,4.5 + rot: 1.5707963267948966 rad + pos: 7.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7728 + color: '#1739A6FF' + - uid: 5884 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,5.5 + rot: -1.5707963267948966 rad + pos: 3.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7729 + color: '#1739A6FF' + - uid: 5885 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,6.5 + rot: -1.5707963267948966 rad + pos: 2.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7730 + color: '#1739A6FF' + - uid: 5886 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,6.5 + rot: -1.5707963267948966 rad + pos: 1.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7731 + color: '#1739A6FF' + - uid: 5887 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,7.5 + rot: -1.5707963267948966 rad + pos: 0.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7732 + color: '#1739A6FF' + - uid: 5888 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,8.5 + rot: -1.5707963267948966 rad + pos: -0.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7733 + color: '#1739A6FF' + - uid: 5889 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,9.5 + rot: -1.5707963267948966 rad + pos: -1.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7734 + color: '#1739A6FF' + - uid: 5890 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,10.5 + rot: -1.5707963267948966 rad + pos: -2.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7735 + color: '#1739A6FF' + - uid: 5891 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,11.5 + rot: -1.5707963267948966 rad + pos: -3.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7736 + color: '#1739A6FF' + - uid: 5899 components: - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,12.5 + rot: 1.5707963267948966 rad + pos: -21.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7738 + color: '#1739A6FF' + - uid: 5900 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,7.5 + rot: 1.5707963267948966 rad + pos: -19.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7739 + color: '#1739A6FF' + - uid: 5901 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,8.5 + pos: -18.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7740 + color: '#1739A6FF' + - uid: 5902 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,9.5 + pos: -18.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7741 + color: '#1739A6FF' + - uid: 5903 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,10.5 + pos: -18.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7742 + color: '#1739A6FF' + - uid: 5904 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,11.5 + pos: -18.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7743 + color: '#1739A6FF' + - uid: 5905 components: - type: Transform - rot: 3.141592653589793 rad - pos: -37.5,12.5 + pos: -18.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7801 + color: '#1739A6FF' + - uid: 5906 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,-19.5 + pos: -17.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7817 + color: '#1739A6FF' + - uid: 5907 components: - type: Transform rot: -1.5707963267948966 rad - pos: 51.5,25.5 + pos: -16.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7825 + color: '#1739A6FF' + - uid: 5908 components: - type: Transform rot: -1.5707963267948966 rad - pos: 33.5,25.5 + pos: -15.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7828 + color: '#1739A6FF' + - uid: 5909 components: - type: Transform rot: -1.5707963267948966 rad - pos: 47.5,25.5 + pos: -14.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7829 + color: '#1739A6FF' + - uid: 5910 components: - type: Transform rot: -1.5707963267948966 rad - pos: 45.5,25.5 + pos: -13.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7834 + color: '#1739A6FF' + - uid: 5911 components: - type: Transform - rot: 3.141592653589793 rad - pos: 64.5,11.5 + rot: -1.5707963267948966 rad + pos: -12.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8049 + color: '#1739A6FF' + - uid: 5912 components: - type: Transform rot: -1.5707963267948966 rad - pos: 43.5,25.5 + pos: -11.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8089 + color: '#1739A6FF' + - uid: 5913 components: - type: Transform - pos: 62.5,4.5 + rot: -1.5707963267948966 rad + pos: -10.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8210 + color: '#1739A6FF' + - uid: 5914 components: - type: Transform - rot: 3.141592653589793 rad - pos: 64.5,12.5 + rot: -1.5707963267948966 rad + pos: -9.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8214 + color: '#1739A6FF' + - uid: 5915 components: - type: Transform - pos: 31.5,18.5 + rot: -1.5707963267948966 rad + pos: -8.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8415 + color: '#1739A6FF' + - uid: 5918 components: - type: Transform - pos: 7.5,18.5 + rot: 3.141592653589793 rad + pos: -4.5,23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8429 + color: '#1739A6FF' + - uid: 5919 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,15.5 + pos: -4.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8431 + color: '#1739A6FF' + - uid: 5920 components: - type: Transform - pos: 64.5,5.5 + rot: 3.141592653589793 rad + pos: -22.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8433 + color: '#1739A6FF' + - uid: 5921 components: - type: Transform - pos: 64.5,9.5 + rot: 3.141592653589793 rad + pos: -4.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8470 + color: '#1739A6FF' + - uid: 5922 components: - type: Transform rot: 3.141592653589793 rad - pos: 54.5,24.5 + pos: -22.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8494 + color: '#1739A6FF' + - uid: 5923 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,25.5 + rot: 3.141592653589793 rad + pos: -22.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8505 + color: '#1739A6FF' + - uid: 5930 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,25.5 + rot: 1.5707963267948966 rad + pos: 5.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8516 + color: '#1739A6FF' + - uid: 5931 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,25.5 + rot: 1.5707963267948966 rad + pos: 7.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8521 + color: '#1739A6FF' + - uid: 5932 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 53.5,25.5 + rot: 1.5707963267948966 rad + pos: 6.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8564 + color: '#1739A6FF' + - uid: 5933 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,25.5 + rot: 1.5707963267948966 rad + pos: 8.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8569 + color: '#1739A6FF' + - uid: 5934 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,25.5 + rot: 1.5707963267948966 rad + pos: 9.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8755 + color: '#1739A6FF' + - uid: 5935 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,25.5 + rot: 1.5707963267948966 rad + pos: 10.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8776 + color: '#1739A6FF' + - uid: 5936 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,10.5 + pos: 11.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8777 + color: '#1739A6FF' + - uid: 5937 components: - type: Transform rot: 1.5707963267948966 rad - pos: -11.5,10.5 + pos: 12.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8778 + color: '#1739A6FF' + - uid: 5942 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,10.5 + rot: 3.141592653589793 rad + pos: 8.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8779 + color: '#1739A6FF' + - uid: 5943 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,10.5 + rot: 3.141592653589793 rad + pos: 8.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8780 + color: '#1739A6FF' + - uid: 5945 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,10.5 + pos: 9.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8781 + color: '#A01E16FF' + - uid: 5946 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,10.5 + pos: 9.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8785 + color: '#A01E16FF' + - uid: 5947 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,11.5 + pos: 9.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8786 + color: '#A01E16FF' + - uid: 5948 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,11.5 + pos: 9.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8787 + color: '#A01E16FF' + - uid: 5949 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,11.5 + pos: 9.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8788 + color: '#A01E16FF' + - uid: 5954 components: - type: Transform rot: -1.5707963267948966 rad - pos: -10.5,11.5 + pos: -0.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8789 + color: '#A01E16FF' + - uid: 5956 components: - type: Transform rot: -1.5707963267948966 rad - pos: -11.5,11.5 + pos: -2.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8790 + color: '#A01E16FF' + - uid: 5957 components: - type: Transform rot: -1.5707963267948966 rad - pos: -12.5,11.5 + pos: -3.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8791 + color: '#A01E16FF' + - uid: 5958 components: - type: Transform rot: -1.5707963267948966 rad - pos: -13.5,11.5 + pos: -4.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8792 + color: '#A01E16FF' + - uid: 5959 components: - type: Transform rot: -1.5707963267948966 rad - pos: -14.5,11.5 + pos: -0.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8793 + color: '#1739A6FF' + - uid: 5961 components: - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,11.5 + pos: -3.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8991 + color: '#1739A6FF' + - uid: 5962 components: - type: Transform - pos: 64.5,3.5 + rot: -1.5707963267948966 rad + pos: -1.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8992 + color: '#1739A6FF' + - uid: 5965 components: - type: Transform - pos: 64.5,1.5 + rot: 3.141592653589793 rad + pos: -5.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9014 + color: '#A01E16FF' + - uid: 5966 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,25.5 + rot: 3.141592653589793 rad + pos: -5.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9015 + color: '#A01E16FF' + - uid: 5967 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,25.5 + rot: 3.141592653589793 rad + pos: -5.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9016 + color: '#A01E16FF' + - uid: 5968 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,25.5 + rot: 3.141592653589793 rad + pos: -5.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9017 + color: '#A01E16FF' + - uid: 5970 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,25.5 + rot: 3.141592653589793 rad + pos: -5.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9018 + color: '#A01E16FF' + - uid: 5972 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,25.5 + rot: 3.141592653589793 rad + pos: -4.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9054 + color: '#1739A6FF' + - uid: 5974 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,14.5 + rot: 3.141592653589793 rad + pos: -4.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9059 + color: '#1739A6FF' + - uid: 5975 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,15.5 + rot: 3.141592653589793 rad + pos: -4.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9075 + color: '#1739A6FF' + - uid: 5984 components: - type: Transform rot: -1.5707963267948966 rad - pos: 58.5,14.5 + pos: -6.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9176 + color: '#A01E16FF' + - uid: 5985 components: - type: Transform - pos: -37.5,-0.5 + rot: 1.5707963267948966 rad + pos: -9.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9177 + color: '#A01E16FF' + - uid: 5990 components: - type: Transform - pos: -37.5,-2.5 + rot: 3.141592653589793 rad + pos: -5.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9178 + color: '#1739A6FF' + - uid: 5997 components: - type: Transform - pos: -37.5,-3.5 + rot: 3.141592653589793 rad + pos: -8.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9199 + color: '#A01E16FF' + - uid: 5998 components: - type: Transform - pos: -37.5,-1.5 + rot: 3.141592653589793 rad + pos: -8.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9201 + color: '#A01E16FF' + - uid: 5999 components: - type: Transform - pos: -37.5,-4.5 + rot: 3.141592653589793 rad + pos: -8.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9206 + color: '#A01E16FF' + - uid: 6003 components: - type: Transform - pos: 64.5,6.5 + rot: 3.141592653589793 rad + pos: -7.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9222 + color: '#1739A6FF' + - uid: 6004 components: - type: Transform rot: 3.141592653589793 rad - pos: -36.5,14.5 + pos: -7.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9223 + color: '#1739A6FF' + - uid: 6005 components: - type: Transform rot: 3.141592653589793 rad - pos: -38.5,15.5 + pos: -7.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9349 + color: '#1739A6FF' + - uid: 6008 components: - type: Transform - pos: -25.5,17.5 + rot: 1.5707963267948966 rad + pos: -9.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9350 + color: '#1739A6FF' + - uid: 6009 components: - type: Transform - pos: -25.5,18.5 + rot: 1.5707963267948966 rad + pos: -10.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9351 + color: '#1739A6FF' + - uid: 6011 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,19.5 + rot: 1.5707963267948966 rad + pos: -9.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9352 + color: '#A01E16FF' + - uid: 6012 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,19.5 + rot: 1.5707963267948966 rad + pos: -11.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9377 + color: '#A01E16FF' + - uid: 6013 components: - type: Transform - pos: 64.5,7.5 + rot: 1.5707963267948966 rad + pos: -10.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9388 + color: '#A01E16FF' + - uid: 6014 components: - type: Transform - pos: 64.5,8.5 + rot: 3.141592653589793 rad + pos: -5.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9731 + color: '#1739A6FF' + - uid: 6027 components: - type: Transform rot: 3.141592653589793 rad - pos: 47.5,16.5 + pos: -12.5,17.5 parent: 31 - - uid: 9816 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6028 components: - type: Transform rot: 3.141592653589793 rad - pos: -4.5,-29.5 + pos: -12.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9938 + color: '#1739A6FF' + - uid: 6029 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,15.5 + rot: 1.5707963267948966 rad + pos: -9.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9941 + color: '#A01E16FF' + - uid: 6030 components: - type: Transform - pos: 64.5,2.5 + rot: 1.5707963267948966 rad + pos: -11.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9945 + color: '#A01E16FF' + - uid: 6031 components: - type: Transform - rot: 3.141592653589793 rad - pos: 46.5,17.5 + rot: 1.5707963267948966 rad + pos: -10.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9955 + color: '#A01E16FF' + - uid: 6034 components: - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,17.5 + rot: 1.5707963267948966 rad + pos: -4.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 9956 + color: '#A01E16FF' + - uid: 6035 components: - type: Transform - rot: 3.141592653589793 rad - pos: 39.5,16.5 + rot: 1.5707963267948966 rad + pos: -3.5,8.5 parent: 31 - - uid: 10024 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6036 components: - type: Transform rot: 1.5707963267948966 rad - pos: 21.5,-11.5 + pos: -2.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10026 + color: '#A01E16FF' + - uid: 6037 components: - type: Transform rot: 1.5707963267948966 rad - pos: 20.5,-11.5 + pos: -1.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10031 + color: '#A01E16FF' + - uid: 6038 components: - type: Transform - pos: 62.5,6.5 + rot: 1.5707963267948966 rad + pos: -3.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10039 + color: '#1739A6FF' + - uid: 6039 components: - type: Transform rot: 1.5707963267948966 rad - pos: 19.5,-11.5 + pos: -2.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10102 + color: '#1739A6FF' + - uid: 6040 components: - type: Transform - rot: 3.141592653589793 rad - pos: 34.5,17.5 + rot: 1.5707963267948966 rad + pos: -1.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10105 + color: '#1739A6FF' + - uid: 6045 components: - type: Transform rot: -1.5707963267948966 rad - pos: 54.5,15.5 + pos: -5.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10107 + color: '#1739A6FF' + - uid: 6046 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,16.5 + pos: -6.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10120 + color: '#1739A6FF' + - uid: 6047 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,22.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10122 + color: '#1739A6FF' + - uid: 6048 components: - type: Transform - rot: 3.141592653589793 rad - pos: 43.5,16.5 + rot: -1.5707963267948966 rad + pos: -8.5,5.5 parent: 31 - - uid: 10247 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6049 components: - type: Transform - pos: -37.5,-7.5 + rot: -1.5707963267948966 rad + pos: -9.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10248 + color: '#1739A6FF' + - uid: 6052 components: - type: Transform - pos: -37.5,-6.5 + rot: -1.5707963267948966 rad + pos: -12.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10249 + color: '#1739A6FF' + - uid: 6053 components: - type: Transform - pos: -35.5,-7.5 + rot: -1.5707963267948966 rad + pos: -13.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10250 + color: '#1739A6FF' + - uid: 6054 components: - type: Transform - pos: -35.5,-8.5 + rot: -1.5707963267948966 rad + pos: -14.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10378 + color: '#1739A6FF' + - uid: 6055 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,-29.5 + pos: -15.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10379 + color: '#1739A6FF' + - uid: 6056 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,5.5 + parent: 31 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6057 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-29.5 + pos: -17.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10380 + color: '#1739A6FF' + - uid: 6058 components: - type: Transform rot: -1.5707963267948966 rad - pos: 1.5,-29.5 + pos: -18.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10382 + color: '#1739A6FF' + - uid: 6059 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-28.5 + rot: -1.5707963267948966 rad + pos: -19.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10383 + color: '#1739A6FF' + - uid: 6060 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-28.5 + rot: -1.5707963267948966 rad + pos: -20.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10384 + color: '#1739A6FF' + - uid: 6061 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-28.5 + rot: -1.5707963267948966 rad + pos: -21.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10387 + color: '#1739A6FF' + - uid: 6062 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-4.5 + rot: -1.5707963267948966 rad + pos: -22.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10388 + color: '#1739A6FF' + - uid: 6063 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-5.5 + rot: -1.5707963267948966 rad + pos: -6.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10389 + color: '#A01E16FF' + - uid: 6064 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10390 + color: '#A01E16FF' + - uid: 6065 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-7.5 + rot: -1.5707963267948966 rad + pos: -8.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10391 + color: '#A01E16FF' + - uid: 6066 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-8.5 + rot: -1.5707963267948966 rad + pos: -9.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10392 + color: '#A01E16FF' + - uid: 6067 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-9.5 + rot: -1.5707963267948966 rad + pos: -10.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10393 + color: '#A01E16FF' + - uid: 6068 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-10.5 + rot: -1.5707963267948966 rad + pos: -11.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10394 + color: '#A01E16FF' + - uid: 6069 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-11.5 + rot: -1.5707963267948966 rad + pos: -12.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10396 + color: '#A01E16FF' + - uid: 6070 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-13.5 + rot: -1.5707963267948966 rad + pos: -13.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10397 + color: '#A01E16FF' + - uid: 6072 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-4.5 + rot: -1.5707963267948966 rad + pos: -15.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10398 + color: '#A01E16FF' + - uid: 6073 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-5.5 + rot: -1.5707963267948966 rad + pos: -16.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10399 + color: '#A01E16FF' + - uid: 6074 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-6.5 + rot: -1.5707963267948966 rad + pos: -17.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10400 + color: '#A01E16FF' + - uid: 6075 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-7.5 + rot: -1.5707963267948966 rad + pos: -18.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10402 + color: '#A01E16FF' + - uid: 6077 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-9.5 + rot: -1.5707963267948966 rad + pos: -20.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10403 + color: '#A01E16FF' + - uid: 6078 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-10.5 + rot: -1.5707963267948966 rad + pos: -21.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10405 + color: '#A01E16FF' + - uid: 6081 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-12.5 + rot: 1.5707963267948966 rad + pos: -10.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10412 + color: '#1739A6FF' + - uid: 6092 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,17.5 + pos: -16.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10423 + color: '#1739A6FF' + - uid: 6093 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,13.5 + rot: 3.141592653589793 rad + pos: -24.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10432 + color: '#1739A6FF' + - uid: 6094 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-14.5 + rot: 3.141592653589793 rad + pos: -24.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10433 + color: '#1739A6FF' + - uid: 6097 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,-14.5 + rot: -1.5707963267948966 rad + pos: -24.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10434 + color: '#A01E16FF' + - uid: 6102 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-14.5 + rot: -1.5707963267948966 rad + pos: -25.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10443 + color: '#A01E16FF' + - uid: 6103 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,-12.5 + pos: -26.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10449 + color: '#A01E16FF' + - uid: 6104 components: - type: Transform rot: -1.5707963267948966 rad - pos: 59.5,14.5 + pos: -25.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10450 + color: '#1739A6FF' + - uid: 6105 components: - type: Transform - pos: -8.5,-23.5 + rot: -1.5707963267948966 rad + pos: -26.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10451 + color: '#1739A6FF' + - uid: 6107 components: - type: Transform - pos: -8.5,-24.5 + rot: 3.141592653589793 rad + pos: -23.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10452 + color: '#A01E16FF' + - uid: 6108 components: - type: Transform - pos: -8.5,-25.5 + rot: 3.141592653589793 rad + pos: -23.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10453 + color: '#A01E16FF' + - uid: 6109 components: - type: Transform - pos: -8.5,-26.5 + rot: 3.141592653589793 rad + pos: -23.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10454 + color: '#A01E16FF' + - uid: 6110 components: - type: Transform - pos: -8.5,-28.5 + rot: 3.141592653589793 rad + pos: -23.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10455 + color: '#A01E16FF' + - uid: 6111 components: - type: Transform - pos: -8.5,-29.5 + rot: 3.141592653589793 rad + pos: -23.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10456 + color: '#A01E16FF' + - uid: 6113 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-27.5 + pos: -16.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10457 + color: '#1739A6FF' + - uid: 6128 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-27.5 + rot: 3.141592653589793 rad + pos: -16.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10458 + color: '#1739A6FF' + - uid: 6131 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-27.5 + rot: 1.5707963267948966 rad + pos: -27.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10459 + color: '#A01E16FF' + - uid: 6133 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-27.5 + rot: 1.5707963267948966 rad + pos: -25.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10460 + color: '#A01E16FF' + - uid: 6134 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-27.5 + rot: 1.5707963267948966 rad + pos: -24.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10461 + color: '#A01E16FF' + - uid: 6139 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-27.5 + rot: 1.5707963267948966 rad + pos: -30.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10462 + color: '#1739A6FF' + - uid: 6140 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,-27.5 + rot: 1.5707963267948966 rad + pos: -31.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10469 + color: '#1739A6FF' + - uid: 6142 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-16.5 + rot: 1.5707963267948966 rad + pos: -33.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10470 + color: '#1739A6FF' + - uid: 6143 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-16.5 + rot: 1.5707963267948966 rad + pos: -34.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10471 + color: '#1739A6FF' + - uid: 6145 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,-16.5 + rot: 1.5707963267948966 rad + pos: -31.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10472 + color: '#A01E16FF' + - uid: 6146 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-16.5 + rot: 1.5707963267948966 rad + pos: -32.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10479 + color: '#A01E16FF' + - uid: 6147 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-17.5 + rot: 1.5707963267948966 rad + pos: -33.5,3.5 parent: 31 - - uid: 10483 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6148 components: - type: Transform - pos: -7.5,-20.5 + rot: 1.5707963267948966 rad + pos: -34.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10484 + color: '#A01E16FF' + - uid: 6149 components: - type: Transform - pos: -7.5,-21.5 + rot: 1.5707963267948966 rad + pos: -35.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10485 + color: '#A01E16FF' + - uid: 6153 components: - type: Transform - pos: -7.5,-22.5 + pos: -35.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10486 + color: '#1739A6FF' + - uid: 6154 components: - type: Transform - pos: -7.5,-23.5 + pos: -35.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10487 + color: '#1739A6FF' + - uid: 6155 components: - type: Transform - pos: -7.5,-24.5 + pos: -35.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10488 + color: '#1739A6FF' + - uid: 6156 components: - type: Transform - pos: -7.5,-25.5 + pos: -35.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10489 + color: '#1739A6FF' + - uid: 6157 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,-26.5 + pos: -35.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10490 + color: '#1739A6FF' + - uid: 6158 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-26.5 + pos: -35.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10491 + color: '#1739A6FF' + - uid: 6159 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-26.5 + pos: -35.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10492 + color: '#1739A6FF' + - uid: 6160 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-26.5 + pos: -35.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10493 + color: '#1739A6FF' + - uid: 6161 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-26.5 + pos: -35.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10494 + color: '#1739A6FF' + - uid: 6162 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-26.5 + rot: 1.5707963267948966 rad + pos: -39.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10507 + color: '#A01E16FF' + - uid: 6163 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,16.5 + pos: -35.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10508 + color: '#1739A6FF' + - uid: 6164 components: - type: Transform - pos: 64.5,0.5 + pos: -36.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10509 + color: '#A01E16FF' + - uid: 6165 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,16.5 + pos: -36.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10510 + color: '#A01E16FF' + - uid: 6167 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,16.5 + pos: -25.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10511 + color: '#1739A6FF' + - uid: 6170 components: - type: Transform - rot: 3.141592653589793 rad - pos: 41.5,16.5 + rot: 1.5707963267948966 rad + pos: 32.5,3.5 parent: 31 - - uid: 10514 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6171 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,17.5 + pos: 32.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10516 + color: '#1739A6FF' + - uid: 6172 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,16.5 + pos: 32.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10517 + color: '#1739A6FF' + - uid: 6173 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,16.5 + pos: 32.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10914 + color: '#1739A6FF' + - uid: 6176 components: - type: Transform - pos: 49.5,-2.5 + pos: 33.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10915 + color: '#A01E16FF' + - uid: 6177 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,-3.5 + pos: 33.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10916 + color: '#A01E16FF' + - uid: 6178 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,-3.5 + pos: 33.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10917 + color: '#A01E16FF' + - uid: 6179 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,-3.5 + pos: 33.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10918 + color: '#A01E16FF' + - uid: 6185 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-3.5 + rot: 1.5707963267948966 rad + pos: 34.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10919 + color: '#A01E16FF' + - uid: 6186 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,-3.5 + pos: 32.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10920 + color: '#1739A6FF' + - uid: 6187 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-4.5 + pos: 32.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10921 + color: '#1739A6FF' + - uid: 6188 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-5.5 + pos: 32.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10922 + color: '#1739A6FF' + - uid: 6189 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-6.5 + pos: 32.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10923 + color: '#1739A6FF' + - uid: 6190 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-7.5 + pos: 32.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10924 + color: '#1739A6FF' + - uid: 6191 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-8.5 + pos: 32.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10925 + color: '#1739A6FF' + - uid: 6192 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-9.5 + pos: 32.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10926 + color: '#1739A6FF' + - uid: 6193 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-10.5 + pos: 33.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10927 + color: '#A01E16FF' + - uid: 6194 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 54.5,-7.5 + pos: 33.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10928 + color: '#A01E16FF' + - uid: 6195 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 55.5,-7.5 + pos: 33.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10932 + color: '#A01E16FF' + - uid: 6196 components: - type: Transform - pos: 48.5,-2.5 + pos: 33.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10933 + color: '#A01E16FF' + - uid: 6200 components: - type: Transform - pos: 48.5,-3.5 + rot: -1.5707963267948966 rad + pos: 40.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10934 + color: '#1739A6FF' + - uid: 6201 components: - type: Transform - pos: 48.5,-4.5 + rot: 1.5707963267948966 rad + pos: 41.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10935 + color: '#1739A6FF' + - uid: 6202 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,-5.5 + rot: 1.5707963267948966 rad + pos: 42.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10936 + color: '#1739A6FF' + - uid: 6203 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,-5.5 + rot: 1.5707963267948966 rad + pos: 43.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10937 + color: '#1739A6FF' + - uid: 6206 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,-5.5 + pos: 43.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10938 + color: '#A01E16FF' + - uid: 6207 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 53.5,-5.5 + pos: 43.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10939 + color: '#A01E16FF' + - uid: 6208 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-5.5 + pos: 43.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10940 + color: '#A01E16FF' + - uid: 6209 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,-5.5 + rot: 3.141592653589793 rad + pos: 43.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10941 + color: '#A01E16FF' + - uid: 6217 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,-5.5 + rot: 3.141592653589793 rad + pos: 44.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10942 + color: '#1739A6FF' + - uid: 6218 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 57.5,-5.5 + rot: 3.141592653589793 rad + pos: 44.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10944 + color: '#1739A6FF' + - uid: 6219 components: - type: Transform - pos: 48.5,-6.5 + rot: 3.141592653589793 rad + pos: 44.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10945 + color: '#1739A6FF' + - uid: 6220 components: - type: Transform - pos: 48.5,-7.5 + rot: 1.5707963267948966 rad + pos: 44.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10946 + color: '#A01E16FF' + - uid: 6221 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,-8.5 + rot: 1.5707963267948966 rad + pos: 45.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10947 + color: '#A01E16FF' + - uid: 6222 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,-8.5 + rot: 1.5707963267948966 rad + pos: 46.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10948 + color: '#A01E16FF' + - uid: 6224 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,-8.5 + rot: 1.5707963267948966 rad + pos: 48.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10949 + color: '#A01E16FF' + - uid: 6225 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 52.5,-8.5 + rot: 1.5707963267948966 rad + pos: 45.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10950 + color: '#1739A6FF' + - uid: 6227 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 53.5,-8.5 + rot: 1.5707963267948966 rad + pos: 47.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10951 + color: '#1739A6FF' + - uid: 6229 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-8.5 + pos: 48.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10952 + color: '#1739A6FF' + - uid: 6233 components: - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,-9.5 + pos: 48.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10953 + color: '#1739A6FF' + - uid: 6234 components: - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,-10.5 + pos: 49.5,2.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11063 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6235 components: - type: Transform - pos: 46.5,20.5 + pos: 49.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11064 + color: '#A01E16FF' + - uid: 6236 components: - type: Transform - pos: 47.5,21.5 + pos: 49.5,0.5 parent: 31 - - uid: 11065 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6237 components: - type: Transform - pos: 47.5,20.5 + pos: 49.5,-0.5 parent: 31 - - uid: 11066 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6238 components: - type: Transform - pos: 47.5,19.5 + pos: 49.5,-1.5 parent: 31 - - uid: 11067 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6239 components: - type: Transform - pos: 47.5,18.5 + pos: 48.5,0.5 parent: 31 - - uid: 11068 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6240 components: - type: Transform - pos: 46.5,19.5 + rot: -1.5707963267948966 rad + pos: 42.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11082 + color: '#A01E16FF' + - uid: 6247 components: - type: Transform rot: -1.5707963267948966 rad - pos: 45.5,13.5 + pos: 47.5,12.5 parent: 31 - - uid: 11171 + - uid: 6254 components: - type: Transform rot: 3.141592653589793 rad - pos: 62.5,3.5 + pos: 32.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11292 + color: '#1739A6FF' + - uid: 6260 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,12.5 + pos: 22.5,14.5 parent: 31 - - uid: 11293 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6263 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,11.5 + pos: 38.5,2.5 parent: 31 - - uid: 11303 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6264 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,14.5 + pos: 38.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11304 + color: '#A01E16FF' + - uid: 6269 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,14.5 + rot: 3.141592653589793 rad + pos: 37.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11401 + color: '#1739A6FF' + - uid: 6270 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -38.5,-5.5 + rot: 3.141592653589793 rad + pos: 37.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11402 + color: '#1739A6FF' + - uid: 6271 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-4.5 + rot: 3.141592653589793 rad + pos: 37.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11403 + color: '#1739A6FF' + - uid: 6272 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -37.5,-4.5 + rot: 3.141592653589793 rad + pos: 37.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11404 + color: '#1739A6FF' + - uid: 6273 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -38.5,-4.5 + rot: 3.141592653589793 rad + pos: 37.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11405 + color: '#1739A6FF' + - uid: 6277 components: - type: Transform rot: 1.5707963267948966 rad - pos: -39.5,-4.5 + pos: 47.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11437 + color: '#00FF00FF' + - uid: 6280 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,15.5 + rot: 1.5707963267948966 rad + pos: 49.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11469 + color: '#00FF00FF' + - uid: 6281 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,12.5 + rot: 1.5707963267948966 rad + pos: 46.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11474 + color: '#00FF00FF' + - uid: 6288 components: - type: Transform rot: -1.5707963267948966 rad - pos: 56.5,15.5 + pos: 40.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11476 + color: '#234FDEFF' + - uid: 6315 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 53.5,15.5 + rot: 1.5707963267948966 rad + pos: -7.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11478 + color: '#A01E16FF' + - uid: 6349 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,14.5 + rot: 1.5707963267948966 rad + pos: 44.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11554 + color: '#A01E16FF' + - uid: 6363 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-14.5 + pos: 37.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11555 + - uid: 6384 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-14.5 + rot: 1.5707963267948966 rad + pos: 47.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11556 + color: '#00FF00FF' + - uid: 6392 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-14.5 + pos: 43.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11557 + color: '#A01E16FF' + - uid: 6409 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-14.5 + rot: 3.141592653589793 rad + pos: -22.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11558 + color: '#A01E16FF' + - uid: 6411 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,-14.5 + rot: 1.5707963267948966 rad + pos: 45.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11559 + color: '#A01E16FF' + - uid: 6435 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,-14.5 + rot: 1.5707963267948966 rad + pos: 49.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11560 + color: '#00FF00FF' + - uid: 6439 components: - type: Transform rot: -1.5707963267948966 rad - pos: -16.5,-14.5 + pos: -11.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11561 + color: '#A01E16FF' + - uid: 6465 components: - type: Transform rot: -1.5707963267948966 rad - pos: -17.5,-14.5 + pos: -14.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11562 + color: '#A01E16FF' + - uid: 6480 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-14.5 + rot: 1.5707963267948966 rad + pos: -21.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11563 + color: '#A01E16FF' + - uid: 6481 components: - type: Transform rot: -1.5707963267948966 rad - pos: -19.5,-14.5 + pos: 2.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11564 + color: '#1739A6FF' + - uid: 6490 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,-14.5 + pos: -9.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11565 + color: '#A01E16FF' + - uid: 6534 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-14.5 + rot: 1.5707963267948966 rad + pos: 46.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11566 + color: '#A01E16FF' + - uid: 6549 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-14.5 + pos: 46.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11568 + color: '#990000FF' + - uid: 6558 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,-18.5 + rot: 3.141592653589793 rad + pos: 37.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11575 + color: '#234FDEFF' + - uid: 6559 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-19.5 + pos: 44.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11576 + color: '#1739A6FF' + - uid: 6562 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-20.5 + rot: -1.5707963267948966 rad + pos: 46.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11577 + color: '#1739A6FF' + - uid: 6569 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-19.5 + rot: -1.5707963267948966 rad + pos: 45.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11578 + color: '#1739A6FF' + - uid: 6572 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-20.5 + rot: -1.5707963267948966 rad + pos: 24.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11579 + color: '#1739A6FF' + - uid: 6573 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-21.5 + rot: -1.5707963267948966 rad + pos: 25.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11580 + color: '#1739A6FF' + - uid: 6577 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,-21.5 + pos: 37.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11581 + - uid: 6579 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-21.5 + pos: 34.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11584 + - uid: 6604 components: - type: Transform - pos: -25.5,-23.5 + rot: -1.5707963267948966 rad + pos: -8.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11585 + color: '#A01E16FF' + - uid: 6619 components: - type: Transform - pos: -26.5,-23.5 + rot: -1.5707963267948966 rad + pos: -10.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11586 + color: '#A01E16FF' + - uid: 6634 components: - type: Transform - pos: -26.5,-22.5 + rot: -1.5707963267948966 rad + pos: -13.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11587 + color: '#A01E16FF' + - uid: 6636 components: - type: Transform rot: -1.5707963267948966 rad - pos: -24.5,-22.5 + pos: 41.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11588 + color: '#234FDEFF' + - uid: 6642 components: - type: Transform rot: -1.5707963267948966 rad - pos: -23.5,-22.5 + pos: -12.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11589 + color: '#A01E16FF' + - uid: 6693 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,-22.5 + pos: -23.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11593 + color: '#1739A6FF' + - uid: 6696 components: - type: Transform - pos: -22.5,-26.5 + rot: 3.141592653589793 rad + pos: -23.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11594 + color: '#1739A6FF' + - uid: 6704 components: - type: Transform - pos: -22.5,-24.5 + pos: 34.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11598 + - uid: 6712 components: - type: Transform rot: -1.5707963267948966 rad - pos: -28.5,-21.5 + pos: -18.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11599 + color: '#A01E16FF' + - uid: 6713 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-22.5 + rot: 3.141592653589793 rad + pos: -23.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11600 + color: '#1739A6FF' + - uid: 6714 components: - type: Transform rot: -1.5707963267948966 rad - pos: -29.5,-22.5 + pos: -21.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11601 + color: '#A01E16FF' + - uid: 6715 components: - type: Transform rot: -1.5707963267948966 rad - pos: -29.5,-21.5 + pos: -20.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11602 + color: '#A01E16FF' + - uid: 6716 components: - type: Transform rot: -1.5707963267948966 rad - pos: -30.5,-21.5 - parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11606 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-21.5 + pos: -19.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11607 + color: '#A01E16FF' + - uid: 6717 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-22.5 + rot: -1.5707963267948966 rad + pos: -17.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11610 + color: '#A01E16FF' + - uid: 6718 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-22.5 + rot: -1.5707963267948966 rad + pos: -15.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11759 + color: '#A01E16FF' + - uid: 6719 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,21.5 + rot: -1.5707963267948966 rad + pos: -16.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11760 + color: '#A01E16FF' + - uid: 6727 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,20.5 + rot: -1.5707963267948966 rad + pos: 45.5,12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 11761 + - uid: 6734 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,19.5 + pos: 30.5,22.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11762 + - uid: 6741 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,18.5 + rot: -1.5707963267948966 rad + pos: 64.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11763 + color: '#0055CCFF' + - uid: 6749 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,17.5 + rot: -1.5707963267948966 rad + pos: 37.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11764 + - uid: 6765 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,16.5 + rot: 1.5707963267948966 rad + pos: 70.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11765 + - uid: 6766 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,15.5 + rot: 1.5707963267948966 rad + pos: 66.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11766 + - uid: 6830 components: - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,14.5 + pos: 68.5,8.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11767 + - uid: 6842 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 56.5,13.5 + pos: 68.5,7.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11768 + - uid: 6895 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 57.5,13.5 + rot: -1.5707963267948966 rad + pos: 23.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11769 + color: '#1739A6FF' + - uid: 6896 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,13.5 + rot: -1.5707963267948966 rad + pos: 25.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11802 + color: '#A01E16FF' + - uid: 6925 components: - type: Transform rot: -1.5707963267948966 rad - pos: 72.5,10.5 + pos: 62.5,12.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11803 + - uid: 6926 components: - type: Transform rot: -1.5707963267948966 rad - pos: 73.5,10.5 + pos: 61.5,12.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 11804 + - uid: 6945 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 74.5,10.5 + pos: 48.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11805 + color: '#1739A6FF' + - uid: 6973 components: - type: Transform rot: 3.141592653589793 rad - pos: 75.5,9.5 + pos: 48.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11870 + color: '#1739A6FF' + - uid: 6976 components: - type: Transform - rot: 3.141592653589793 rad - pos: 72.5,2.5 + pos: -8.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11871 + color: '#A01E16FF' + - uid: 6989 components: - type: Transform rot: 3.141592653589793 rad - pos: 72.5,1.5 + pos: 53.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11872 + color: '#A01E16FF' + - uid: 7029 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,-1.5 + pos: 52.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11883 + color: '#A01E16FF' + - uid: 7036 components: - type: Transform - pos: 66.5,-0.5 + rot: 3.141592653589793 rad + pos: 48.5,-17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12119 + color: '#1739A6FF' + - uid: 7072 components: - type: Transform - pos: 66.5,7.5 + rot: -1.5707963267948966 rad + pos: 49.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 12120 + color: '#1739A6FF' + - uid: 7073 components: - type: Transform - pos: 66.5,8.5 + rot: -1.5707963267948966 rad + pos: 50.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 12126 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 66.5,11.5 - parent: 31 - - uid: 12127 + color: '#1739A6FF' + - uid: 7075 components: - type: Transform rot: 3.141592653589793 rad - pos: 66.5,12.5 - parent: 31 - - uid: 12143 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,15.5 - parent: 31 - - uid: 12144 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,15.5 + pos: 33.5,10.5 parent: 31 - - uid: 12145 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7076 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,15.5 + rot: 1.5707963267948966 rad + pos: 33.5,10.5 parent: 31 - - uid: 12146 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7098 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,15.5 + rot: 3.141592653589793 rad + pos: 43.5,15.5 parent: 31 - - uid: 12147 + - type: AtmosPipeColor + color: '#F88379FF' + - uid: 7132 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,15.5 + pos: 34.5,20.5 parent: 31 - - uid: 12149 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 7175 components: - type: Transform rot: 3.141592653589793 rad - pos: 34.5,12.5 + pos: -32.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12150 + color: '#DE2D23FF' + - uid: 7179 components: - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,15.5 + rot: -1.5707963267948966 rad + pos: 52.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 12151 + color: '#1739A6FF' + - uid: 7180 components: - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,14.5 + rot: -1.5707963267948966 rad + pos: 51.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 12541 + color: '#1739A6FF' + - uid: 7182 components: - type: Transform - pos: 38.5,21.5 + rot: -1.5707963267948966 rad + pos: 54.5,2.5 parent: 31 - - uid: 12542 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7197 components: - type: Transform - pos: 40.5,21.5 + pos: 36.5,21.5 parent: 31 - - uid: 12543 + - uid: 7205 components: - type: Transform - pos: 42.5,21.5 + rot: -1.5707963267948966 rad + pos: 55.5,3.5 parent: 31 - - uid: 12544 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7206 components: - type: Transform - pos: 44.5,21.5 + rot: -1.5707963267948966 rad + pos: 54.5,3.5 parent: 31 - - uid: 12545 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7207 components: - type: Transform - pos: 46.5,21.5 + rot: -1.5707963267948966 rad + pos: 52.5,3.5 parent: 31 - - uid: 12546 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7208 components: - type: Transform - pos: 46.5,22.5 + rot: -1.5707963267948966 rad + pos: 50.5,3.5 parent: 31 - - uid: 12547 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7210 components: - type: Transform - pos: 44.5,22.5 + rot: -1.5707963267948966 rad + pos: 51.5,3.5 parent: 31 - - uid: 12548 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7212 components: - type: Transform - pos: 42.5,22.5 + rot: -1.5707963267948966 rad + pos: 53.5,2.5 parent: 31 - - uid: 12549 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7218 components: - type: Transform - pos: 40.5,22.5 + rot: -1.5707963267948966 rad + pos: 53.5,3.5 parent: 31 - - uid: 12550 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7227 components: - type: Transform - pos: 38.5,22.5 + pos: 64.5,4.5 parent: 31 - - uid: 12551 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 7257 components: - type: Transform - pos: 36.5,22.5 + rot: 3.141592653589793 rad + pos: -32.5,-10.5 parent: 31 -- proto: GasPipeTJunction - entities: - - uid: 53 + - type: AtmosPipeColor + color: '#DE2D23FF' + - uid: 7266 components: - type: Transform rot: 3.141592653589793 rad - pos: 10.5,25.5 + pos: -32.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 97 + color: '#DE2D23FF' + - uid: 7267 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-5.5 + rot: 3.141592653589793 rad + pos: -32.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 351 + color: '#DE2D23FF' + - uid: 7268 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,-11.5 + rot: 3.141592653589793 rad + pos: -32.5,-13.5 + parent: 31 + - type: AtmosPipeColor + color: '#DE2D23FF' + - uid: 7309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.5,24.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 536 + - uid: 7311 components: - type: Transform - pos: -3.5,-16.5 + rot: -1.5707963267948966 rad + pos: 44.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 926 + - uid: 7312 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-21.5 + rot: -1.5707963267948966 rad + pos: 42.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1231 + color: '#990000FF' + - uid: 7346 components: - type: Transform rot: -1.5707963267948966 rad - pos: 39.5,5.5 + pos: 63.5,-0.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1723 + - uid: 7382 components: - type: Transform - pos: 37.5,5.5 + rot: 3.141592653589793 rad + pos: 40.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1796 + color: '#990000FF' + - uid: 7413 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,-12.5 + pos: 2.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2282 + color: '#A01E16FF' + - uid: 7419 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,15.5 + pos: -32.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2868 + color: '#1739A6FF' + - uid: 7458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,16.5 + parent: 31 + - uid: 7464 components: - type: Transform rot: 1.5707963267948966 rad - pos: 4.5,-19.5 + pos: 32.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3386 + color: '#990000FF' + - uid: 7557 + components: + - type: Transform + pos: -24.5,13.5 + parent: 31 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7693 components: - type: Transform rot: -1.5707963267948966 rad - pos: 18.5,-14.5 + pos: 41.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 3389 + - uid: 7727 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,-15.5 + rot: 3.141592653589793 rad + pos: -37.5,4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3390 + color: '#A01E16FF' + - uid: 7728 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,8.5 + rot: 3.141592653589793 rad + pos: -37.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3420 + color: '#A01E16FF' + - uid: 7729 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,-11.5 + rot: 3.141592653589793 rad + pos: -37.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3707 + color: '#A01E16FF' + - uid: 7730 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-1.5 + rot: 3.141592653589793 rad + pos: -35.5,6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3834 + color: '#1739A6FF' + - uid: 7731 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,-13.5 + rot: 3.141592653589793 rad + pos: -35.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3860 + color: '#1739A6FF' + - uid: 7732 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -37.5,13.5 + rot: 3.141592653589793 rad + pos: -35.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3940 + color: '#1739A6FF' + - uid: 7733 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,13.5 + rot: 3.141592653589793 rad + pos: -35.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4181 + color: '#1739A6FF' + - uid: 7734 components: - type: Transform - pos: -8.5,-21.5 + rot: 3.141592653589793 rad + pos: -35.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4347 + color: '#1739A6FF' + - uid: 7735 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-14.5 + rot: 3.141592653589793 rad + pos: -35.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4372 + color: '#1739A6FF' + - uid: 7736 components: - type: Transform rot: 3.141592653589793 rad - pos: 63.5,2.5 + pos: -35.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4552 + color: '#1739A6FF' + - uid: 7738 components: - type: Transform - pos: 68.5,9.5 + rot: 3.141592653589793 rad + pos: -37.5,7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4571 + color: '#A01E16FF' + - uid: 7739 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 69.5,7.5 + rot: 3.141592653589793 rad + pos: -37.5,8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4650 + color: '#A01E16FF' + - uid: 7740 components: - type: Transform - pos: 67.5,4.5 + rot: 3.141592653589793 rad + pos: -37.5,9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4708 + color: '#A01E16FF' + - uid: 7741 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,8.5 + rot: 3.141592653589793 rad + pos: -37.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4731 + color: '#A01E16FF' + - uid: 7742 components: - type: Transform - pos: 38.5,3.5 + rot: 3.141592653589793 rad + pos: -37.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5064 + color: '#A01E16FF' + - uid: 7743 components: - type: Transform rot: 3.141592653589793 rad - pos: 7.5,25.5 + pos: -37.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5342 + color: '#A01E16FF' + - uid: 7789 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-17.5 + pos: 50.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5374 + color: '#ADD8E6FF' + - uid: 7801 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-23.5 + rot: -1.5707963267948966 rad + pos: -5.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5380 + color: '#A01E16FF' + - uid: 7817 components: - type: Transform - pos: 8.5,-20.5 + rot: -1.5707963267948966 rad + pos: 51.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5392 + color: '#990000FF' + - uid: 7825 components: - type: Transform - pos: 3.5,3.5 + rot: -1.5707963267948966 rad + pos: 33.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5396 + - uid: 7828 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,3.5 + rot: -1.5707963267948966 rad + pos: 47.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5397 + - uid: 7829 components: - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,3.5 + rot: -1.5707963267948966 rad + pos: 45.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5399 + - uid: 7834 components: - type: Transform rot: 3.141592653589793 rad - pos: 8.5,5.5 + pos: 64.5,11.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5405 + - uid: 7895 components: - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,5.5 + pos: -7.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5419 + color: '#1739A6FF' + - uid: 8022 components: - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,3.5 + rot: -1.5707963267948966 rad + pos: -3.5,29.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5422 + color: '#A01E16FF' + - uid: 8023 components: - type: Transform - pos: 10.5,5.5 + rot: -1.5707963267948966 rad + pos: 0.5,28.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5424 + color: '#A01E16FF' + - uid: 8049 components: - type: Transform - rot: 3.141592653589793 rad - pos: 21.5,3.5 + rot: -1.5707963267948966 rad + pos: 43.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5425 + - uid: 8089 components: - type: Transform - pos: 22.5,5.5 + pos: 62.5,4.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5430 + - uid: 8210 components: - type: Transform - pos: 28.5,5.5 + rot: 3.141592653589793 rad + pos: 64.5,12.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5439 + - uid: 8214 components: - type: Transform - rot: 3.141592653589793 rad - pos: 26.5,3.5 + pos: 31.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5458 + - uid: 8253 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,10.5 + pos: -8.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5459 + color: '#A01E16FF' + - uid: 8254 components: - type: Transform - pos: 16.5,11.5 + pos: -8.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5464 + color: '#A01E16FF' + - uid: 8386 components: - type: Transform rot: 3.141592653589793 rad - pos: 21.5,11.5 + pos: 49.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5465 + color: '#00FF00FF' + - uid: 8415 components: - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,10.5 + pos: 7.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5470 + color: '#A01E16FF' + - uid: 8429 components: - type: Transform rot: 3.141592653589793 rad - pos: 3.5,5.5 + pos: 37.5,15.5 + parent: 31 + - type: AtmosPipeColor + color: '#234FDEFF' + - uid: 8431 + components: + - type: Transform + pos: 64.5,5.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5471 + - uid: 8433 components: - type: Transform - pos: 20.5,10.5 + pos: 64.5,9.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5481 + - uid: 8470 components: - type: Transform rot: 3.141592653589793 rad - pos: 20.5,11.5 + pos: 54.5,24.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5488 + - uid: 8494 components: - type: Transform - pos: 9.5,0.5 + rot: -1.5707963267948966 rad + pos: 50.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5491 + - uid: 8505 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-1.5 + rot: -1.5707963267948966 rad + pos: 38.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5500 + color: '#990000FF' + - uid: 8516 components: - type: Transform - pos: -8.5,0.5 + rot: -1.5707963267948966 rad + pos: 39.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5516 + - uid: 8521 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-1.5 + rot: -1.5707963267948966 rad + pos: 53.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5528 + color: '#990000FF' + - uid: 8564 components: - type: Transform - pos: -13.5,0.5 + rot: -1.5707963267948966 rad + pos: 52.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5571 + - uid: 8569 components: - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-10.5 + rot: -1.5707963267948966 rad + pos: 34.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5572 + - uid: 8631 components: - type: Transform rot: 3.141592653589793 rad - pos: 10.5,-8.5 + pos: 47.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5574 + color: '#1739A6FF' + - uid: 8703 + components: + - type: Transform + pos: 51.5,-15.5 + parent: 31 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8712 components: - type: Transform rot: 3.141592653589793 rad - pos: 15.5,-8.5 + pos: -16.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5577 + color: '#1739A6FF' + - uid: 8720 components: - type: Transform - pos: 15.5,-10.5 + pos: -17.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5579 + color: '#1739A6FF' + - uid: 8723 components: - type: Transform - pos: 12.5,-10.5 + rot: -1.5707963267948966 rad + pos: -18.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5584 + color: '#1739A6FF' + - uid: 8726 components: - type: Transform - pos: 12.5,-8.5 + pos: -17.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5586 + color: '#1739A6FF' + - uid: 8734 components: - type: Transform rot: 3.141592653589793 rad - pos: 16.5,-8.5 + pos: -27.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5587 + color: '#1739A6FF' + - uid: 8736 components: - type: Transform rot: 3.141592653589793 rad - pos: 17.5,-10.5 + pos: -27.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5592 + color: '#1739A6FF' + - uid: 8746 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5600 + color: '#1739A6FF' + - uid: 8755 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,-5.5 + rot: -1.5707963267948966 rad + pos: 35.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5626 + color: '#990000FF' + - uid: 8769 components: - type: Transform - pos: 15.5,-15.5 + rot: 1.5707963267948966 rad + pos: -6.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5686 + color: '#1739A6FF' + - uid: 8776 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,-20.5 + rot: 1.5707963267948966 rad + pos: -10.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5715 + color: '#A01E16FF' + - uid: 8777 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-14.5 + rot: 1.5707963267948966 rad + pos: -11.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5769 + color: '#A01E16FF' + - uid: 8778 components: - type: Transform rot: 1.5707963267948966 rad - pos: -8.5,13.5 + pos: -12.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5772 + color: '#A01E16FF' + - uid: 8779 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-3.5 + rot: 1.5707963267948966 rad + pos: -13.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5801 + color: '#A01E16FF' + - uid: 8780 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,12.5 + pos: -14.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5806 + color: '#A01E16FF' + - uid: 8781 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,17.5 + pos: -15.5,10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5807 + color: '#A01E16FF' + - uid: 8787 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,19.5 + pos: -9.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5812 + color: '#1739A6FF' + - uid: 8788 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,26.5 + pos: -10.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5822 + color: '#1739A6FF' + - uid: 8789 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,23.5 + rot: -1.5707963267948966 rad + pos: -11.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5829 + color: '#1739A6FF' + - uid: 8790 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,18.5 + rot: -1.5707963267948966 rad + pos: -12.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5834 + color: '#1739A6FF' + - uid: 8791 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,14.5 + rot: -1.5707963267948966 rad + pos: -13.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5835 + color: '#1739A6FF' + - uid: 8792 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,13.5 + pos: -14.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5856 + color: '#1739A6FF' + - uid: 8793 components: - type: Transform - pos: 3.5,25.5 + rot: -1.5707963267948966 rad + pos: -15.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5867 + color: '#1739A6FF' + - uid: 8809 components: - type: Transform - pos: 7.5,24.5 + rot: -1.5707963267948966 rad + pos: -2.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5881 + color: '#1739A6FF' + - uid: 8871 components: - type: Transform rot: 3.141592653589793 rad - pos: 7.5,17.5 + pos: 47.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5955 + color: '#1739A6FF' + - uid: 8884 components: - type: Transform rot: 3.141592653589793 rad - pos: -1.5,3.5 + pos: 47.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5960 + color: '#1739A6FF' + - uid: 8924 components: - type: Transform - pos: -2.5,5.5 + rot: -1.5707963267948966 rad + pos: -25.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5963 + color: '#A01E16FF' + - uid: 8991 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,5.5 + pos: 64.5,3.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5964 + - uid: 8992 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,3.5 + pos: 64.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5969 + color: '#0055CCFF' + - uid: 9002 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,8.5 + rot: -1.5707963267948966 rad + pos: -26.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5973 + color: '#A01E16FF' + - uid: 9014 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,7.5 + rot: -1.5707963267948966 rad + pos: 40.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5980 + color: '#990000FF' + - uid: 9015 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,10.5 + rot: -1.5707963267948966 rad + pos: 49.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5989 + - uid: 9016 components: - type: Transform rot: -1.5707963267948966 rad - pos: -8.5,14.5 + pos: 48.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5994 + - uid: 9017 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,15.5 + rot: -1.5707963267948966 rad + pos: 46.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6000 + color: '#990000FF' + - uid: 9018 components: - type: Transform rot: -1.5707963267948966 rad - pos: -8.5,20.5 + pos: 36.5,25.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 6010 + - uid: 9028 components: - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,15.5 + pos: -27.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6050 + color: '#1739A6FF' + - uid: 9033 components: - type: Transform rot: 3.141592653589793 rad - pos: -14.5,3.5 + pos: 48.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6051 + color: '#1739A6FF' + - uid: 9054 components: - type: Transform - pos: -11.5,5.5 + rot: -1.5707963267948966 rad + pos: 61.5,14.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6079 + - uid: 9059 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,3.5 + rot: -1.5707963267948966 rad + pos: 52.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6084 + color: '#0055CCFF' + - uid: 9075 components: - type: Transform - pos: -25.5,5.5 + rot: -1.5707963267948966 rad + pos: 58.5,14.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6112 + - uid: 9176 components: - type: Transform - pos: -16.5,5.5 + pos: -37.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6114 + color: '#A01E16FF' + - uid: 9177 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-16.5 + pos: -37.5,-2.5 parent: 31 - - uid: 6135 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 9178 components: - type: Transform - rot: 3.141592653589793 rad - pos: -30.5,3.5 + pos: -37.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6136 + color: '#A01E16FF' + - uid: 9199 components: - type: Transform - pos: -29.5,5.5 + pos: -37.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6199 + color: '#A01E16FF' + - uid: 9201 components: - type: Transform - rot: 3.141592653589793 rad - pos: 41.5,3.5 + pos: -37.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6204 + color: '#A01E16FF' + - uid: 9206 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,6.5 + pos: 64.5,6.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6213 + - uid: 9222 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 20.5,15.5 + rot: 3.141592653589793 rad + pos: -36.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6216 + color: '#1739A6FF' + - uid: 9223 components: - type: Transform rot: 3.141592653589793 rad - pos: 43.5,3.5 + pos: -38.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6223 + color: '#A01E16FF' + - uid: 9278 components: - type: Transform rot: 3.141592653589793 rad - pos: 46.5,2.5 + pos: -24.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6226 + color: '#A01E16FF' + - uid: 9349 components: - type: Transform - pos: 47.5,3.5 + pos: -25.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6249 + color: '#1739A6FF' + - uid: 9350 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 22.5,15.5 + pos: -25.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6334 + color: '#1739A6FF' + - uid: 9351 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,10.5 + rot: -1.5707963267948966 rad + pos: -24.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6532 + color: '#1739A6FF' + - uid: 9352 components: - type: Transform rot: -1.5707963267948966 rad - pos: -23.5,-18.5 + pos: -23.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6571 + color: '#1739A6FF' + - uid: 9372 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,-18.5 + pos: -8.5,11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6748 + color: '#A01E16FF' + - uid: 9377 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,8.5 + pos: 64.5,7.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6756 + - uid: 9388 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,7.5 + pos: 64.5,8.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6763 + - uid: 9621 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,4.5 + rot: -1.5707963267948966 rad + pos: 1.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6828 + color: '#1739A6FF' + - uid: 9731 components: - type: Transform - pos: 69.5,9.5 + rot: 3.141592653589793 rad + pos: 47.5,16.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6943 + - uid: 9816 components: - type: Transform - pos: 49.5,3.5 + rot: 3.141592653589793 rad + pos: -4.5,-29.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 6944 + - uid: 9938 components: - type: Transform - pos: 48.5,2.5 + rot: -1.5707963267948966 rad + pos: 55.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 7095 + - uid: 9941 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,19.5 + pos: 64.5,2.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 7159 + - uid: 9945 components: - type: Transform - pos: 8.5,20.5 + rot: 3.141592653589793 rad + pos: 46.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7352 + color: '#990000FF' + - uid: 9955 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,6.5 + rot: 3.141592653589793 rad + pos: 38.5,17.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 7369 + - uid: 9956 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-16.5 + rot: 3.141592653589793 rad + pos: 39.5,16.5 parent: 31 - - uid: 7412 + - uid: 10024 components: - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-28.5 + rot: 1.5707963267948966 rad + pos: 21.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7457 + color: '#A01E16FF' + - uid: 10026 components: - type: Transform rot: 1.5707963267948966 rad - pos: -23.5,-3.5 + pos: 20.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7465 + color: '#A01E16FF' + - uid: 10031 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-29.5 + pos: 62.5,6.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 7504 + - uid: 10039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 19.5,-11.5 + parent: 31 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10101 components: - type: Transform rot: -1.5707963267948966 rad - pos: -36.5,0.5 + pos: 42.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 7547 + color: '#234FDEFF' + - uid: 10102 components: - type: Transform - pos: 64.5,-1.5 + rot: 3.141592653589793 rad + pos: 34.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8105 + color: '#990000FF' + - uid: 10105 components: - type: Transform - pos: -9.5,-14.5 + rot: -1.5707963267948966 rad + pos: 54.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 8106 + - uid: 10107 components: - type: Transform - pos: -7.5,-16.5 + rot: -1.5707963267948966 rad + pos: 35.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 8783 + - uid: 10113 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,11.5 + rot: 3.141592653589793 rad + pos: 49.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8872 + color: '#00FF00FF' + - uid: 10114 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,-6.5 + pos: 48.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8877 + color: '#00FF00FF' + - uid: 10120 components: - type: Transform - pos: 34.5,5.5 + rot: 3.141592653589793 rad + pos: 55.5,22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8878 + color: '#990000FF' + - uid: 10122 components: - type: Transform rot: 3.141592653589793 rad - pos: 35.5,3.5 + pos: 43.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10041 + color: '#F88379FF' + - uid: 10166 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,-9.5 + rot: 3.141592653589793 rad + pos: -27.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10251 + color: '#1739A6FF' + - uid: 10167 components: - type: Transform rot: -1.5707963267948966 rad - pos: -35.5,-6.5 + pos: -28.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10401 + color: '#A01E16FF' + - uid: 10247 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-8.5 + pos: -37.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10414 + color: '#A01E16FF' + - uid: 10248 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,16.5 + pos: -37.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10415 + color: '#A01E16FF' + - uid: 10249 components: - type: Transform - pos: -2.5,-14.5 + pos: -35.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10429 + color: '#1739A6FF' + - uid: 10250 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,-26.5 + pos: -35.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10430 + color: '#1739A6FF' + - uid: 10378 components: - type: Transform rot: -1.5707963267948966 rad - pos: -8.5,-27.5 + pos: 3.5,-29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10515 + color: '#1739A6FF' + - uid: 10379 components: - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,15.5 + rot: -1.5707963267948966 rad + pos: 2.5,-29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10910 + color: '#1739A6FF' + - uid: 10380 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 49.5,-3.5 + rot: -1.5707963267948966 rad + pos: 1.5,-29.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10911 + color: '#1739A6FF' + - uid: 10382 components: - type: Transform - pos: 53.5,-3.5 + rot: 1.5707963267948966 rad + pos: 1.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10912 + color: '#A01E16FF' + - uid: 10383 components: - type: Transform - anchored: False rot: 1.5707963267948966 rad - pos: 53.5,-7.5 + pos: 0.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - type: Physics - canCollide: True - bodyType: Dynamic - - uid: 10931 + color: '#A01E16FF' + - uid: 10384 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,-5.5 + pos: -0.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10943 + color: '#A01E16FF' + - uid: 10394 components: - type: Transform rot: 3.141592653589793 rad - pos: 51.5,-5.5 + pos: -24.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10954 + color: '#1739A6FF' + - uid: 10396 components: - type: Transform rot: 3.141592653589793 rad - pos: 48.5,-8.5 + pos: -24.5,-13.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11406 + color: '#1739A6FF' + - uid: 10403 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,-4.5 + rot: 3.141592653589793 rad + pos: -23.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11574 + color: '#A01E16FF' + - uid: 10405 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-21.5 + rot: 3.141592653589793 rad + pos: -23.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11582 + color: '#A01E16FF' + - uid: 10412 components: - type: Transform - pos: -26.5,-21.5 + rot: 3.141592653589793 rad + pos: 44.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11583 + color: '#990000FF' + - uid: 10423 components: - type: Transform - pos: -25.5,-22.5 + rot: -1.5707963267948966 rad + pos: 63.5,13.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11592 + color: '#0055CCFF' + - uid: 10432 components: - type: Transform rot: 1.5707963267948966 rad - pos: -22.5,-25.5 + pos: 0.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11801 + color: '#1739A6FF' + - uid: 10433 components: - type: Transform - pos: 74.5,8.5 + rot: 1.5707963267948966 rad + pos: -0.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11807 + color: '#1739A6FF' + - uid: 10434 components: - type: Transform - rot: 3.141592653589793 rad - pos: 75.5,3.5 + rot: 1.5707963267948966 rad + pos: -1.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11808 + color: '#1739A6FF' + - uid: 10443 components: - type: Transform - rot: 3.141592653589793 rad - pos: 74.5,3.5 + rot: -1.5707963267948966 rad + pos: -20.5,-12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11809 + color: '#1739A6FF' + - uid: 10449 components: - type: Transform - rot: 3.141592653589793 rad - pos: 73.5,3.5 + rot: -1.5707963267948966 rad + pos: 59.5,14.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 11873 + - uid: 10450 components: - type: Transform - pos: 67.5,-1.5 + pos: -8.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11874 + color: '#1739A6FF' + - uid: 10451 components: - type: Transform - pos: 68.5,-1.5 + pos: -8.5,-24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11875 + color: '#1739A6FF' + - uid: 10452 components: - type: Transform - rot: 3.141592653589793 rad - pos: 66.5,-1.5 + pos: -8.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11876 + color: '#1739A6FF' + - uid: 10453 components: - type: Transform - pos: 65.5,-1.5 + pos: -8.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11880 + color: '#1739A6FF' + - uid: 10454 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,0.5 + pos: -8.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11881 + color: '#1739A6FF' + - uid: 10455 components: - type: Transform - rot: 3.141592653589793 rad - pos: 67.5,0.5 + pos: -8.5,-29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12148 + color: '#1739A6FF' + - uid: 10456 components: - type: Transform rot: -1.5707963267948966 rad - pos: 34.5,13.5 + pos: -9.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12249 + color: '#1739A6FF' + - uid: 10457 components: - type: Transform rot: -1.5707963267948966 rad - pos: 33.5,14.5 + pos: -10.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' -- proto: GasPort - entities: - - uid: 188 + color: '#1739A6FF' + - uid: 10458 components: - type: Transform - pos: -11.5,-28.5 + rot: -1.5707963267948966 rad + pos: -11.5,-27.5 parent: 31 - - uid: 1329 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10459 components: - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,16.5 + rot: -1.5707963267948966 rad + pos: -12.5,-27.5 parent: 31 - - uid: 6502 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10460 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,9.5 + rot: -1.5707963267948966 rad + pos: -13.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6854 + color: '#1739A6FF' + - uid: 10461 components: - type: Transform - rot: 3.141592653589793 rad - pos: 65.5,6.5 + rot: -1.5707963267948966 rad + pos: -14.5,-27.5 parent: 31 - - uid: 6893 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10462 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,8.5 + rot: -1.5707963267948966 rad + pos: -15.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11147 + color: '#1739A6FF' + - uid: 10469 components: - type: Transform - pos: 63.5,4.5 + rot: -1.5707963267948966 rad + pos: 0.5,-16.5 parent: 31 - - uid: 11886 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10470 components: - type: Transform - rot: 3.141592653589793 rad - pos: 68.5,-3.5 + rot: -1.5707963267948966 rad + pos: -0.5,-16.5 parent: 31 - - uid: 11887 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10471 components: - type: Transform - rot: 3.141592653589793 rad - pos: 67.5,-3.5 + rot: -1.5707963267948966 rad + pos: -1.5,-16.5 parent: 31 - - uid: 12045 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10472 components: - type: Transform - rot: 3.141592653589793 rad - pos: 63.5,5.5 + rot: -1.5707963267948966 rad + pos: -2.5,-16.5 parent: 31 - - uid: 12153 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10479 components: - - type: MetaData - desc: A note attached reads, "Your gas supply is large, but finite. Buy more gas from Logistics if you run out." - name: gas input - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,13.5 + rot: -1.5707963267948966 rad + pos: 8.5,-17.5 parent: 31 - - uid: 12553 + - uid: 10483 components: - type: Transform - pos: 34.5,23.5 + pos: -7.5,-20.5 parent: 31 - - uid: 12554 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10484 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,10.5 + pos: -7.5,-21.5 parent: 31 - - uid: 12555 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10485 components: - type: Transform - pos: 36.5,23.5 + pos: -7.5,-22.5 parent: 31 - - uid: 12557 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10486 components: - type: Transform - pos: 38.5,23.5 + pos: -7.5,-23.5 parent: 31 - - uid: 12559 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10487 components: - type: Transform - pos: 40.5,23.5 + pos: -7.5,-24.5 parent: 31 - - uid: 12561 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10488 components: - type: Transform - pos: 42.5,23.5 + pos: -7.5,-25.5 parent: 31 - - uid: 12563 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10489 components: - type: Transform - pos: 44.5,23.5 + rot: -1.5707963267948966 rad + pos: -8.5,-26.5 parent: 31 - - uid: 12564 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10490 components: - type: Transform - pos: 44.5,22.5 + rot: -1.5707963267948966 rad + pos: -9.5,-26.5 parent: 31 - - uid: 12565 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10491 components: - type: Transform - pos: 46.5,23.5 + rot: -1.5707963267948966 rad + pos: -10.5,-26.5 parent: 31 -- proto: GasPressurePump - entities: - - uid: 555 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10492 components: - - type: MetaData - desc: A pump that moves tritium by pressure. - name: tritium pump - type: Transform - pos: 45.5,17.5 + rot: -1.5707963267948966 rad + pos: -11.5,-26.5 parent: 31 - - type: GasPressurePump - targetPressure: 1 - - uid: 842 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10493 components: - type: Transform rot: -1.5707963267948966 rad - pos: -12.5,-29.5 + pos: -12.5,-26.5 parent: 31 - - uid: 905 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10494 components: - - type: MetaData - desc: A pump that moves O2 by pressure. - name: O2 pump - type: Transform - pos: 37.5,17.5 + rot: -1.5707963267948966 rad + pos: -13.5,-26.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1513 + color: '#A01E16FF' + - uid: 10507 components: - - type: MetaData - desc: A pump that moves N2O by pressure. - name: N2O pump - type: Transform - pos: 39.5,17.5 + rot: -1.5707963267948966 rad + pos: 45.5,16.5 parent: 31 - - type: GasPressurePump - targetPressure: 1 - - uid: 1517 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 10508 components: - - type: MetaData - desc: A pump that moves N2 by pressure. - name: N2 pump - type: Transform - pos: 35.5,17.5 + pos: 64.5,0.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1570 - components: - - type: MetaData - desc: A pump that moves plasma by pressure. - name: plasma pump - - type: Transform - pos: 43.5,17.5 - parent: 31 - - type: GasPressurePump - targetPressure: 1 - - uid: 1573 + - uid: 10509 components: - - type: MetaData - desc: A pump that moves CO2 by pressure. - name: CO2 pump - type: Transform - pos: 41.5,17.5 + rot: -1.5707963267948966 rad + pos: 43.5,16.5 parent: 31 - - type: GasPressurePump - targetPressure: 1 - - uid: 3765 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 10510 components: - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,17.5 + rot: -1.5707963267948966 rad + pos: 41.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4124 + - uid: 10511 components: - - type: MetaData - name: atmos to active coolant - type: Transform - rot: 1.5707963267948966 rad - pos: 63.5,-1.5 + rot: 3.141592653589793 rad + pos: 41.5,16.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4363 + - uid: 10514 components: - - type: MetaData - name: passive coolant removal - type: Transform - pos: 63.5,6.5 + rot: 3.141592653589793 rad + pos: 42.5,17.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4388 + color: '#990000FF' + - uid: 10516 components: - - type: MetaData - name: waste to filters - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,11.5 + rot: -1.5707963267948966 rad + pos: 37.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 4389 + - uid: 10517 components: - - type: MetaData - name: atmos to distro - type: Transform - pos: 34.5,11.5 + rot: -1.5707963267948966 rad + pos: 39.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6351 + color: '#990000FF' + - uid: 10706 components: - - type: MetaData - desc: A pump that moves H2O by pressure. - name: H2O pump - type: Transform - pos: 47.5,17.5 + pos: 43.5,14.5 parent: 31 - - uid: 7663 + - type: AtmosPipeColor + color: '#F88379FF' + - uid: 10708 components: - type: Transform - pos: 9.5,-15.5 + rot: 3.141592653589793 rad + pos: -6.5,32.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9058 + color: '#A01E16FF' + - uid: 10741 components: - - type: MetaData - name: gas mix to Supermatter coolant - type: Transform - rot: 1.5707963267948966 rad - pos: 48.5,15.5 + rot: -1.5707963267948966 rad + pos: -0.5,28.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9079 + color: '#A01E16FF' + - uid: 10810 components: - - type: MetaData - name: supermatter waste gas - type: Transform - pos: 31.5,17.5 + rot: 3.141592653589793 rad + pos: -6.5,31.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11026 + color: '#A01E16FF' + - uid: 10821 components: - type: Transform rot: -1.5707963267948966 rad - pos: 44.5,13.5 + pos: -2.5,29.5 parent: 31 - - type: GasPressurePump - targetPressure: 4500 - - uid: 11080 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10889 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,11.5 + rot: 3.141592653589793 rad + pos: -5.5,31.5 parent: 31 - - type: GasPressurePump - targetPressure: 4500 - - uid: 11149 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10914 components: - - type: MetaData - name: passive coolant input - type: Transform - pos: 63.5,3.5 + pos: 49.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11294 + color: '#A01E16FF' + - uid: 10915 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,12.5 + rot: -1.5707963267948966 rad + pos: 50.5,-3.5 parent: 31 - - type: GasPressurePump - targetPressure: 4500 - - uid: 11884 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10916 components: - - type: MetaData - name: active coolant removal - type: Transform - pos: 67.5,-2.5 + rot: -1.5707963267948966 rad + pos: 51.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11885 + color: '#A01E16FF' + - uid: 10917 components: - type: Transform - rot: 3.141592653589793 rad - pos: 68.5,-2.5 + rot: -1.5707963267948966 rad + pos: 52.5,-3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12556 + color: '#A01E16FF' + - uid: 10918 components: - type: Transform rot: -1.5707963267948966 rad - pos: 67.5,10.5 + pos: 54.5,-3.5 parent: 31 -- proto: GasThermoMachineFreezer - entities: - - uid: 5552 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10919 components: - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,-5.5 + rot: -1.5707963267948966 rad + pos: 55.5,-3.5 parent: 31 - - uid: 6720 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10920 components: - type: Transform - pos: 62.5,9.5 + rot: 3.141592653589793 rad + pos: 53.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8125 + color: '#A01E16FF' + - uid: 10921 components: - type: Transform rot: 3.141592653589793 rad - pos: 7.5,-17.5 + pos: 53.5,-5.5 parent: 31 - - uid: 8860 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10922 components: - type: Transform - pos: 38.5,11.5 + rot: 3.141592653589793 rad + pos: 53.5,-6.5 parent: 31 - - uid: 11878 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10923 components: - type: Transform rot: 3.141592653589793 rad - pos: 64.5,-2.5 + pos: 53.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11879 + color: '#A01E16FF' + - uid: 10924 components: - type: Transform rot: 3.141592653589793 rad - pos: 65.5,-2.5 + pos: 53.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 12251 + color: '#A01E16FF' + - uid: 10925 components: - type: Transform - pos: 32.5,15.5 + rot: 3.141592653589793 rad + pos: 53.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' -- proto: GasThermoMachineHeater - entities: - - uid: 8861 + color: '#A01E16FF' + - uid: 10926 components: - type: Transform - pos: 39.5,11.5 + rot: 3.141592653589793 rad + pos: 53.5,-10.5 parent: 31 - - uid: 12252 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10927 components: - type: Transform - pos: 33.5,15.5 + rot: 1.5707963267948966 rad + pos: 54.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' -- proto: GasValve - entities: - - uid: 8455 + color: '#990000FF' + - uid: 10928 components: - type: Transform - rot: 3.141592653589793 rad - pos: 66.5,9.5 + rot: 1.5707963267948966 rad + pos: 55.5,-7.5 parent: 31 - - uid: 9077 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 10932 components: - - type: MetaData - name: atmos to core coolant - type: Transform - pos: 64.5,10.5 + pos: 48.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 9508 + color: '#1739A6FF' + - uid: 10933 components: - type: Transform - rot: 3.141592653589793 rad - pos: 48.5,17.5 + pos: 48.5,-3.5 parent: 31 - - type: GasValve - open: False - type: AtmosPipeColor - color: '#990000FF' -- proto: GasVentPump - entities: - - uid: 65 + color: '#1739A6FF' + - uid: 10934 components: - type: Transform - pos: 15.5,-7.5 + pos: 48.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 100 + color: '#1739A6FF' + - uid: 10935 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-17.5 + rot: -1.5707963267948966 rad + pos: 49.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 716 + color: '#1739A6FF' + - uid: 10936 components: - type: Transform - pos: 7.5,26.5 + rot: -1.5707963267948966 rad + pos: 50.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 977 + color: '#1739A6FF' + - uid: 10937 components: - type: Transform - pos: 10.5,26.5 + rot: -1.5707963267948966 rad + pos: 52.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1094 + color: '#1739A6FF' + - uid: 10938 components: - type: Transform rot: -1.5707963267948966 rad - pos: 21.5,-9.5 + pos: 53.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1230 + color: '#1739A6FF' + - uid: 10939 components: - type: Transform rot: -1.5707963267948966 rad - pos: 9.5,20.5 + pos: 54.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1305 + color: '#1739A6FF' + - uid: 10940 components: - type: Transform rot: -1.5707963267948966 rad - pos: -18.5,-12.5 + pos: 55.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 1688 + color: '#1739A6FF' + - uid: 10941 components: - type: Transform - pos: -36.5,18.5 + rot: -1.5707963267948966 rad + pos: 56.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 2213 + color: '#1739A6FF' + - uid: 10942 components: - type: Transform rot: -1.5707963267948966 rad - pos: 10.5,-14.5 + pos: 57.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3116 + color: '#1739A6FF' + - uid: 10944 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,9.5 + pos: 48.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3368 + color: '#1739A6FF' + - uid: 10945 components: - type: Transform - pos: -5.5,16.5 + pos: 48.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3419 + color: '#1739A6FF' + - uid: 10946 components: - type: Transform - pos: 12.5,26.5 + rot: -1.5707963267948966 rad + pos: 49.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 3835 + color: '#1739A6FF' + - uid: 10947 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-17.5 + rot: -1.5707963267948966 rad + pos: 50.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4013 + color: '#1739A6FF' + - uid: 10948 components: - type: Transform - rot: 3.141592653589793 rad - pos: -9.5,-22.5 + rot: -1.5707963267948966 rad + pos: 51.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4185 + color: '#1739A6FF' + - uid: 10949 components: - type: Transform - pos: -7.5,20.5 + rot: -1.5707963267948966 rad + pos: 52.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4266 + color: '#1739A6FF' + - uid: 10950 components: - type: Transform rot: -1.5707963267948966 rad - pos: 23.5,15.5 + pos: 53.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4267 + color: '#1739A6FF' + - uid: 10951 components: - type: Transform rot: -1.5707963267948966 rad - pos: 26.5,16.5 + pos: 54.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4303 + color: '#1739A6FF' + - uid: 10952 components: - type: Transform rot: 3.141592653589793 rad - pos: -2.5,-15.5 + pos: 47.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4468 + color: '#1739A6FF' + - uid: 10953 components: - type: Transform rot: 3.141592653589793 rad - pos: 15.5,-28.5 + pos: 47.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 4484 + color: '#1739A6FF' + - uid: 11026 components: - type: Transform rot: 3.141592653589793 rad - pos: -35.5,-9.5 + pos: -6.5,33.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5365 + color: '#A01E16FF' + - uid: 11027 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-5.5 + rot: 3.141592653589793 rad + pos: -5.5,32.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5472 + color: '#1739A6FF' + - uid: 11057 components: - type: Transform - pos: 3.5,6.5 + rot: 3.141592653589793 rad + pos: 49.5,16.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5476 + color: '#00FF00FF' + - uid: 11058 components: - type: Transform rot: 3.141592653589793 rad - pos: 22.5,4.5 + pos: -5.5,34.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5479 + color: '#1739A6FF' + - uid: 11063 components: - type: Transform - pos: 14.5,11.5 + pos: 46.5,20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5495 + color: '#990000FF' + - uid: 11064 components: - type: Transform - pos: 8.5,-0.5 + pos: 47.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5542 + - uid: 11065 components: - type: Transform - pos: -12.5,-0.5 + pos: 47.5,20.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5543 + - uid: 11066 components: - type: Transform - pos: -1.5,-0.5 + pos: 47.5,19.5 parent: 31 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5546 + - uid: 11067 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,-1.5 + pos: 47.5,18.5 + parent: 31 + - uid: 11068 + components: + - type: Transform + pos: 46.5,19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5605 + color: '#990000FF' + - uid: 11080 components: - type: Transform - pos: 16.5,-0.5 + rot: 3.141592653589793 rad + pos: -5.5,33.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5606 + color: '#1739A6FF' + - uid: 11110 components: - type: Transform rot: 3.141592653589793 rad - pos: 12.5,-9.5 + pos: -6.5,30.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5638 + color: '#A01E16FF' + - uid: 11113 components: - type: Transform rot: 3.141592653589793 rad - pos: 14.5,-16.5 + pos: 49.5,18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5666 + color: '#00FF00FF' + - uid: 11118 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,-5.5 + pos: 51.5,24.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5698 + color: '#ADD8E6FF' + - uid: 11121 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-25.5 + pos: 51.5,21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5700 + color: '#ADD8E6FF' + - uid: 11171 components: - type: Transform rot: 3.141592653589793 rad - pos: -12.5,-3.5 + pos: 62.5,3.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 5848 + - uid: 11289 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,19.5 + pos: -19.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5868 + color: '#A01E16FF' + - uid: 11292 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,24.5 + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 31 + - uid: 11293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,11.5 + parent: 31 + - uid: 11303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5869 + color: '#234FDEFF' + - uid: 11304 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,25.5 + rot: -1.5707963267948966 rad + pos: 35.5,14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5870 + color: '#234FDEFF' + - uid: 11401 components: - type: Transform - pos: 4.5,30.5 + rot: 1.5707963267948966 rad + pos: -38.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5929 + color: '#A01E16FF' + - uid: 11402 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,23.5 + rot: 1.5707963267948966 rad + pos: -36.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5941 + color: '#1739A6FF' + - uid: 11403 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,14.5 + rot: 1.5707963267948966 rad + pos: -37.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 5950 + color: '#1739A6FF' + - uid: 11404 components: - type: Transform rot: 1.5707963267948966 rad - pos: 7.5,9.5 + pos: -38.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6018 + color: '#1739A6FF' + - uid: 11405 components: - type: Transform rot: 1.5707963267948966 rad - pos: -12.5,15.5 + pos: -39.5,-4.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6033 + color: '#1739A6FF' + - uid: 11418 components: - type: Transform - pos: -12.5,19.5 + rot: 3.141592653589793 rad + pos: -25.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6041 + color: '#A01E16FF' + - uid: 11437 components: - type: Transform rot: -1.5707963267948966 rad - pos: -0.5,7.5 + pos: 36.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6043 + - uid: 11438 components: - type: Transform rot: 3.141592653589793 rad - pos: -2.5,4.5 + pos: -25.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6071 + color: '#A01E16FF' + - uid: 11445 components: - type: Transform rot: 3.141592653589793 rad - pos: -11.5,4.5 + pos: -25.5,-2.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6118 + color: '#A01E16FF' + - uid: 11449 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,8.5 + rot: -1.5707963267948966 rad + pos: -27.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6119 + color: '#A01E16FF' + - uid: 11469 components: - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,4.5 + rot: -1.5707963267948966 rad + pos: 60.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6138 + color: '#990000FF' + - uid: 11474 components: - type: Transform - rot: 3.141592653589793 rad - pos: -29.5,4.5 + rot: -1.5707963267948966 rad + pos: 56.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6151 + - uid: 11476 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,5.5 + rot: -1.5707963267948966 rad + pos: 53.5,15.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6169 + - uid: 11478 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-6.5 + rot: -1.5707963267948966 rad + pos: 60.5,14.5 parent: 31 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6184 + - uid: 11554 components: - type: Transform - rot: 3.141592653589793 rad - pos: 34.5,4.5 + rot: -1.5707963267948966 rad + pos: -10.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6197 + color: '#1739A6FF' + - uid: 11555 components: - type: Transform - rot: 3.141592653589793 rad - pos: 39.5,4.5 + rot: -1.5707963267948966 rad + pos: -11.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6262 + color: '#1739A6FF' + - uid: 11556 components: - type: Transform - rot: 3.141592653589793 rad - pos: 20.5,9.5 + rot: -1.5707963267948966 rad + pos: -12.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6268 + color: '#1739A6FF' + - uid: 11557 components: - type: Transform rot: -1.5707963267948966 rad - pos: 38.5,-0.5 + pos: -13.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6275 + color: '#1739A6FF' + - uid: 11558 components: - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,-2.5 + rot: -1.5707963267948966 rad + pos: -14.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6294 + color: '#1739A6FF' + - uid: 11559 components: - type: Transform - pos: 51.5,-4.5 + rot: -1.5707963267948966 rad + pos: -15.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6478 + color: '#1739A6FF' + - uid: 11560 components: - type: Transform rot: -1.5707963267948966 rad - pos: 47.5,8.5 + pos: -16.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7099 + color: '#1739A6FF' + - uid: 11561 components: - type: Transform - pos: 32.5,11.5 + rot: -1.5707963267948966 rad + pos: -17.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7185 + color: '#1739A6FF' + - uid: 11562 components: - type: Transform rot: -1.5707963267948966 rad - pos: 56.5,1.5 + pos: -18.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7335 + color: '#1739A6FF' + - uid: 11563 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-21.5 + pos: -19.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 7746 + color: '#1739A6FF' + - uid: 11564 components: - type: Transform - pos: -35.5,14.5 + rot: -1.5707963267948966 rad + pos: -20.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8384 + color: '#1739A6FF' + - uid: 11565 components: - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,-11.5 + rot: -1.5707963267948966 rad + pos: -21.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8417 + color: '#1739A6FF' + - uid: 11566 components: - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,17.5 + rot: -1.5707963267948966 rad + pos: -22.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8794 + color: '#1739A6FF' + - uid: 11568 components: - type: Transform rot: 1.5707963267948966 rad - pos: -16.5,11.5 + pos: -24.5,-18.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8873 + color: '#1739A6FF' + - uid: 11575 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,13.5 + rot: 3.141592653589793 rad + pos: -23.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8875 + color: '#1739A6FF' + - uid: 11576 components: - type: Transform rot: 3.141592653589793 rad - pos: 28.5,4.5 + pos: -23.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8880 + color: '#1739A6FF' + - uid: 11577 components: - type: Transform - pos: 46.5,3.5 + rot: 3.141592653589793 rad + pos: -22.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 8944 + color: '#A01E16FF' + - uid: 11578 components: - type: Transform rot: 3.141592653589793 rad - pos: 10.5,4.5 + pos: -22.5,-20.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10376 + color: '#A01E16FF' + - uid: 11579 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,-30.5 + pos: -22.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10377 + color: '#A01E16FF' + - uid: 11580 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-30.5 + rot: 1.5707963267948966 rad + pos: -24.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10386 + color: '#1739A6FF' + - uid: 11581 components: - type: Transform rot: 1.5707963267948966 rad - pos: -25.5,-3.5 + pos: -25.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10407 + color: '#1739A6FF' + - uid: 11584 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-14.5 + pos: -25.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10424 + color: '#A01E16FF' + - uid: 11585 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,-30.5 + pos: -26.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10427 + color: '#1739A6FF' + - uid: 11586 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,-27.5 + pos: -26.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10929 + color: '#1739A6FF' + - uid: 11587 components: - type: Transform rot: -1.5707963267948966 rad - pos: 56.5,-9.5 + pos: -24.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10930 + color: '#A01E16FF' + - uid: 11588 components: - type: Transform rot: -1.5707963267948966 rad - pos: 58.5,-5.5 + pos: -23.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11399 + color: '#A01E16FF' + - uid: 11589 components: - type: Transform - pos: -40.5,-3.5 + rot: 3.141592653589793 rad + pos: -23.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11570 + color: '#1739A6FF' + - uid: 11593 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-18.5 + pos: -22.5,-26.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11571 + color: '#1739A6FF' + - uid: 11594 + components: + - type: Transform + pos: -22.5,-24.5 + parent: 31 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11596 components: - type: Transform rot: 3.141592653589793 rad - pos: -26.5,-24.5 + pos: 48.5,-20.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11608 + color: '#1739A6FF' + - uid: 11598 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,-22.5 + rot: -1.5707963267948966 rad + pos: -28.5,-21.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#0055CCFF' -- proto: GasVentScrubber - entities: - - uid: 95 + color: '#1739A6FF' + - uid: 11599 components: - type: Transform - rot: 3.141592653589793 rad - pos: 15.5,-11.5 + rot: -1.5707963267948966 rad + pos: -28.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 753 + color: '#A01E16FF' + - uid: 11600 components: - type: Transform rot: -1.5707963267948966 rad - pos: 22.5,-11.5 + pos: -29.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 867 + color: '#A01E16FF' + - uid: 11601 components: - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,23.5 + rot: -1.5707963267948966 rad + pos: -29.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1029 + color: '#1739A6FF' + - uid: 11602 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,-16.5 + pos: -30.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1032 + color: '#1739A6FF' + - uid: 11606 components: - type: Transform - rot: 3.141592653589793 rad - pos: 10.5,23.5 + rot: 1.5707963267948966 rad + pos: -27.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1140 + color: '#1739A6FF' + - uid: 11607 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-11.5 + rot: 1.5707963267948966 rad + pos: -27.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1542 + color: '#A01E16FF' + - uid: 11610 components: - type: Transform - pos: 35.5,4.5 + rot: 1.5707963267948966 rad + pos: -26.5,-22.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 2208 + color: '#A01E16FF' + - uid: 11635 components: - type: Transform - pos: -38.5,18.5 + pos: -26.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3117 + color: '#1739A6FF' + - uid: 11637 components: - type: Transform - pos: 21.5,12.5 + rot: 1.5707963267948966 rad + pos: -25.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3118 + color: '#1739A6FF' + - uid: 11639 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 26.5,10.5 + rot: 1.5707963267948966 rad + pos: -24.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3274 + color: '#1739A6FF' + - uid: 11641 components: - type: Transform - pos: 41.5,4.5 + rot: 1.5707963267948966 rad + pos: -23.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 3840 + color: '#1739A6FF' + - uid: 11654 components: - type: Transform rot: 3.141592653589793 rad - pos: 18.5,-18.5 + pos: -24.5,-6.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4279 + color: '#A01E16FF' + - uid: 11660 components: - type: Transform rot: -1.5707963267948966 rad - pos: 26.5,17.5 + pos: -25.5,-10.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4436 + color: '#1739A6FF' + - uid: 11662 components: - type: Transform rot: 3.141592653589793 rad - pos: -3.5,-17.5 + pos: -26.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4486 + color: '#1739A6FF' + - uid: 11669 components: - type: Transform rot: 3.141592653589793 rad - pos: -37.5,-11.5 + pos: -26.5,-8.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4701 + color: '#1739A6FF' + - uid: 11670 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,21.5 + rot: 3.141592653589793 rad + pos: -26.5,-9.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 4783 + color: '#1739A6FF' + - uid: 11712 components: - type: Transform rot: -1.5707963267948966 rad - pos: 9.5,-23.5 + pos: -27.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5332 + color: '#A01E16FF' + - uid: 11713 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,-6.5 + pos: -28.5,-7.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5473 + color: '#A01E16FF' + - uid: 11759 components: - type: Transform rot: 3.141592653589793 rad - pos: 3.5,2.5 + pos: 55.5,21.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5474 + - uid: 11760 components: - type: Transform - pos: 7.5,4.5 + rot: 3.141592653589793 rad + pos: 55.5,20.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5477 + - uid: 11761 components: - type: Transform - pos: 21.5,4.5 + rot: 3.141592653589793 rad + pos: 55.5,19.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5478 + - uid: 11762 components: - type: Transform rot: 3.141592653589793 rad - pos: 16.5,10.5 + pos: 55.5,18.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5496 + - uid: 11763 components: - type: Transform rot: 3.141592653589793 rad - pos: 9.5,-0.5 + pos: 55.5,17.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5541 + - uid: 11764 components: - type: Transform rot: 3.141592653589793 rad - pos: -13.5,-0.5 + pos: 55.5,16.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5544 + - uid: 11765 components: - type: Transform rot: 3.141592653589793 rad - pos: -8.5,-0.5 + pos: 55.5,15.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5545 + - uid: 11766 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,0.5 + rot: 3.141592653589793 rad + pos: 55.5,14.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5597 + - uid: 11767 components: - type: Transform - pos: 17.5,-1.5 + rot: 1.5707963267948966 rad + pos: 56.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5607 + - uid: 11768 components: - type: Transform - rot: 3.141592653589793 rad - pos: 12.5,-11.5 + rot: 1.5707963267948966 rad + pos: 57.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5637 + - uid: 11769 components: - type: Transform rot: 1.5707963267948966 rad - pos: 14.5,-14.5 + pos: 58.5,13.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5665 + - uid: 11802 components: - type: Transform rot: -1.5707963267948966 rad - pos: 22.5,-6.5 + pos: 72.5,10.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5704 + - uid: 11803 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,-28.5 + pos: 73.5,10.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5765 + - uid: 11804 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,13.5 + pos: 74.5,10.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5849 + - uid: 11805 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,18.5 + rot: 3.141592653589793 rad + pos: 75.5,9.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 5864 + - uid: 11860 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,24.5 + rot: 3.141592653589793 rad + pos: 50.5,-21.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5865 + color: '#A01E16FF' + - uid: 11870 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,23.5 + rot: 3.141592653589793 rad + pos: 72.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5871 + color: '#0055CCFF' + - uid: 11871 components: - type: Transform - pos: 2.5,30.5 + rot: 3.141592653589793 rad + pos: 72.5,1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5883 + color: '#0055CCFF' + - uid: 11872 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,17.5 + rot: 1.5707963267948966 rad + pos: 69.5,-1.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 5951 + color: '#0055CCFF' + - uid: 11883 components: - type: Transform - pos: 9.5,9.5 + pos: 66.5,-0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6024 + color: '#0055CCFF' + - uid: 11935 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,14.5 + pos: 51.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6032 + color: '#A01E16FF' + - uid: 11936 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,20.5 + pos: 47.5,-23.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6042 + color: '#1739A6FF' + - uid: 11939 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,8.5 + pos: 47.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6044 + color: '#1739A6FF' + - uid: 12016 components: - type: Transform - pos: -1.5,4.5 + pos: 51.5,-25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6080 + color: '#A01E16FF' + - uid: 12067 components: - type: Transform - pos: -14.5,4.5 + pos: 48.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6117 + color: '#1739A6FF' + - uid: 12068 components: - type: Transform - pos: -27.5,10.5 + pos: 48.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6120 + color: '#1739A6FF' + - uid: 12069 components: - type: Transform - pos: -22.5,4.5 + pos: 50.5,-27.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6137 + color: '#A01E16FF' + - uid: 12071 components: - type: Transform - pos: -30.5,4.5 + pos: 50.5,-28.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 6152 + color: '#A01E16FF' + - uid: 12119 components: - type: Transform - pos: -36.5,4.5 + pos: 66.5,7.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 6168 + - uid: 12120 components: - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,-0.5 + pos: 66.5,8.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 6267 + - uid: 12126 components: - type: Transform rot: 3.141592653589793 rad - pos: 39.5,-0.5 + pos: 66.5,11.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6276 + - uid: 12127 components: - type: Transform rot: 3.141592653589793 rad - pos: 33.5,-1.5 + pos: 66.5,12.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6413 + - uid: 12143 components: - type: Transform rot: -1.5707963267948966 rad - pos: 47.5,9.5 + pos: 46.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6552 + - uid: 12144 components: - type: Transform rot: -1.5707963267948966 rad - pos: 34.5,9.5 + pos: 44.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6581 + - uid: 12145 components: - type: Transform rot: -1.5707963267948966 rad - pos: 21.5,15.5 + pos: 42.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7211 + - uid: 12146 components: - type: Transform rot: -1.5707963267948966 rad - pos: 56.5,3.5 + pos: 40.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7673 + - uid: 12147 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-13.5 + rot: -1.5707963267948966 rad + pos: 38.5,15.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 7745 + - uid: 12149 components: - type: Transform - pos: -37.5,14.5 + rot: 3.141592653589793 rad + pos: 34.5,12.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 8416 + color: '#0055CCFF' + - uid: 12150 components: - type: Transform - pos: 7.5,19.5 + rot: 3.141592653589793 rad + pos: 31.5,15.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 8438 + - uid: 12151 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-19.5 + rot: 3.141592653589793 rad + pos: 31.5,14.5 parent: 31 - type: AtmosPipeColor color: '#990000FF' - - uid: 8795 + - uid: 12541 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,10.5 + pos: 38.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8874 + - uid: 12542 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,12.5 + pos: 40.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8876 + - uid: 12543 components: - type: Transform - pos: 26.5,4.5 + pos: 42.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 8879 + - uid: 12544 components: - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,2.5 + pos: 44.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10252 + - uid: 12545 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -36.5,-5.5 + pos: 46.5,21.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10375 + - uid: 12546 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-28.5 + pos: 46.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10385 + - uid: 12547 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-3.5 + pos: 44.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10406 + - uid: 12548 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-13.5 + pos: 42.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10420 + - uid: 12549 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,-19.5 + pos: 40.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10425 + - uid: 12550 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,-27.5 + pos: 38.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10426 + - uid: 12551 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,-26.5 + pos: 36.5,22.5 parent: 31 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 10495 +- proto: GasPipeTJunction + entities: + - uid: 53 components: - type: Transform rot: 3.141592653589793 rad - pos: -32.5,-14.5 + pos: 10.5,25.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10906 + color: '#1739A6FF' + - uid: 97 components: - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,-4.5 + rot: -1.5707963267948966 rad + pos: 4.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10907 + color: '#1739A6FF' + - uid: 351 components: - type: Transform - rot: 3.141592653589793 rad - pos: 56.5,-4.5 + rot: 1.5707963267948966 rad + pos: -23.5,-11.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10908 + color: '#A01E16FF' + - uid: 536 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,-7.5 + pos: -3.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10909 + color: '#A01E16FF' + - uid: 599 components: - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-11.5 + rot: 1.5707963267948966 rad + pos: -26.5,0.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11400 + color: '#A01E16FF' + - uid: 799 components: - type: Transform rot: 1.5707963267948966 rad - pos: -40.5,-5.5 + pos: 50.5,-16.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11569 + color: '#A01E16FF' + - uid: 926 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-18.5 + rot: 1.5707963267948966 rad + pos: -9.5,-21.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11572 + color: '#1739A6FF' + - uid: 1200 components: - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,-24.5 + pos: 49.5,26.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11596 + color: '#ADD8E6FF' + - uid: 1231 components: - type: Transform rot: -1.5707963267948966 rad - pos: -21.5,-25.5 + pos: 39.5,5.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11597 + color: '#1739A6FF' + - uid: 1723 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-27.5 + pos: 37.5,5.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11609 + color: '#1739A6FF' + - uid: 1796 components: - type: Transform - rot: 3.141592653589793 rad - pos: -30.5,-23.5 + rot: 1.5707963267948966 rad + pos: -24.5,-12.5 parent: 31 - - type: DeviceNetwork - deviceLists: - - 11611 - type: AtmosPipeColor - color: '#990000FF' -- proto: GasVolumePump - entities: - - uid: 4547 + color: '#1739A6FF' + - uid: 2002 components: - - type: MetaData - name: passive coolant volumetric pump - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,8.5 + rot: 1.5707963267948966 rad + pos: -24.5,-5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 10104 + color: '#A01E16FF' + - uid: 2282 components: - - type: MetaData - name: passive coolant volumetric pump - type: Transform rot: -1.5707963267948966 rad - pos: 63.5,8.5 - parent: 31 - - uid: 10503 - components: - - type: Transform - pos: 76.5,4.5 + pos: -5.5,15.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10504 + color: '#1739A6FF' + - uid: 2482 components: - type: Transform - pos: 75.5,4.5 + pos: -5.5,29.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10505 + color: '#A01E16FF' + - uid: 2694 components: - type: Transform - pos: 74.5,4.5 + pos: -27.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 10506 + color: '#1739A6FF' + - uid: 2736 components: - type: Transform - pos: 73.5,4.5 + rot: 3.141592653589793 rad + pos: -23.5,3.5 parent: 31 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 11781 + color: '#A01E16FF' + - uid: 2737 components: - type: Transform - pos: 73.5,7.5 + rot: 3.141592653589793 rad + pos: -24.5,5.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11782 + color: '#1739A6FF' + - uid: 2868 components: - type: Transform - pos: 74.5,7.5 + rot: 1.5707963267948966 rad + pos: 4.5,-19.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11783 + color: '#1739A6FF' + - uid: 3386 components: - type: Transform - pos: 75.5,7.5 + rot: -1.5707963267948966 rad + pos: 18.5,-14.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' - - uid: 11784 + color: '#A01E16FF' + - uid: 3389 components: - type: Transform - pos: 76.5,7.5 + rot: -1.5707963267948966 rad + pos: 19.5,-15.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' -- proto: Gauze - entities: - - uid: 1407 - components: - - type: Transform - pos: 26.671059,21.801102 - parent: 31 - - uid: 10830 - components: - - type: Transform - pos: 12.447606,-4.278471 - parent: 31 -- proto: GeigerCounterWallMount - entities: - - uid: 4350 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 65.5,3.5 - parent: 31 - - uid: 6954 + color: '#1739A6FF' + - uid: 3390 components: - type: Transform rot: -1.5707963267948966 rad - pos: 54.5,3.5 + pos: -24.5,8.5 parent: 31 - - uid: 6956 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3420 components: - type: Transform rot: 1.5707963267948966 rad - pos: 58.5,4.5 + pos: 18.5,-11.5 parent: 31 - - uid: 9461 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3508 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,-30.5 + rot: 3.141592653589793 rad + pos: 37.5,14.5 parent: 31 -- proto: GlimmerProber - entities: - - uid: 11651 + - type: AtmosPipeColor + color: '#234FDEFF' + - uid: 3675 components: - type: Transform - pos: -13.5,-24.5 + rot: -1.5707963267948966 rad + pos: 2.5,28.5 parent: 31 -- proto: GlowstickBase - entities: - - uid: 8848 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3707 components: - type: Transform rot: 1.5707963267948966 rad - pos: 27.737583,15.662895 + pos: -12.5,-1.5 parent: 31 - - uid: 8999 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3828 components: - type: Transform rot: 1.5707963267948966 rad - pos: 27.649036,15.662895 + pos: 51.5,20.5 parent: 31 - - uid: 9037 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 3834 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 27.826128,15.662895 + rot: -1.5707963267948966 rad + pos: 8.5,-13.5 parent: 31 -- proto: GlowstickBlue - entities: - - uid: 10987 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3860 components: - type: Transform - pos: 52.729786,-1.2094907 + rot: -1.5707963267948966 rad + pos: -37.5,13.5 parent: 31 -- proto: GravityGenerator - entities: - - uid: 7696 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3883 components: - type: Transform - pos: 58.5,-2.5 + pos: 50.5,26.5 parent: 31 -- proto: Grille - entities: - - uid: 47 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 3940 components: - type: Transform - pos: 19.5,20.5 + rot: -1.5707963267948966 rad + pos: -35.5,13.5 parent: 31 - - uid: 64 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3974 components: - type: Transform - pos: 5.5,-4.5 + pos: -26.5,3.5 parent: 31 - - uid: 77 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4084 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,-14.5 + rot: 3.141592653589793 rad + pos: -27.5,-4.5 parent: 31 - - uid: 78 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4166 components: - type: Transform - pos: 5.5,-5.5 + rot: -1.5707963267948966 rad + pos: 4.5,30.5 parent: 31 - - uid: 101 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4181 components: - type: Transform - pos: -48.5,-12.5 + pos: -8.5,-21.5 parent: 31 - - uid: 138 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4347 components: - type: Transform - pos: -49.5,-12.5 + rot: 1.5707963267948966 rad + pos: 9.5,-14.5 parent: 31 - - uid: 155 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4372 components: - type: Transform - pos: 44.5,-20.5 + rot: 3.141592653589793 rad + pos: 63.5,2.5 parent: 31 - - uid: 156 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 4552 components: - type: Transform - pos: 45.5,-19.5 + pos: 68.5,9.5 parent: 31 - - uid: 249 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4571 components: - type: Transform - pos: 11.5,-16.5 + rot: 1.5707963267948966 rad + pos: 69.5,7.5 parent: 31 - - uid: 255 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4596 components: - type: Transform - pos: 11.5,-6.5 + rot: 1.5707963267948966 rad + pos: 50.5,-19.5 parent: 31 - - uid: 267 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4650 components: - type: Transform - pos: -50.5,-8.5 + pos: 67.5,4.5 parent: 31 - - uid: 338 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 4708 components: - type: Transform - pos: -8.5,6.5 + rot: -1.5707963267948966 rad + pos: 33.5,8.5 parent: 31 - - uid: 360 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4731 components: - type: Transform - pos: -13.5,6.5 + pos: 38.5,3.5 parent: 31 - - uid: 450 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5064 components: - type: Transform - pos: -23.5,26.5 + rot: 3.141592653589793 rad + pos: 7.5,25.5 parent: 31 - - uid: 469 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5342 components: - type: Transform - pos: -35.5,11.5 + rot: -1.5707963267948966 rad + pos: 4.5,-17.5 parent: 31 - - uid: 526 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5374 components: - type: Transform rot: 1.5707963267948966 rad - pos: -15.5,-0.5 + pos: 2.5,-23.5 parent: 31 - - uid: 571 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5380 components: - type: Transform - pos: 2.5,22.5 + pos: 8.5,-20.5 parent: 31 - - uid: 608 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5392 components: - type: Transform - pos: -14.5,-18.5 + pos: 3.5,3.5 parent: 31 - - uid: 653 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5396 components: - type: Transform - pos: 39.5,26.5 + rot: 3.141592653589793 rad + pos: 7.5,3.5 parent: 31 - - uid: 655 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5397 components: - type: Transform - pos: 35.5,26.5 + rot: 3.141592653589793 rad + pos: 9.5,3.5 parent: 31 - - uid: 657 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5399 components: - type: Transform - pos: -37.5,11.5 + rot: 3.141592653589793 rad + pos: 8.5,5.5 parent: 31 - - uid: 665 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5405 components: - type: Transform - pos: -41.5,5.5 + rot: 3.141592653589793 rad + pos: 13.5,5.5 parent: 31 - - uid: 711 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5419 components: - type: Transform - pos: 17.5,20.5 + rot: 3.141592653589793 rad + pos: 15.5,3.5 parent: 31 - - uid: 749 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5422 components: - type: Transform - pos: -44.5,1.5 + pos: 10.5,5.5 parent: 31 - - uid: 751 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5424 components: - type: Transform - pos: -42.5,1.5 + rot: 3.141592653589793 rad + pos: 21.5,3.5 parent: 31 - - uid: 754 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5425 components: - type: Transform - pos: 36.5,26.5 + pos: 22.5,5.5 parent: 31 - - uid: 757 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5430 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,-14.5 + pos: 28.5,5.5 parent: 31 - - uid: 772 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5439 components: - type: Transform - pos: -42.5,7.5 + rot: 3.141592653589793 rad + pos: 26.5,3.5 parent: 31 - - uid: 801 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5458 components: - type: Transform - pos: -6.5,-22.5 + rot: 3.141592653589793 rad + pos: 14.5,10.5 parent: 31 - - uid: 811 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5459 components: - type: Transform - pos: -40.5,3.5 + pos: 16.5,11.5 parent: 31 - - uid: 835 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5464 components: - type: Transform - pos: 52.5,-2.5 + rot: 3.141592653589793 rad + pos: 21.5,11.5 parent: 31 - - uid: 855 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5465 components: - type: Transform - pos: 52.5,-6.5 + rot: 3.141592653589793 rad + pos: 22.5,10.5 parent: 31 - - uid: 856 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5470 components: - type: Transform - pos: -42.5,3.5 + rot: 3.141592653589793 rad + pos: 3.5,5.5 parent: 31 - - uid: 858 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5471 components: - type: Transform - pos: -44.5,9.5 + pos: 20.5,10.5 parent: 31 - - uid: 877 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5481 components: - type: Transform - pos: -4.5,32.5 + rot: 3.141592653589793 rad + pos: 20.5,11.5 parent: 31 - - uid: 904 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5488 components: - type: Transform - pos: 40.5,20.5 + pos: 9.5,0.5 parent: 31 - - uid: 937 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5491 components: - type: Transform - pos: 19.5,21.5 + rot: 3.141592653589793 rad + pos: 8.5,-1.5 parent: 31 - - uid: 1016 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5500 components: - type: Transform - pos: 4.5,22.5 + pos: -8.5,0.5 parent: 31 - - uid: 1022 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5516 components: - type: Transform - pos: -40.5,1.5 + rot: 3.141592653589793 rad + pos: -1.5,-1.5 parent: 31 - - uid: 1106 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5528 components: - type: Transform - pos: 44.5,20.5 + pos: -13.5,0.5 parent: 31 - - uid: 1131 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5571 components: - type: Transform - pos: -41.5,4.5 + rot: 3.141592653589793 rad + pos: 11.5,-10.5 parent: 31 - - uid: 1133 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5572 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,18.5 + rot: 3.141592653589793 rad + pos: 10.5,-8.5 parent: 31 - - uid: 1180 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5574 components: - type: Transform - pos: -41.5,9.5 + rot: 3.141592653589793 rad + pos: 15.5,-8.5 parent: 31 - - uid: 1192 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5577 components: - type: Transform - pos: -19.5,2.5 + pos: 15.5,-10.5 parent: 31 - - uid: 1193 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5579 components: - type: Transform - pos: -18.5,2.5 + pos: 12.5,-10.5 parent: 31 - - uid: 1225 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5584 components: - type: Transform - pos: 25.5,10.5 + pos: 12.5,-8.5 parent: 31 - - uid: 1237 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5586 components: - type: Transform - pos: -42.5,9.5 + rot: 3.141592653589793 rad + pos: 16.5,-8.5 parent: 31 - - uid: 1278 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5587 components: - type: Transform - pos: -10.5,19.5 + rot: 3.141592653589793 rad + pos: 17.5,-10.5 parent: 31 - - uid: 1396 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5592 components: - type: Transform - pos: 10.5,31.5 + rot: 1.5707963267948966 rad + pos: 17.5,-6.5 parent: 31 - - uid: 1414 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5600 components: - type: Transform - pos: -9.5,7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-5.5 parent: 31 - - uid: 1416 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5626 components: - type: Transform - pos: -13.5,9.5 + pos: 15.5,-15.5 parent: 31 - - uid: 1430 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5686 components: - type: Transform - pos: -43.5,3.5 + rot: -1.5707963267948966 rad + pos: 14.5,-20.5 parent: 31 - - uid: 1434 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5714 components: - type: Transform rot: -1.5707963267948966 rad - pos: -24.5,-17.5 + pos: 48.5,-19.5 parent: 31 - - uid: 1435 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5715 components: - type: Transform rot: -1.5707963267948966 rad - pos: -21.5,-17.5 + pos: 4.5,-14.5 parent: 31 - - uid: 1436 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5801 components: - type: Transform - rot: 3.141592653589793 rad - pos: 23.5,-8.5 + rot: 1.5707963267948966 rad + pos: 2.5,12.5 parent: 31 - - uid: 1443 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5806 components: - type: Transform - pos: 37.5,26.5 + rot: 1.5707963267948966 rad + pos: 2.5,17.5 parent: 31 - - uid: 1447 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5807 components: - type: Transform - pos: 20.5,-10.5 + rot: -1.5707963267948966 rad + pos: 4.5,19.5 parent: 31 - - uid: 1451 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5822 components: - type: Transform - pos: -44.5,3.5 + rot: 1.5707963267948966 rad + pos: 2.5,23.5 parent: 31 - - uid: 1452 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5829 components: - type: Transform - pos: -41.5,1.5 + rot: 1.5707963267948966 rad + pos: 2.5,18.5 parent: 31 - - uid: 1453 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5834 components: - type: Transform - pos: -40.5,7.5 + rot: 1.5707963267948966 rad + pos: 4.5,14.5 parent: 31 - - uid: 1454 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5835 components: - type: Transform - pos: -43.5,7.5 + rot: -1.5707963267948966 rad + pos: 4.5,13.5 parent: 31 - - uid: 1455 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5856 components: - type: Transform - pos: -40.5,9.5 + pos: 3.5,25.5 parent: 31 - - uid: 1456 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5867 components: - type: Transform - pos: -41.5,3.5 + pos: 7.5,24.5 parent: 31 - - uid: 1460 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5881 components: - type: Transform - pos: -27.5,6.5 + rot: 3.141592653589793 rad + pos: 7.5,17.5 parent: 31 - - uid: 1462 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5955 components: - type: Transform - pos: -29.5,6.5 + rot: 3.141592653589793 rad + pos: -1.5,3.5 parent: 31 - - uid: 1468 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5960 components: - type: Transform - pos: 20.5,-9.5 + pos: -2.5,5.5 parent: 31 - - uid: 1489 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5963 components: - type: Transform - pos: -11.5,8.5 + rot: 3.141592653589793 rad + pos: -4.5,5.5 parent: 31 - - uid: 1491 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5964 components: - type: Transform - pos: 13.5,-4.5 + rot: 3.141592653589793 rad + pos: -5.5,3.5 parent: 31 - - uid: 1522 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5969 components: - type: Transform - pos: 46.5,-19.5 + rot: 1.5707963267948966 rad + pos: -5.5,8.5 parent: 31 - - uid: 1526 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5973 components: - type: Transform - pos: 23.5,21.5 + rot: 1.5707963267948966 rad + pos: -4.5,7.5 parent: 31 - - uid: 1529 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5980 components: - type: Transform - pos: 44.5,-21.5 + rot: 3.141592653589793 rad + pos: -8.5,10.5 parent: 31 - - uid: 1547 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5989 components: - type: Transform - pos: 42.5,20.5 + rot: 3.141592653589793 rad + pos: -7.5,15.5 parent: 31 - - uid: 1548 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6000 components: - type: Transform - pos: 38.5,20.5 + rot: -1.5707963267948966 rad + pos: -8.5,20.5 parent: 31 - - uid: 1592 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6010 components: - type: Transform - pos: 19.5,14.5 + rot: 3.141592653589793 rad + pos: -11.5,15.5 parent: 31 - - uid: 1602 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6050 components: - type: Transform - pos: 36.5,-0.5 + rot: 3.141592653589793 rad + pos: -14.5,3.5 parent: 31 - - uid: 1604 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6051 components: - type: Transform - rot: 3.141592653589793 rad - pos: 24.5,-8.5 + pos: -11.5,5.5 parent: 31 - - uid: 1614 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6079 components: - type: Transform - pos: 2.5,-35.5 + rot: 3.141592653589793 rad + pos: -22.5,3.5 parent: 31 - - uid: 1629 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6084 components: - type: Transform - pos: 37.5,1.5 + pos: -25.5,5.5 parent: 31 - - uid: 1663 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6112 components: - type: Transform - pos: 17.5,-14.5 + pos: -16.5,5.5 parent: 31 - - uid: 1666 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6114 components: - type: Transform - pos: 49.5,-6.5 + rot: 1.5707963267948966 rad + pos: 7.5,-16.5 parent: 31 - - uid: 1692 + - uid: 6135 components: - type: Transform - pos: -43.5,1.5 + rot: 3.141592653589793 rad + pos: -30.5,3.5 parent: 31 - - uid: 1706 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6136 components: - type: Transform - pos: 41.5,26.5 + pos: -29.5,5.5 parent: 31 - - uid: 1708 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6199 components: - type: Transform - pos: 17.5,21.5 + rot: 3.141592653589793 rad + pos: 41.5,3.5 parent: 31 - - uid: 1709 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6204 components: - type: Transform - pos: 34.5,7.5 + rot: -1.5707963267948966 rad + pos: 44.5,6.5 parent: 31 - - uid: 1710 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6213 components: - type: Transform - pos: 32.5,7.5 + rot: 1.5707963267948966 rad + pos: 20.5,15.5 parent: 31 - - uid: 1720 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6216 components: - type: Transform - pos: 32.5,1.5 + rot: 3.141592653589793 rad + pos: 43.5,3.5 parent: 31 - - uid: 1721 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6223 components: - type: Transform - pos: 34.5,1.5 + rot: 3.141592653589793 rad + pos: 46.5,2.5 parent: 31 - - uid: 1722 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6226 components: - type: Transform - pos: 30.5,4.5 + pos: 47.5,3.5 parent: 31 - - uid: 1728 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6249 components: - type: Transform - pos: 1.5,-33.5 + rot: 1.5707963267948966 rad + pos: 22.5,15.5 parent: 31 - - uid: 1741 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6334 components: - type: Transform - pos: 44.5,-19.5 + rot: 1.5707963267948966 rad + pos: 32.5,10.5 parent: 31 - - uid: 1757 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6532 components: - type: Transform - pos: -49.5,-8.5 + rot: -1.5707963267948966 rad + pos: -23.5,-18.5 parent: 31 - - uid: 1759 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6571 components: - type: Transform - pos: 19.5,6.5 + rot: 1.5707963267948966 rad + pos: -22.5,-18.5 parent: 31 - - uid: 1760 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6748 components: - type: Transform - pos: 20.5,6.5 + rot: 1.5707963267948966 rad + pos: 62.5,8.5 parent: 31 - - uid: 1761 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 6756 components: - type: Transform - pos: 21.5,6.5 + rot: 1.5707963267948966 rad + pos: 62.5,7.5 parent: 31 - - uid: 1762 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 6763 components: - type: Transform - pos: 22.5,6.5 + rot: 1.5707963267948966 rad + pos: 66.5,4.5 parent: 31 - - uid: 1777 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 6828 components: - type: Transform - pos: 17.5,9.5 + pos: 69.5,9.5 parent: 31 - - uid: 1803 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 6943 components: - type: Transform - pos: 8.5,6.5 + pos: 49.5,3.5 parent: 31 - - uid: 1871 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6944 components: - type: Transform - pos: -1.5,27.5 + pos: 48.5,2.5 parent: 31 - - uid: 1872 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6980 components: - type: Transform - pos: -0.5,27.5 + pos: -19.5,3.5 parent: 31 - - uid: 1874 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6985 components: - type: Transform - pos: 10.5,29.5 + rot: 1.5707963267948966 rad + pos: -8.5,13.5 parent: 31 - - uid: 1875 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7095 components: - type: Transform - pos: 9.5,31.5 + rot: 3.141592653589793 rad + pos: -22.5,19.5 parent: 31 - - uid: 1879 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7159 components: - type: Transform - pos: 7.5,33.5 + pos: 8.5,20.5 parent: 31 - - uid: 1880 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7352 components: - type: Transform - pos: 6.5,33.5 + rot: 1.5707963267948966 rad + pos: 66.5,6.5 parent: 31 - - uid: 1881 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 7369 components: - type: Transform - pos: 5.5,33.5 + rot: -1.5707963267948966 rad + pos: 9.5,-16.5 parent: 31 - - uid: 1882 + - uid: 7412 components: - type: Transform - pos: 4.5,33.5 + rot: 3.141592653589793 rad + pos: 2.5,-28.5 parent: 31 - - uid: 1883 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7465 components: - type: Transform - pos: 3.5,33.5 + rot: -1.5707963267948966 rad + pos: 4.5,-29.5 parent: 31 - - uid: 1884 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7504 components: - type: Transform - pos: 2.5,33.5 + rot: -1.5707963267948966 rad + pos: -36.5,0.5 parent: 31 - - uid: 1885 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7547 components: - type: Transform - pos: 1.5,33.5 + pos: 64.5,-1.5 parent: 31 - - uid: 1886 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 7685 components: - type: Transform - pos: 0.5,33.5 + rot: 3.141592653589793 rad + pos: -4.5,30.5 parent: 31 - - uid: 1887 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8105 components: - type: Transform - pos: -0.5,33.5 + pos: -9.5,-14.5 parent: 31 - - uid: 1891 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8106 components: - type: Transform - pos: 6.5,19.5 + pos: -7.5,-16.5 parent: 31 - - uid: 1904 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8202 components: - type: Transform - pos: -7.5,18.5 + rot: -1.5707963267948966 rad + pos: -8.5,14.5 parent: 31 - - uid: 1949 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8702 components: - type: Transform - pos: -10.5,21.5 + rot: -1.5707963267948966 rad + pos: 48.5,-16.5 parent: 31 - - uid: 1959 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8783 components: - type: Transform - pos: -11.5,7.5 + rot: -1.5707963267948966 rad + pos: -5.5,11.5 parent: 31 - - uid: 1969 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8872 components: - type: Transform - pos: -10.5,14.5 + rot: 1.5707963267948966 rad + pos: 2.5,-6.5 parent: 31 - - uid: 1996 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8877 components: - type: Transform - pos: -7.5,9.5 + pos: 34.5,5.5 parent: 31 - - uid: 2064 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8878 components: - type: Transform - pos: -28.5,6.5 + rot: 3.141592653589793 rad + pos: 35.5,3.5 parent: 31 - - uid: 2095 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10041 components: - type: Transform - pos: -25.5,9.5 + rot: 1.5707963267948966 rad + pos: 19.5,-9.5 parent: 31 - - uid: 2099 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10163 components: - type: Transform - pos: -9.5,8.5 + rot: -1.5707963267948966 rad + pos: -27.5,0.5 parent: 31 - - uid: 2115 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10164 components: - type: Transform - pos: 13.5,-1.5 + rot: -1.5707963267948966 rad + pos: -26.5,1.5 parent: 31 - - uid: 2136 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10251 components: - type: Transform - pos: 8.5,-7.5 + rot: -1.5707963267948966 rad + pos: -35.5,-6.5 parent: 31 - - uid: 2149 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10414 components: - type: Transform - pos: 11.5,2.5 + rot: 1.5707963267948966 rad + pos: 31.5,16.5 parent: 31 - - uid: 2150 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 10415 components: - type: Transform - pos: 10.5,2.5 + pos: -2.5,-14.5 parent: 31 - - uid: 2151 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10429 components: - type: Transform - pos: 9.5,2.5 + rot: -1.5707963267948966 rad + pos: -7.5,-26.5 parent: 31 - - uid: 2152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10430 components: - type: Transform - pos: 8.5,2.5 + rot: -1.5707963267948966 rad + pos: -8.5,-27.5 parent: 31 - - uid: 2153 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10515 components: - type: Transform - pos: 7.5,2.5 + rot: 3.141592653589793 rad + pos: 35.5,15.5 parent: 31 - - uid: 2205 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 10910 components: - type: Transform - pos: 20.5,-5.5 + rot: 1.5707963267948966 rad + pos: 49.5,-3.5 parent: 31 - - uid: 2209 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10911 components: - type: Transform - pos: -6.5,-20.5 + pos: 53.5,-3.5 parent: 31 - - uid: 2245 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10912 components: - type: Transform - pos: -7.5,6.5 + anchored: False + rot: 1.5707963267948966 rad + pos: 53.5,-7.5 parent: 31 - - uid: 2277 + - type: AtmosPipeColor + color: '#990000FF' + - type: Physics + canCollide: True + bodyType: Dynamic + - uid: 10931 components: - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,-24.5 + rot: 1.5707963267948966 rad + pos: 48.5,-5.5 parent: 31 - - uid: 2307 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10943 components: - type: Transform - pos: -35.5,-22.5 + rot: 3.141592653589793 rad + pos: 51.5,-5.5 parent: 31 - - uid: 2423 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10954 components: - type: Transform - pos: 28.5,-14.5 + rot: 3.141592653589793 rad + pos: 48.5,-8.5 parent: 31 - - uid: 2848 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11114 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-17.5 + rot: 1.5707963267948966 rad + pos: 43.5,12.5 parent: 31 - - uid: 2849 + - uid: 11336 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-17.5 + rot: 1.5707963267948966 rad + pos: -27.5,-3.5 parent: 31 - - uid: 3109 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11406 components: - type: Transform - pos: 60.5,11.5 + rot: -1.5707963267948966 rad + pos: -35.5,-4.5 parent: 31 - - uid: 3152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11574 components: - type: Transform - pos: 47.5,-18.5 + rot: -1.5707963267948966 rad + pos: -23.5,-21.5 parent: 31 - - uid: 3157 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11582 components: - type: Transform - pos: 56.5,-25.5 + pos: -26.5,-21.5 parent: 31 - - uid: 3158 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11583 components: - type: Transform - pos: 56.5,-24.5 + pos: -25.5,-22.5 parent: 31 - - uid: 3415 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11638 components: - type: Transform - pos: -16.5,-40.5 + rot: 1.5707963267948966 rad + pos: -26.5,-6.5 parent: 31 - - uid: 3826 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11689 components: - type: Transform - pos: -14.5,29.5 + rot: -1.5707963267948966 rad + pos: -24.5,-7.5 parent: 31 - - uid: 3827 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11801 components: - type: Transform - pos: -15.5,28.5 + pos: 74.5,8.5 parent: 31 - - uid: 3828 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11807 components: - type: Transform - pos: -18.5,29.5 + rot: 3.141592653589793 rad + pos: 75.5,3.5 parent: 31 - - uid: 3842 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11808 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,13.5 + rot: 3.141592653589793 rad + pos: 74.5,3.5 parent: 31 - - uid: 4032 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11809 components: - type: Transform - pos: 28.5,-13.5 + rot: 3.141592653589793 rad + pos: 73.5,3.5 parent: 31 - - uid: 4114 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11873 components: - type: Transform - pos: -12.5,6.5 + pos: 67.5,-1.5 parent: 31 - - uid: 4115 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11874 components: - type: Transform - pos: -3.5,6.5 + pos: 68.5,-1.5 parent: 31 - - uid: 4117 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11875 components: - type: Transform - pos: -3.5,8.5 + rot: 3.141592653589793 rad + pos: 66.5,-1.5 parent: 31 - - uid: 4223 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11876 components: - type: Transform - pos: -2.5,9.5 + pos: 65.5,-1.5 parent: 31 - - uid: 4241 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11880 components: - type: Transform - pos: 7.5,36.5 + rot: 1.5707963267948966 rad + pos: 66.5,0.5 parent: 31 - - uid: 4308 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11881 components: - type: Transform - pos: 5.5,36.5 + rot: 3.141592653589793 rad + pos: 67.5,0.5 parent: 31 - - uid: 4376 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12043 components: - type: Transform - pos: 41.5,-26.5 + rot: 1.5707963267948966 rad + pos: 51.5,-24.5 parent: 31 - - uid: 4377 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 12044 components: - type: Transform - pos: 45.5,-29.5 + rot: -1.5707963267948966 rad + pos: 47.5,-24.5 parent: 31 - - uid: 4386 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 12148 components: - type: Transform rot: -1.5707963267948966 rad - pos: 37.5,-26.5 + pos: 34.5,13.5 parent: 31 - - uid: 4393 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12249 components: - type: Transform - pos: 58.5,6.5 + rot: -1.5707963267948966 rad + pos: 33.5,14.5 parent: 31 - - uid: 4394 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasPort + entities: + - uid: 188 components: - type: Transform - pos: 61.5,6.5 + pos: -11.5,-28.5 parent: 31 - - uid: 4399 + - uid: 1272 components: - type: Transform rot: 3.141592653589793 rad - pos: 54.5,1.5 + pos: 50.5,16.5 parent: 31 - - uid: 4403 + - uid: 1329 components: - type: Transform rot: 3.141592653589793 rad - pos: 54.5,3.5 + pos: 32.5,16.5 parent: 31 - - uid: 4445 + - uid: 6502 components: - type: Transform - pos: 59.5,-10.5 + rot: 1.5707963267948966 rad + pos: 31.5,9.5 parent: 31 - - uid: 4460 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6854 components: - type: Transform rot: 3.141592653589793 rad - pos: -17.5,-24.5 - parent: 31 - - uid: 4487 - components: - - type: Transform - pos: 34.5,-13.5 + pos: 65.5,6.5 parent: 31 - - uid: 4500 + - uid: 6893 components: - type: Transform - pos: 54.5,-7.5 + rot: 1.5707963267948966 rad + pos: 31.5,8.5 parent: 31 - - uid: 4510 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8832 components: - type: Transform - pos: 31.5,-23.5 + rot: 3.141592653589793 rad + pos: 43.5,11.5 parent: 31 - - uid: 4532 + - uid: 11147 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,-22.5 + pos: 63.5,4.5 parent: 31 - - uid: 4595 + - uid: 11886 components: - type: Transform - pos: 41.5,-22.5 + rot: 3.141592653589793 rad + pos: 68.5,-3.5 parent: 31 - - uid: 4596 + - uid: 11887 components: - type: Transform - pos: 40.5,-22.5 + rot: 3.141592653589793 rad + pos: 67.5,-3.5 parent: 31 - - uid: 4597 + - uid: 12045 components: - type: Transform - pos: 42.5,-26.5 + rot: 3.141592653589793 rad + pos: 63.5,5.5 parent: 31 - - uid: 4598 + - uid: 12153 components: + - type: MetaData + desc: A note attached reads, "Your gas supply is large, but finite. Buy more gas from Logistics if you run out." + name: gas input - type: Transform - pos: 44.5,-27.5 + rot: 3.141592653589793 rad + pos: 31.5,13.5 parent: 31 - - uid: 4599 + - uid: 12553 components: - type: Transform - pos: 44.5,-28.5 + pos: 34.5,23.5 parent: 31 - - uid: 4600 + - uid: 12554 components: - type: Transform - pos: 44.5,-29.5 + rot: -1.5707963267948966 rad + pos: 68.5,10.5 parent: 31 - - uid: 4612 + - uid: 12555 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,-26.5 + pos: 36.5,23.5 parent: 31 - - uid: 4614 + - uid: 12557 components: - type: Transform - pos: 34.5,-12.5 + pos: 38.5,23.5 parent: 31 - - uid: 4618 + - uid: 12559 components: - type: Transform - pos: 51.5,-30.5 + pos: 40.5,23.5 parent: 31 - - uid: 4619 + - uid: 12561 components: - type: Transform - pos: 53.5,-29.5 + pos: 42.5,23.5 parent: 31 - - uid: 4620 + - uid: 12563 components: - type: Transform - pos: 54.5,-28.5 + pos: 44.5,23.5 parent: 31 - - uid: 4621 + - uid: 12564 components: - type: Transform - pos: 56.5,-26.5 + pos: 44.5,22.5 parent: 31 - - uid: 4622 + - uid: 12565 components: - type: Transform - pos: 55.5,-22.5 + pos: 46.5,23.5 parent: 31 - - uid: 4624 +- proto: GasPressurePump + entities: + - uid: 555 components: + - type: MetaData + desc: A pump that moves tritium by pressure. + name: tritium pump - type: Transform - pos: 56.5,-23.5 + pos: 45.5,17.5 parent: 31 - - uid: 4625 + - type: GasPressurePump + targetPressure: 1 + - uid: 842 components: - type: Transform - pos: 56.5,-22.5 + rot: -1.5707963267948966 rad + pos: -12.5,-29.5 parent: 31 - - uid: 4660 + - uid: 905 components: + - type: MetaData + desc: A pump that moves O2 by pressure. + name: O2 pump - type: Transform - pos: 31.5,-25.5 + pos: 37.5,17.5 parent: 31 - - uid: 4686 + - type: AtmosPipeColor + color: '#234FDEFF' + - uid: 1513 components: + - type: MetaData + desc: A pump that moves N2O by pressure. + name: N2O pump - type: Transform - pos: 4.5,36.5 + pos: 39.5,17.5 parent: 31 - - uid: 4702 + - type: GasPressurePump + targetPressure: 1 + - uid: 1517 components: + - type: MetaData + desc: A pump that moves N2 by pressure. + name: N2 pump - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,18.5 + pos: 35.5,17.5 parent: 31 - - uid: 4844 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 1570 components: + - type: MetaData + desc: A pump that moves plasma by pressure. + name: plasma pump - type: Transform - pos: 12.5,-32.5 + pos: 43.5,17.5 parent: 31 - - uid: 4853 + - type: GasPressurePump + targetPressure: 1000 + - type: AtmosPipeColor + color: '#F88379FF' + - uid: 1573 components: + - type: MetaData + desc: A pump that moves CO2 by pressure. + name: CO2 pump - type: Transform - pos: 58.5,3.5 + pos: 41.5,17.5 parent: 31 - - uid: 4879 + - type: GasPressurePump + targetPressure: 1 + - uid: 3507 components: + - type: MetaData + name: gas chamber output - type: Transform - pos: -2.5,6.5 + rot: 3.141592653589793 rad + pos: 49.5,15.5 parent: 31 - - uid: 4881 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 3765 components: - type: Transform - pos: -0.5,6.5 + rot: 3.141592653589793 rad + pos: 33.5,17.5 parent: 31 - - uid: 4926 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 3826 components: + - type: MetaData + name: gas cooling output - type: Transform - pos: 15.5,20.5 + pos: 50.5,17.5 parent: 31 - - uid: 4928 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 4124 components: + - type: MetaData + name: atmos to active coolant - type: Transform - pos: 15.5,21.5 + rot: 1.5707963267948966 rad + pos: 63.5,-1.5 parent: 31 - - uid: 5066 + - type: GasPressurePump + targetPressure: 1000 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 4363 components: + - type: MetaData + name: passive coolant removal - type: Transform - pos: -1.5,9.5 + pos: 63.5,6.5 parent: 31 - - uid: 5067 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 4388 components: + - type: MetaData + name: waste to filters - type: Transform - pos: -3.5,9.5 + rot: 3.141592653589793 rad + pos: 33.5,11.5 parent: 31 - - uid: 5071 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4389 components: + - type: MetaData + name: atmos to distro - type: Transform - pos: 13.5,1.5 + pos: 34.5,11.5 parent: 31 - - uid: 5072 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6351 components: + - type: MetaData + desc: A pump that moves H2O by pressure. + name: H2O pump - type: Transform - pos: 13.5,-2.5 + pos: 47.5,17.5 parent: 31 - - uid: 5082 + - uid: 7663 components: - type: Transform - pos: 13.5,0.5 + pos: 9.5,-15.5 parent: 31 - - uid: 5102 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 9058 components: + - type: MetaData + name: gas mix to Supermatter coolant - type: Transform - pos: 51.5,-6.5 + rot: 1.5707963267948966 rad + pos: 48.5,15.5 parent: 31 - - uid: 5111 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 9079 components: + - type: MetaData + name: supermatter waste gas - type: Transform - pos: -0.5,36.5 + pos: 31.5,17.5 parent: 31 - - uid: 5117 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11149 components: + - type: MetaData + name: passive coolant input - type: Transform - pos: -3.5,7.5 + pos: 63.5,3.5 parent: 31 - - uid: 5139 + - type: GasPressurePump + targetPressure: 1000 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11294 components: + - type: MetaData + name: gas chamber imput - type: Transform - pos: 8.5,-11.5 + rot: 1.5707963267948966 rad + pos: 44.5,12.5 parent: 31 - - uid: 5198 + - type: GasPressurePump + targetPressure: 4500 + - uid: 11884 components: + - type: MetaData + name: active coolant removal - type: Transform - pos: -28.5,18.5 + pos: 67.5,-2.5 parent: 31 - - uid: 5199 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11885 components: - type: Transform - pos: -29.5,18.5 + rot: 3.141592653589793 rad + pos: 68.5,-2.5 parent: 31 - - uid: 5215 + - type: GasPressurePump + targetPressure: 1000 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12556 components: - type: Transform - pos: -10.5,13.5 + rot: -1.5707963267948966 rad + pos: 67.5,10.5 parent: 31 - - uid: 5227 + - type: GasPressurePump + targetPressure: 1500 +- proto: GasThermoMachineFreezer + entities: + - uid: 6720 components: - type: Transform - pos: 11.5,-15.5 + pos: 62.5,9.5 parent: 31 - - uid: 5244 + - type: GasThermoMachine + targetTemperature: 73.15 + - type: ApcPowerReceiver + powerDisabled: False + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 8125 components: - type: Transform - pos: -39.5,21.5 + rot: 3.141592653589793 rad + pos: 7.5,-17.5 parent: 31 - - uid: 5251 + - uid: 8860 components: - type: Transform - pos: -39.5,27.5 + pos: 38.5,11.5 parent: 31 - - uid: 5313 + - uid: 11878 components: - type: Transform - pos: -43.5,9.5 + rot: 3.141592653589793 rad + pos: 64.5,-2.5 parent: 31 - - uid: 5898 + - type: GasThermoMachine + targetTemperature: 73.15 + - type: ApcPowerReceiver + powerDisabled: False + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11879 components: - type: Transform - pos: -41.5,7.5 + rot: 3.141592653589793 rad + pos: 65.5,-2.5 parent: 31 - - uid: 5978 + - type: GasThermoMachine + targetTemperature: 73.15 + - type: ApcPowerReceiver + powerDisabled: False + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12251 components: - type: Transform - pos: -54.5,-9.5 + pos: 32.5,15.5 parent: 31 - - uid: 6277 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasThermoMachineFreezerEnabled + entities: + - uid: 3850 components: - type: Transform - pos: -9.5,32.5 + rot: -1.5707963267948966 rad + pos: 52.5,20.5 parent: 31 - - uid: 6280 + - type: AtmosPipeColor + color: '#ADD8E6FF' +- proto: GasThermoMachineHeater + entities: + - uid: 8861 components: - type: Transform - pos: -10.5,32.5 + pos: 39.5,11.5 parent: 31 - - uid: 6287 + - uid: 12252 components: - type: Transform - pos: 54.5,-8.5 + pos: 33.5,15.5 parent: 31 - - uid: 6288 + - type: AtmosPipeColor + color: '#0055CCFF' +- proto: GasValve + entities: + - uid: 8455 components: - type: Transform - pos: -6.5,34.5 + rot: 3.141592653589793 rad + pos: 66.5,9.5 parent: 31 - - uid: 6366 + - uid: 9077 components: + - type: MetaData + name: atmos to core coolant - type: Transform - pos: 22.5,14.5 + pos: 64.5,10.5 parent: 31 - - uid: 6367 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 9508 components: - type: Transform - pos: 40.5,18.5 + rot: 3.141592653589793 rad + pos: 48.5,17.5 parent: 31 - - uid: 6369 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasVentPump + entities: + - uid: 65 components: - type: Transform - pos: 42.5,18.5 + pos: 15.5,-7.5 parent: 31 - - uid: 6380 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 100 components: - type: Transform - pos: 39.5,18.5 + rot: 1.5707963267948966 rad + pos: 3.5,-17.5 parent: 31 - - uid: 6381 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 1094 components: - type: Transform - pos: 38.5,18.5 + rot: -1.5707963267948966 rad + pos: 21.5,-9.5 parent: 31 - - uid: 6383 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 1230 components: - type: Transform - pos: 37.5,18.5 + rot: -1.5707963267948966 rad + pos: 9.5,20.5 parent: 31 - - uid: 6390 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 1305 components: - type: Transform - pos: 50.5,10.5 + rot: -1.5707963267948966 rad + pos: -18.5,-12.5 parent: 31 - - uid: 6391 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 1688 components: - type: Transform - pos: 35.5,18.5 + pos: -36.5,18.5 parent: 31 - - uid: 6393 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 2213 components: - type: Transform - pos: 49.5,10.5 + rot: -1.5707963267948966 rad + pos: 10.5,-14.5 parent: 31 - - uid: 6394 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3116 components: - type: Transform - pos: 48.5,10.5 + rot: -1.5707963267948966 rad + pos: 26.5,9.5 parent: 31 - - uid: 6401 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3368 components: - type: Transform - pos: 34.5,18.5 + pos: -5.5,16.5 parent: 31 - - uid: 6405 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3835 components: - type: Transform - pos: 23.5,20.5 + rot: 3.141592653589793 rad + pos: 19.5,-17.5 parent: 31 - - uid: 6415 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4013 components: - type: Transform rot: 3.141592653589793 rad - pos: 54.5,17.5 + pos: -9.5,-22.5 parent: 31 - - uid: 6440 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4185 components: - type: Transform - pos: 43.5,18.5 + pos: -7.5,20.5 parent: 31 - - uid: 6445 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4266 components: - type: Transform - pos: 45.5,18.5 + rot: -1.5707963267948966 rad + pos: 23.5,15.5 parent: 31 - - uid: 6453 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4267 components: - type: Transform - rot: 3.141592653589793 rad - pos: 54.5,15.5 + rot: -1.5707963267948966 rad + pos: 26.5,16.5 parent: 31 - - uid: 6455 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4303 components: - type: Transform - pos: 33.5,18.5 + rot: 3.141592653589793 rad + pos: -2.5,-15.5 parent: 31 - - uid: 6456 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4468 components: - type: Transform rot: 3.141592653589793 rad - pos: 54.5,16.5 + pos: 15.5,-28.5 parent: 31 - - uid: 6458 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4484 components: - type: Transform - pos: 45.5,7.5 + rot: 3.141592653589793 rad + pos: -35.5,-9.5 parent: 31 - - uid: 6464 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4584 components: - type: Transform - pos: 45.5,9.5 + pos: 48.5,-15.5 parent: 31 - - uid: 6472 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4586 components: - type: Transform - pos: 47.5,18.5 + rot: 1.5707963267948966 rad + pos: 47.5,-19.5 parent: 31 - - uid: 6481 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4666 components: - type: Transform - rot: 3.141592653589793 rad - pos: 48.5,24.5 + rot: 1.5707963267948966 rad + pos: -29.5,0.5 parent: 31 - - uid: 6503 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5365 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 55.5,24.5 + rot: 1.5707963267948966 rad + pos: 3.5,-5.5 parent: 31 - - uid: 6504 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5472 components: - type: Transform - pos: 44.5,18.5 + pos: 3.5,6.5 parent: 31 - - uid: 6505 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5476 components: - type: Transform rot: 3.141592653589793 rad - pos: 49.5,24.5 + pos: 22.5,4.5 parent: 31 - - uid: 6508 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5479 components: - type: Transform - pos: 46.5,18.5 + pos: 14.5,11.5 parent: 31 - - uid: 6539 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5495 components: - type: Transform - pos: 47.5,10.5 + pos: 8.5,-0.5 parent: 31 - - uid: 6551 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5542 components: - type: Transform - pos: 48.5,18.5 + pos: -12.5,-0.5 parent: 31 - - uid: 6565 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5543 components: - type: Transform - pos: 46.5,14.5 + pos: -1.5,-0.5 parent: 31 - - uid: 6605 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5605 components: - type: Transform - pos: 47.5,14.5 + pos: 16.5,-0.5 parent: 31 - - uid: 6606 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5606 components: - type: Transform - pos: 48.5,14.5 + rot: 3.141592653589793 rad + pos: 12.5,-9.5 parent: 31 - - uid: 6613 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5638 components: - type: Transform - pos: 36.5,18.5 + rot: 3.141592653589793 rad + pos: 14.5,-16.5 parent: 31 - - uid: 6641 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5666 components: - type: Transform - pos: -41.5,-8.5 + rot: -1.5707963267948966 rad + pos: 23.5,-5.5 parent: 31 - - uid: 6645 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5698 components: - type: Transform rot: -1.5707963267948966 rad - pos: 58.5,23.5 + pos: 9.5,-25.5 parent: 31 - - uid: 6721 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5700 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 65.5,14.5 + rot: 3.141592653589793 rad + pos: -12.5,-3.5 parent: 31 - - uid: 6725 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5848 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 58.5,22.5 + rot: 1.5707963267948966 rad + pos: 3.5,19.5 parent: 31 - - uid: 6726 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5929 components: - type: Transform rot: -1.5707963267948966 rad - pos: 53.5,24.5 + pos: -21.5,23.5 parent: 31 - - uid: 6728 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5941 components: - type: Transform rot: -1.5707963267948966 rad - pos: 58.5,24.5 + pos: 13.5,14.5 parent: 31 - - uid: 6729 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 5950 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,24.5 + rot: 1.5707963267948966 rad + pos: 7.5,9.5 parent: 31 - - uid: 6730 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6018 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 57.5,24.5 + rot: 1.5707963267948966 rad + pos: -12.5,15.5 parent: 31 - - uid: 6731 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6033 + components: + - type: Transform + pos: -12.5,19.5 + parent: 31 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6041 components: - type: Transform rot: -1.5707963267948966 rad - pos: 52.5,24.5 + pos: -0.5,7.5 parent: 31 - - uid: 6733 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6043 components: - type: Transform - pos: 58.5,0.5 + rot: 3.141592653589793 rad + pos: -2.5,4.5 parent: 31 - - uid: 6742 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6071 components: - type: Transform - pos: 46.5,10.5 + rot: 3.141592653589793 rad + pos: -11.5,4.5 parent: 31 - - uid: 6812 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6118 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,-42.5 + pos: -27.5,8.5 parent: 31 - - uid: 6815 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6119 components: - type: Transform - pos: 41.5,18.5 + rot: 3.141592653589793 rad + pos: -25.5,4.5 parent: 31 - - uid: 6841 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,4.5 + parent: 31 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6151 components: - type: Transform - pos: 50.5,14.5 + rot: 1.5707963267948966 rad + pos: -36.5,5.5 parent: 31 - - uid: 6844 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6169 components: - type: Transform - pos: 49.5,14.5 + rot: 1.5707963267948966 rad + pos: -36.5,-6.5 parent: 31 - - uid: 6847 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6184 components: - type: Transform rot: 3.141592653589793 rad - pos: 51.5,24.5 + pos: 34.5,4.5 parent: 31 - - uid: 6863 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6197 components: - type: Transform - pos: 27.5,22.5 + rot: 3.141592653589793 rad + pos: 39.5,4.5 parent: 31 - - uid: 6868 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6262 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 79.5,13.5 + rot: 3.141592653589793 rad + pos: 20.5,9.5 parent: 31 - - uid: 6873 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6268 components: - type: Transform - pos: 59.5,11.5 + rot: -1.5707963267948966 rad + pos: 38.5,-0.5 parent: 31 - - uid: 6874 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6275 components: - type: Transform rot: 3.141592653589793 rad - pos: 50.5,24.5 + pos: 32.5,-2.5 parent: 31 - - uid: 6933 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6294 components: - type: Transform - pos: 49.5,18.5 + pos: 51.5,-4.5 parent: 31 - - uid: 6950 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6318 components: - type: Transform - pos: -7.5,34.5 + pos: -4.5,31.5 parent: 31 - - uid: 6951 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6321 components: - type: Transform - pos: -5.5,32.5 + pos: -5.5,35.5 parent: 31 - - uid: 6952 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6478 components: - type: Transform - pos: -10.5,31.5 + rot: -1.5707963267948966 rad + pos: 47.5,8.5 parent: 31 - - uid: 6958 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6697 components: - type: Transform - pos: 51.5,-31.5 + pos: 4.5,31.5 parent: 31 - - uid: 6961 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 6874 components: - type: Transform - pos: 47.5,-31.5 + rot: 1.5707963267948966 rad + pos: -1.5,25.5 parent: 31 - - uid: 6962 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7099 components: - type: Transform - pos: 47.5,-30.5 + pos: 32.5,11.5 parent: 31 - - uid: 6963 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7121 components: - type: Transform - pos: 46.5,-29.5 + pos: 7.5,26.5 parent: 31 - - uid: 6964 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7129 components: - type: Transform - pos: 34.5,-14.5 + rot: 3.141592653589793 rad + pos: 3.5,24.5 parent: 31 - - uid: 6967 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7131 components: - type: Transform - pos: 40.5,-26.5 + pos: 10.5,26.5 parent: 31 - - uid: 6971 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7143 components: - type: Transform - pos: 42.5,-22.5 + pos: 12.5,26.5 parent: 31 - - uid: 7011 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7185 components: - type: Transform - pos: 51.5,-18.5 + rot: -1.5707963267948966 rad + pos: 56.5,1.5 parent: 31 - - uid: 7012 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7335 components: - type: Transform - pos: 51.5,-17.5 + rot: -1.5707963267948966 rad + pos: -3.5,-21.5 parent: 31 - - uid: 7013 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 7746 components: - type: Transform - pos: 50.5,-17.5 + pos: -35.5,14.5 parent: 31 - - uid: 7014 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8417 components: - type: Transform - pos: 49.5,-17.5 + rot: 3.141592653589793 rad + pos: 8.5,17.5 parent: 31 - - uid: 7015 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8721 components: - type: Transform - pos: 48.5,-17.5 + rot: 1.5707963267948966 rad + pos: -19.5,-2.5 parent: 31 - - uid: 7016 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8725 components: - type: Transform - pos: 47.5,-17.5 + rot: 1.5707963267948966 rad + pos: -29.5,-4.5 parent: 31 - - uid: 7017 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8794 components: - type: Transform - pos: 52.5,-19.5 + rot: 1.5707963267948966 rad + pos: -16.5,11.5 parent: 31 - - uid: 7018 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8873 components: - type: Transform - pos: 53.5,-19.5 + rot: 1.5707963267948966 rad + pos: 3.5,13.5 parent: 31 - - uid: 7019 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8875 components: - type: Transform - pos: 54.5,-19.5 + rot: 3.141592653589793 rad + pos: 28.5,4.5 parent: 31 - - uid: 7020 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8880 components: - type: Transform - pos: 54.5,-20.5 + pos: 46.5,3.5 parent: 31 - - uid: 7021 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 8944 components: - type: Transform - pos: 54.5,-21.5 + rot: 3.141592653589793 rad + pos: 10.5,4.5 parent: 31 - - uid: 7022 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10376 components: - type: Transform - pos: 55.5,-26.5 + rot: 3.141592653589793 rad + pos: 4.5,-30.5 parent: 31 - - uid: 7023 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10377 components: - type: Transform - pos: 54.5,-27.5 + rot: 3.141592653589793 rad + pos: 0.5,-30.5 parent: 31 - - uid: 7024 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10407 components: - type: Transform - pos: 54.5,-29.5 + rot: 3.141592653589793 rad + pos: -24.5,-14.5 parent: 31 - - uid: 7025 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10424 components: - type: Transform - pos: 52.5,-29.5 + rot: 3.141592653589793 rad + pos: -8.5,-30.5 parent: 31 - - uid: 7028 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10427 components: - type: Transform - pos: -7.5,35.5 + rot: 1.5707963267948966 rad + pos: -16.5,-27.5 parent: 31 - - uid: 7038 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10929 components: - type: Transform rot: -1.5707963267948966 rad - pos: 37.5,-22.5 + pos: 56.5,-9.5 parent: 31 - - uid: 7039 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 10930 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,-22.5 - parent: 31 - - uid: 7044 - components: - - type: Transform - pos: 28.5,-12.5 + pos: 58.5,-5.5 parent: 31 - - uid: 7070 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11399 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,20.5 + pos: -40.5,-3.5 parent: 31 - - uid: 7112 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11448 components: - type: Transform rot: -1.5707963267948966 rad - pos: 73.5,14.5 + pos: -26.5,-3.5 parent: 31 - - uid: 7150 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11570 components: - type: Transform - pos: -5.5,34.5 + rot: 1.5707963267948966 rad + pos: -25.5,-18.5 parent: 31 - - uid: 7186 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11571 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,11.5 + rot: 3.141592653589793 rad + pos: -26.5,-24.5 parent: 31 - - uid: 7187 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11608 components: - type: Transform rot: 1.5707963267948966 rad - pos: 66.5,12.5 + pos: -32.5,-22.5 parent: 31 - - uid: 7188 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11644 components: - type: Transform rot: -1.5707963267948966 rad - pos: 64.5,14.5 + pos: -22.5,-6.5 parent: 31 - - uid: 7192 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 11862 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 66.5,14.5 + rot: 1.5707963267948966 rad + pos: 46.5,-24.5 parent: 31 - - uid: 7193 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 12078 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,15.5 + rot: 3.141592653589793 rad + pos: 48.5,-29.5 parent: 31 - - uid: 7194 + - type: AtmosPipeColor + color: '#1739A6FF' +- proto: GasVentScrubber + entities: + - uid: 95 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,15.5 + rot: 3.141592653589793 rad + pos: 15.5,-11.5 parent: 31 - - uid: 7195 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 475 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,18.5 + rot: 1.5707963267948966 rad + pos: 47.5,11.5 parent: 31 - - uid: 7196 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 494 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,20.5 + rot: 1.5707963267948966 rad + pos: 46.5,11.5 parent: 31 - - uid: 7198 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 526 components: - type: Transform rot: -1.5707963267948966 rad - pos: 59.5,20.5 + pos: 46.5,13.5 parent: 31 - - uid: 7199 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 533 components: - type: Transform rot: -1.5707963267948966 rad - pos: 71.5,14.5 + pos: 50.5,13.5 parent: 31 - - uid: 7200 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 753 components: - type: Transform rot: -1.5707963267948966 rad - pos: 72.5,14.5 + pos: 22.5,-11.5 parent: 31 - - uid: 7201 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 1029 components: - type: Transform rot: -1.5707963267948966 rad - pos: 76.5,14.5 + pos: 3.5,-16.5 parent: 31 - - uid: 7202 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 1140 components: - type: Transform rot: -1.5707963267948966 rad - pos: 75.5,14.5 + pos: -20.5,-11.5 parent: 31 - - uid: 7203 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 1542 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 77.5,14.5 + pos: 35.5,4.5 parent: 31 - - uid: 7204 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 2058 components: - type: Transform rot: -1.5707963267948966 rad - pos: 80.5,11.5 + pos: 52.5,-24.5 parent: 31 - - uid: 7213 + - type: DeviceNetwork + deviceLists: + - 11863 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 2208 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 78.5,13.5 + pos: -38.5,18.5 parent: 31 - - uid: 7215 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 2268 components: - type: Transform rot: -1.5707963267948966 rad - pos: 80.5,9.5 + pos: 3.5,32.5 parent: 31 - - uid: 7216 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3117 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,7.5 + pos: 21.5,12.5 parent: 31 - - uid: 7217 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3118 components: - type: Transform rot: -1.5707963267948966 rad - pos: 80.5,6.5 - parent: 31 - - uid: 7221 - components: - - type: Transform - pos: 34.5,20.5 + pos: 26.5,10.5 parent: 31 - - uid: 7226 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3274 components: - type: Transform - pos: 36.5,20.5 + pos: 41.5,4.5 parent: 31 - - uid: 7231 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3840 components: - type: Transform - pos: 0.5,36.5 + rot: 3.141592653589793 rad + pos: 18.5,-18.5 parent: 31 - - uid: 7233 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 3939 components: - type: Transform - pos: 13.5,-5.5 + rot: 3.141592653589793 rad + pos: -22.5,-27.5 parent: 31 - - uid: 7274 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 3947 components: - type: Transform - pos: 12.5,-6.5 + rot: 3.141592653589793 rad + pos: -22.5,-25.5 parent: 31 - - uid: 7304 + - type: AtmosPipeColor + color: '#1739A6FF' + - uid: 4006 components: - type: Transform rot: -1.5707963267948966 rad - pos: 61.5,19.5 + pos: -22.5,-5.5 parent: 31 - - uid: 7305 + - type: DeviceNetwork + deviceLists: + - 10238 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4279 components: - type: Transform rot: -1.5707963267948966 rad - pos: 78.5,14.5 + pos: 26.5,17.5 parent: 31 - - uid: 7307 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4436 components: - type: Transform - pos: 1.5,-34.5 + rot: 3.141592653589793 rad + pos: -3.5,-17.5 parent: 31 - - uid: 7358 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4486 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -42.5,15.5 + rot: 3.141592653589793 rad + pos: -37.5,-11.5 parent: 31 - - uid: 7375 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4701 components: - type: Transform - pos: 61.5,-10.5 + rot: -1.5707963267948966 rad + pos: -7.5,21.5 parent: 31 - - uid: 7376 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4783 components: - type: Transform - pos: 4.5,35.5 + rot: -1.5707963267948966 rad + pos: 9.5,-23.5 parent: 31 - - uid: 7425 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 4828 components: - type: Transform - pos: 61.5,-11.5 + rot: -1.5707963267948966 rad + pos: 49.5,13.5 parent: 31 - - uid: 7447 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 4860 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-32.5 + rot: -1.5707963267948966 rad + pos: -7.5,13.5 parent: 31 - - uid: 7448 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5332 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-32.5 + rot: -1.5707963267948966 rad + pos: 3.5,-6.5 parent: 31 - - uid: 7449 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5473 components: - type: Transform rot: 3.141592653589793 rad - pos: -1.5,-32.5 + pos: 3.5,2.5 parent: 31 - - uid: 7450 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5474 components: - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,-32.5 + pos: 7.5,4.5 parent: 31 - - uid: 7471 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5477 components: - type: Transform - pos: 11.5,-17.5 + pos: 21.5,4.5 parent: 31 - - uid: 7472 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5478 components: - type: Transform - pos: -31.5,19.5 + rot: 3.141592653589793 rad + pos: 16.5,10.5 parent: 31 - - uid: 7485 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5496 components: - type: Transform - pos: 1.5,-27.5 + rot: 3.141592653589793 rad + pos: 9.5,-0.5 parent: 31 - - uid: 7487 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5541 components: - type: Transform - pos: 1.5,36.5 + rot: 3.141592653589793 rad + pos: -13.5,-0.5 parent: 31 - - uid: 7488 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5544 components: - type: Transform - pos: 61.5,-7.5 + rot: 3.141592653589793 rad + pos: -8.5,-0.5 parent: 31 - - uid: 7632 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5597 components: - type: Transform - pos: -39.5,19.5 + pos: 17.5,-1.5 parent: 31 - - uid: 7636 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5607 components: - type: Transform - pos: -47.5,-12.5 + rot: 3.141592653589793 rad + pos: 12.5,-11.5 parent: 31 - - uid: 7672 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5637 components: - type: Transform - pos: -16.5,7.5 + rot: 1.5707963267948966 rad + pos: 14.5,-14.5 parent: 31 - - uid: 7677 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5665 components: - type: Transform - pos: 62.5,-10.5 + rot: -1.5707963267948966 rad + pos: 22.5,-6.5 parent: 31 - - uid: 7678 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5704 components: - type: Transform - pos: 61.5,-16.5 + rot: -1.5707963267948966 rad + pos: 3.5,-28.5 parent: 31 - - uid: 7679 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5849 components: - type: Transform - pos: 61.5,-14.5 + rot: -1.5707963267948966 rad + pos: 3.5,18.5 parent: 31 - - uid: 7688 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5883 components: - type: Transform - pos: 23.5,19.5 + rot: -1.5707963267948966 rad + pos: 9.5,17.5 parent: 31 - - uid: 7692 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 5951 components: - type: Transform - pos: -39.5,12.5 + pos: 9.5,9.5 parent: 31 - - uid: 7697 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6024 components: - type: Transform - pos: -46.5,-12.5 + anchored: False + rot: 1.5707963267948966 rad + pos: -12.5,14.5 parent: 31 - - uid: 7713 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#990000FF' + - type: Physics + canCollide: True + bodyType: Dynamic + - uid: 6032 components: - type: Transform - pos: -54.5,-10.5 + rot: 1.5707963267948966 rad + pos: -12.5,20.5 parent: 31 - - uid: 7748 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6042 components: - type: Transform - pos: 49.5,-31.5 + rot: -1.5707963267948966 rad + pos: -0.5,8.5 parent: 31 - - uid: 7777 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6044 components: - type: Transform - pos: 45.5,12.5 + pos: -1.5,4.5 parent: 31 - - uid: 7798 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6080 components: - type: Transform - pos: 13.5,-10.5 + pos: -14.5,4.5 parent: 31 - - uid: 7800 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6117 components: - type: Transform - pos: 13.5,-11.5 + pos: -27.5,10.5 parent: 31 - - uid: 7824 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6120 components: - type: Transform - pos: -5.5,-33.5 + pos: -22.5,4.5 parent: 31 - - uid: 7830 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6125 components: - type: Transform - pos: -42.5,-8.5 + pos: -6.5,34.5 parent: 31 - - uid: 7838 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6126 components: - type: Transform - pos: -18.5,26.5 + rot: 3.141592653589793 rad + pos: -5.5,28.5 parent: 31 - - uid: 7839 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6137 components: - type: Transform - pos: -15.5,26.5 + pos: -30.5,4.5 parent: 31 - - uid: 7840 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6152 components: - type: Transform - pos: -12.5,26.5 + pos: -36.5,4.5 parent: 31 - - uid: 7864 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6168 components: - type: Transform - pos: -11.5,29.5 + rot: 3.141592653589793 rad + pos: -36.5,-0.5 parent: 31 - - uid: 7867 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6232 components: - type: Transform - pos: 28.5,-25.5 + rot: 1.5707963267948966 rad + pos: -1.5,24.5 parent: 31 - - uid: 7868 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6267 components: - type: Transform - pos: 28.5,-23.5 + rot: 3.141592653589793 rad + pos: 39.5,-0.5 parent: 31 - - uid: 7947 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6276 components: - type: Transform - pos: -40.5,-8.5 + rot: 3.141592653589793 rad + pos: 33.5,-1.5 parent: 31 - - uid: 8021 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6299 components: - type: Transform - pos: -15.5,29.5 + rot: 3.141592653589793 rad + pos: 7.5,23.5 parent: 31 - - uid: 8022 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6300 components: - type: Transform - pos: -16.5,29.5 + rot: 3.141592653589793 rad + pos: 10.5,23.5 parent: 31 - - uid: 8023 + - type: DeviceNetwork + deviceLists: + - 7152 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6413 components: - type: Transform - pos: -17.5,29.5 + rot: -1.5707963267948966 rad + pos: 47.5,9.5 parent: 31 - - uid: 8024 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6463 components: - type: Transform - pos: -22.5,29.5 + rot: 1.5707963267948966 rad + pos: 48.5,11.5 parent: 31 - - uid: 8027 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 6552 components: - type: Transform - pos: -10.5,29.5 + rot: -1.5707963267948966 rad + pos: 34.5,9.5 parent: 31 - - uid: 8032 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6581 components: - type: Transform - pos: -20.5,29.5 + rot: -1.5707963267948966 rad + pos: 21.5,15.5 parent: 31 - - uid: 8036 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 6961 components: - type: Transform - pos: -19.5,29.5 + rot: -1.5707963267948966 rad + pos: 51.5,-19.5 parent: 31 - - uid: 8037 + - type: DeviceNetwork + deviceLists: + - 11863 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7041 components: - type: Transform - pos: -12.5,29.5 + rot: 3.141592653589793 rad + pos: 50.5,12.5 parent: 31 - - uid: 8038 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 7211 components: - type: Transform - pos: -13.5,29.5 + rot: -1.5707963267948966 rad + pos: 56.5,3.5 parent: 31 - - uid: 8048 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7673 components: - type: Transform - pos: 29.5,21.5 + rot: 1.5707963267948966 rad + pos: 7.5,-13.5 parent: 31 - - uid: 8052 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7745 components: - type: Transform - pos: -41.5,6.5 + pos: -37.5,14.5 parent: 31 - - uid: 8056 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 7853 components: - type: Transform - pos: 33.5,26.5 + rot: -1.5707963267948966 rad + pos: 47.5,13.5 parent: 31 - - uid: 8074 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 7855 components: - type: Transform - pos: 45.5,11.5 + rot: -1.5707963267948966 rad + pos: 48.5,13.5 parent: 31 - - uid: 8084 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 8248 components: - type: Transform - pos: -16.5,6.5 + pos: 50.5,-15.5 parent: 31 - - uid: 8097 + - type: DeviceNetwork + deviceLists: + - 11863 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8416 components: - type: Transform - pos: 3.5,-23.5 + pos: 7.5,19.5 parent: 31 - - uid: 8103 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8438 components: - type: Transform rot: -1.5707963267948966 rad - pos: 61.5,17.5 + pos: -3.5,-19.5 parent: 31 - - uid: 8108 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8795 components: - type: Transform rot: 1.5707963267948966 rad - pos: 61.5,0.5 + pos: -16.5,10.5 parent: 31 - - uid: 8109 + - type: DeviceNetwork + deviceLists: + - 9998 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8817 components: - type: Transform rot: 1.5707963267948966 rad - pos: 61.5,1.5 + pos: 49.5,11.5 parent: 31 - - uid: 8111 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 8874 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 61.5,3.5 + rot: -1.5707963267948966 rad + pos: 3.5,12.5 parent: 31 - - uid: 8112 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8876 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 61.5,4.5 + pos: 26.5,4.5 parent: 31 - - uid: 8145 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 8879 components: - type: Transform - pos: 52.5,8.5 + rot: 3.141592653589793 rad + pos: 47.5,2.5 parent: 31 - - uid: 8156 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 9570 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 4.5,-31.5 + rot: 3.141592653589793 rad + pos: 50.5,11.5 parent: 31 - - uid: 8157 + - type: DeviceNetwork + deviceLists: + - 3855 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 10159 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,-31.5 + pos: -29.5,1.5 parent: 31 - - uid: 8216 + - type: DeviceNetwork + deviceLists: + - 9042 + - 10238 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10252 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,-26.5 + pos: -36.5,-5.5 parent: 31 - - uid: 8217 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10375 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,-24.5 + rot: 1.5707963267948966 rad + pos: -1.5,-28.5 parent: 31 - - uid: 8222 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10406 components: - type: Transform - pos: -32.5,19.5 + rot: 3.141592653589793 rad + pos: -23.5,-13.5 parent: 31 - - uid: 8293 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10420 components: - type: Transform - pos: 50.5,-31.5 + rot: 1.5707963267948966 rad + pos: -8.5,-19.5 parent: 31 - - uid: 8294 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10425 components: - type: Transform - pos: 48.5,-31.5 + rot: 3.141592653589793 rad + pos: -7.5,-27.5 parent: 31 - - uid: 8305 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10426 components: - type: Transform rot: 1.5707963267948966 rad - pos: 58.5,-29.5 - parent: 31 - - uid: 8306 - components: - - type: Transform - pos: 50.5,18.5 + pos: -14.5,-26.5 parent: 31 - - uid: 8309 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10495 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,-32.5 + rot: 3.141592653589793 rad + pos: -32.5,-14.5 parent: 31 - - uid: 8310 + - type: AtmosPipeColor + color: '#DE2D23FF' + - uid: 10906 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,-33.5 + rot: 3.141592653589793 rad + pos: 49.5,-4.5 parent: 31 - - uid: 8313 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10907 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,14.5 + rot: 3.141592653589793 rad + pos: 56.5,-4.5 parent: 31 - - uid: 8329 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 10908 components: - type: Transform - pos: 48.5,-6.5 + rot: -1.5707963267948966 rad + pos: 56.5,-7.5 parent: 31 - - uid: 8330 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11297 components: - type: Transform - pos: 54.5,-2.5 + rot: 3.141592653589793 rad + pos: -19.5,1.5 parent: 31 - - uid: 8331 + - type: DeviceNetwork + deviceLists: + - 9042 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11323 components: - type: Transform - pos: 58.5,-16.5 + rot: 3.141592653589793 rad + pos: -26.5,-0.5 parent: 31 - - uid: 8332 + - type: DeviceNetwork + deviceLists: + - 9042 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11400 components: - type: Transform - pos: 58.5,-18.5 + rot: 1.5707963267948966 rad + pos: -40.5,-5.5 parent: 31 - - uid: 8333 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11569 components: - type: Transform - pos: 58.5,-19.5 + rot: -1.5707963267948966 rad + pos: -20.5,-18.5 parent: 31 - - uid: 8334 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11572 components: - type: Transform - pos: 58.5,-21.5 + rot: 3.141592653589793 rad + pos: -25.5,-24.5 parent: 31 - - uid: 8335 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11609 components: - type: Transform - pos: 58.5,-22.5 + rot: 3.141592653589793 rad + pos: -30.5,-23.5 parent: 31 - - uid: 8336 + - type: DeviceNetwork + deviceLists: + - 11611 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 11719 components: - type: Transform - pos: 58.5,-23.5 + rot: 1.5707963267948966 rad + pos: -29.5,-7.5 parent: 31 - - uid: 8337 + - type: DeviceNetwork + deviceLists: + - 10238 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 12076 components: - type: Transform - pos: 58.5,-24.5 + rot: 3.141592653589793 rad + pos: 50.5,-29.5 parent: 31 - - uid: 8338 + - type: DeviceNetwork + deviceLists: + - 11863 + - type: AtmosPipeColor + color: '#A01E16FF' +- proto: GasVolumePump + entities: + - uid: 133 components: - type: Transform - pos: 58.5,-25.5 + rot: 3.141592653589793 rad + pos: 49.5,25.5 parent: 31 - - uid: 8339 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 611 components: - type: Transform - pos: 58.5,-27.5 + rot: 3.141592653589793 rad + pos: 50.5,21.5 parent: 31 - - uid: 8340 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 655 components: - type: Transform - pos: 58.5,-34.5 + rot: 3.141592653589793 rad + pos: 49.5,21.5 parent: 31 - - uid: 8341 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 959 components: - type: Transform - pos: 58.5,-37.5 + rot: 3.141592653589793 rad + pos: 48.5,21.5 parent: 31 - - uid: 8342 + - type: AtmosPipeColor + color: '#00FF00FF' + - uid: 4547 components: + - type: MetaData + name: passive coolant volumetric pump - type: Transform - pos: 58.5,-38.5 + rot: -1.5707963267948966 rad + pos: 68.5,8.5 parent: 31 - - uid: 8343 + - type: AtmosPipeColor + color: '#A01E16FF' + - uid: 9735 components: - type: Transform - pos: 57.5,-38.5 + rot: 3.141592653589793 rad + pos: 50.5,25.5 parent: 31 - - uid: 8349 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 10104 components: + - type: MetaData + name: passive coolant volumetric pump - type: Transform - pos: 32.5,26.5 + rot: -1.5707963267948966 rad + pos: 63.5,8.5 parent: 31 - - uid: 8362 + - uid: 10503 components: - type: Transform - pos: 42.5,26.5 + pos: 76.5,4.5 parent: 31 - - uid: 8363 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 10504 components: - type: Transform - pos: 44.5,26.5 + pos: 75.5,4.5 parent: 31 - - uid: 8364 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 10505 components: - type: Transform - pos: 45.5,26.5 + pos: 74.5,4.5 parent: 31 - - uid: 8367 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 10506 components: - type: Transform - pos: -33.5,-15.5 + pos: 73.5,4.5 parent: 31 - - uid: 8371 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11129 components: - type: Transform - pos: 43.5,26.5 + rot: 3.141592653589793 rad + pos: 48.5,25.5 parent: 31 - - uid: 8390 + - type: AtmosPipeColor + color: '#ADD8E6FF' + - uid: 11781 components: - type: Transform - pos: 6.5,36.5 + pos: 73.5,7.5 parent: 31 - - uid: 8484 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11782 components: - type: Transform - pos: -13.5,-19.5 + pos: 74.5,7.5 parent: 31 - - uid: 8566 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11783 components: - type: Transform - pos: -37.5,-24.5 + pos: 75.5,7.5 parent: 31 - - uid: 8567 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 11784 components: - type: Transform - pos: -37.5,-23.5 + pos: 76.5,7.5 parent: 31 - - uid: 8568 + - type: AtmosPipeColor + color: '#990000FF' +- proto: Gauze + entities: + - uid: 1407 components: - type: Transform - pos: -36.5,-22.5 + pos: 26.671059,21.801102 parent: 31 - - uid: 8570 + - uid: 10830 components: - type: Transform - pos: -34.5,-22.5 + pos: 12.447606,-4.278471 parent: 31 - - uid: 8571 +- proto: GeigerCounterWallMount + entities: + - uid: 4350 components: - type: Transform - pos: -33.5,-23.5 + rot: 3.141592653589793 rad + pos: 65.5,3.5 parent: 31 - - uid: 8572 + - type: Geiger + isEnabled: True + - type: RadiationReceiver + - uid: 6954 components: - type: Transform - pos: -33.5,-24.5 + rot: -1.5707963267948966 rad + pos: 54.5,3.5 parent: 31 - - uid: 8575 + - type: Geiger + isEnabled: True + - type: RadiationReceiver + - uid: 6956 components: - type: Transform - pos: -37.5,-28.5 + rot: 1.5707963267948966 rad + pos: 58.5,4.5 parent: 31 - - uid: 8576 + - type: Geiger + isEnabled: True + - type: RadiationReceiver + - uid: 9461 components: - type: Transform - pos: -32.5,-33.5 + rot: 1.5707963267948966 rad + pos: -13.5,-30.5 parent: 31 - - uid: 8601 + - type: Geiger + isEnabled: True + - type: RadiationReceiver +- proto: GeneratorBasic15kW + entities: + - uid: 8506 components: - type: Transform - rot: 3.141592653589793 rad - pos: -29.5,-32.5 + pos: 44.5,-22.5 parent: 31 - - uid: 8819 + - uid: 8616 components: - type: Transform - pos: 4.5,26.5 + pos: 43.5,-23.5 parent: 31 - - uid: 8820 +- proto: GlimmerProber + entities: + - uid: 11651 components: - type: Transform - pos: 2.5,26.5 + pos: -13.5,-24.5 parent: 31 - - uid: 8946 +- proto: GlowstickBase + entities: + - uid: 8848 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,2.5 + rot: 1.5707963267948966 rad + pos: 27.737583,15.662895 parent: 31 - - uid: 8947 + - uid: 8999 components: - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,2.5 + rot: 1.5707963267948966 rad + pos: 27.649036,15.662895 parent: 31 - - uid: 8948 + - uid: 9037 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,2.5 + rot: 1.5707963267948966 rad + pos: 27.826128,15.662895 parent: 31 - - uid: 9012 +- proto: GlowstickBlue + entities: + - uid: 10987 components: - type: Transform - pos: -4.5,-33.5 + pos: 52.729786,-1.2094907 parent: 31 - - uid: 9019 +- proto: GravityGenerator + entities: + - uid: 7696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 79.5,12.5 + pos: 58.5,-2.5 parent: 31 - - uid: 9027 +- proto: Grille + entities: + - uid: 12 components: - type: Transform - pos: -8.5,-24.5 + pos: 4.5,27.5 parent: 31 - - uid: 9030 + - uid: 14 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,10.5 + pos: -9.5,26.5 parent: 31 - - uid: 9063 + - uid: 47 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,8.5 + pos: 19.5,20.5 parent: 31 - - uid: 9064 + - uid: 64 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,12.5 + pos: 5.5,-4.5 parent: 31 - - uid: 9124 + - uid: 77 components: - type: Transform - pos: 5.5,-11.5 + rot: 1.5707963267948966 rad + pos: 44.5,-14.5 parent: 31 - - uid: 9125 + - uid: 78 components: - type: Transform - pos: 5.5,-10.5 + pos: 5.5,-5.5 parent: 31 - - uid: 9126 + - uid: 101 components: - type: Transform - pos: 5.5,-8.5 + pos: -48.5,-12.5 parent: 31 - - uid: 9127 + - uid: 138 components: - type: Transform - pos: 5.5,-7.5 + pos: -49.5,-12.5 parent: 31 - - uid: 9136 + - uid: 255 components: - type: Transform - pos: 26.5,22.5 + pos: 11.5,-6.5 parent: 31 - - uid: 9145 + - uid: 267 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,14.5 + pos: -50.5,-8.5 parent: 31 - - uid: 9163 + - uid: 338 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 74.5,14.5 + pos: -8.5,6.5 parent: 31 - - uid: 9174 + - uid: 360 components: - type: Transform - pos: -37.5,-12.5 + pos: -13.5,6.5 parent: 31 - - uid: 9175 + - uid: 450 components: - type: Transform - pos: -39.5,-1.5 + pos: -23.5,26.5 parent: 31 - - uid: 9208 + - uid: 469 components: - type: Transform - pos: -36.5,-12.5 + pos: -35.5,11.5 parent: 31 - - uid: 9209 + - uid: 532 components: - type: Transform - pos: -35.5,-12.5 + rot: -1.5707963267948966 rad + pos: 51.5,28.5 parent: 31 - - uid: 9219 + - uid: 571 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,12.5 + pos: 2.5,22.5 parent: 31 - - uid: 9231 + - uid: 608 components: - type: Transform - pos: -41.5,-0.5 + pos: -14.5,-18.5 parent: 31 - - uid: 9232 + - uid: 653 components: - type: Transform - pos: -42.5,-0.5 + pos: 39.5,26.5 parent: 31 - - uid: 9233 + - uid: 657 components: - type: Transform - pos: -43.5,-0.5 + pos: -37.5,11.5 parent: 31 - - uid: 9234 + - uid: 665 components: - type: Transform - pos: -43.5,11.5 + pos: -41.5,5.5 parent: 31 - - uid: 9235 + - uid: 711 components: - type: Transform - pos: -42.5,11.5 + pos: 17.5,20.5 parent: 31 - - uid: 9236 + - uid: 749 components: - type: Transform - pos: -41.5,11.5 + pos: -44.5,1.5 parent: 31 - - uid: 9257 + - uid: 751 components: - type: Transform - pos: -7.5,-24.5 + pos: -42.5,1.5 parent: 31 - - uid: 9260 + - uid: 757 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,14.5 + rot: 1.5707963267948966 rad + pos: 42.5,-14.5 parent: 31 - - uid: 9291 + - uid: 772 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,-30.5 + pos: -42.5,7.5 parent: 31 - - uid: 9331 + - uid: 801 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,2.5 + pos: -6.5,-22.5 parent: 31 - - uid: 9332 + - uid: 811 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,2.5 + pos: -40.5,3.5 parent: 31 - - uid: 9344 + - uid: 835 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,17.5 + pos: 52.5,-2.5 parent: 31 - - uid: 9362 + - uid: 855 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,-30.5 + pos: 52.5,-6.5 parent: 31 - - uid: 9364 + - uid: 856 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-25.5 + pos: -42.5,3.5 parent: 31 - - uid: 9368 + - uid: 858 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-30.5 + pos: -44.5,9.5 parent: 31 - - uid: 9370 + - uid: 904 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 70.5,14.5 + pos: 40.5,20.5 parent: 31 - - uid: 9372 + - uid: 937 components: - type: Transform - pos: -17.5,-18.5 + pos: 19.5,21.5 parent: 31 - - uid: 9405 + - uid: 1016 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 69.5,14.5 + pos: 4.5,22.5 parent: 31 - - uid: 9408 + - uid: 1022 components: - type: Transform - pos: -4.5,-37.5 + pos: -40.5,1.5 parent: 31 - - uid: 9409 + - uid: 1039 components: - type: Transform - pos: -3.5,-37.5 + rot: 3.141592653589793 rad + pos: -10.5,7.5 parent: 31 - - uid: 9410 + - uid: 1106 components: - type: Transform - pos: -2.5,-37.5 + pos: 44.5,20.5 parent: 31 - - uid: 9413 + - uid: 1131 components: - type: Transform - pos: -1.5,-37.5 + pos: -41.5,4.5 parent: 31 - - uid: 9419 + - uid: 1133 components: - type: Transform - pos: -14.5,-33.5 + rot: -1.5707963267948966 rad + pos: 18.5,18.5 parent: 31 - - uid: 9420 + - uid: 1180 components: - type: Transform - pos: -15.5,-33.5 + pos: -41.5,9.5 parent: 31 - - uid: 9421 + - uid: 1192 components: - type: Transform - pos: -16.5,-33.5 + pos: -19.5,2.5 parent: 31 - - uid: 9422 + - uid: 1193 components: - type: Transform - pos: -15.5,-40.5 + pos: -18.5,2.5 parent: 31 - - uid: 9423 + - uid: 1225 components: - type: Transform - pos: -14.5,-40.5 + pos: 25.5,10.5 parent: 31 - - uid: 9424 + - uid: 1237 components: - type: Transform - pos: -13.5,-40.5 + pos: -42.5,9.5 parent: 31 - - uid: 9460 + - uid: 1261 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,-26.5 + pos: -8.5,33.5 parent: 31 - - uid: 9515 + - uid: 1262 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,-12.5 + rot: 3.141592653589793 rad + pos: -9.5,33.5 parent: 31 - - uid: 9525 + - uid: 1278 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-41.5 + pos: -10.5,19.5 parent: 31 - - uid: 9535 + - uid: 1416 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 50.5,-12.5 + pos: -13.5,9.5 parent: 31 - - uid: 9536 + - uid: 1430 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5,-12.5 + pos: -43.5,3.5 parent: 31 - - uid: 9553 + - uid: 1434 components: - type: Transform rot: -1.5707963267948966 rad - pos: 67.5,14.5 - parent: 31 - - uid: 9561 - components: - - type: Transform - pos: 3.5,-35.5 + pos: -24.5,-17.5 parent: 31 - - uid: 9598 + - uid: 1435 components: - type: Transform rot: -1.5707963267948966 rad - pos: 19.5,-14.5 + pos: -21.5,-17.5 parent: 31 - - uid: 9658 + - uid: 1436 components: - type: Transform - pos: -3.5,-44.5 + rot: 3.141592653589793 rad + pos: 23.5,-8.5 parent: 31 - - uid: 9659 + - uid: 1447 components: - type: Transform - pos: -2.5,-44.5 + pos: 20.5,-10.5 parent: 31 - - uid: 9660 + - uid: 1451 components: - type: Transform - pos: -0.5,-45.5 + pos: -44.5,3.5 parent: 31 - - uid: 9661 + - uid: 1452 components: - type: Transform - pos: 0.5,-45.5 + pos: -41.5,1.5 parent: 31 - - uid: 9662 + - uid: 1453 components: - type: Transform - pos: 1.5,-45.5 + pos: -40.5,7.5 parent: 31 - - uid: 9692 + - uid: 1454 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-40.5 + pos: -43.5,7.5 parent: 31 - - uid: 9693 + - uid: 1455 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 12.5,-42.5 + pos: -40.5,9.5 parent: 31 - - uid: 9700 + - uid: 1456 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,-30.5 + pos: -41.5,3.5 parent: 31 - - uid: 9723 + - uid: 1460 components: - type: Transform - pos: 54.5,7.5 + pos: -27.5,6.5 parent: 31 - - uid: 9745 + - uid: 1462 components: - type: Transform - pos: 58.5,4.5 + pos: -29.5,6.5 parent: 31 - - uid: 9765 + - uid: 1468 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 58.5,2.5 + pos: 20.5,-9.5 parent: 31 - - uid: 9769 + - uid: 1491 components: - type: Transform - pos: -6.5,-33.5 + pos: 13.5,-4.5 parent: 31 - - uid: 9805 + - uid: 1526 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-34.5 + pos: 23.5,21.5 parent: 31 - - uid: 9806 + - uid: 1547 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-35.5 + pos: 42.5,20.5 parent: 31 - - uid: 9807 + - uid: 1548 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-36.5 + pos: 38.5,20.5 parent: 31 - - uid: 9808 + - uid: 1592 components: - type: Transform - pos: 12.5,-45.5 + pos: 19.5,14.5 parent: 31 - - uid: 9809 + - uid: 1602 components: - type: Transform - pos: 11.5,-45.5 + pos: 36.5,-0.5 parent: 31 - - uid: 9810 + - uid: 1604 components: - type: Transform - pos: 8.5,-45.5 + rot: 3.141592653589793 rad + pos: 24.5,-8.5 parent: 31 - - uid: 9811 + - uid: 1614 components: - type: Transform - pos: 5.5,-47.5 + pos: 2.5,-35.5 parent: 31 - - uid: 9812 + - uid: 1629 components: - type: Transform - pos: 4.5,-47.5 + pos: 37.5,1.5 parent: 31 - - uid: 9813 + - uid: 1663 components: - type: Transform - pos: 3.5,-47.5 + pos: 17.5,-14.5 parent: 31 - - uid: 9814 + - uid: 1666 components: - type: Transform - pos: 4.5,-45.5 + pos: 49.5,-6.5 parent: 31 - - uid: 9815 + - uid: 1692 components: - type: Transform - pos: -0.5,-47.5 + pos: -43.5,1.5 parent: 31 - - uid: 9817 + - uid: 1706 components: - type: Transform - pos: 0.5,-47.5 + pos: 41.5,26.5 parent: 31 - - uid: 9823 + - uid: 1708 components: - type: Transform - pos: -22.5,-39.5 + pos: 17.5,21.5 parent: 31 - - uid: 9824 + - uid: 1709 components: - type: Transform - pos: -22.5,-38.5 + pos: 34.5,7.5 parent: 31 - - uid: 9826 + - uid: 1710 components: - type: Transform - pos: -22.5,-37.5 + pos: 32.5,7.5 parent: 31 - - uid: 9827 + - uid: 1720 components: - type: Transform - pos: -21.5,-39.5 + pos: 32.5,1.5 parent: 31 - - uid: 9832 + - uid: 1721 components: - type: Transform - pos: -22.5,-34.5 + pos: 34.5,1.5 parent: 31 - - uid: 9837 + - uid: 1722 components: - type: Transform - pos: -22.5,-35.5 + pos: 30.5,4.5 parent: 31 - - uid: 9838 + - uid: 1728 components: - type: Transform - pos: -39.5,14.5 + pos: 1.5,-33.5 parent: 31 - - uid: 9889 + - uid: 1757 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -42.5,13.5 + pos: -49.5,-8.5 parent: 31 - - uid: 9896 + - uid: 1759 components: - type: Transform - pos: -9.5,26.5 + pos: 19.5,6.5 parent: 31 - - uid: 9949 + - uid: 1760 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,-14.5 + pos: 20.5,6.5 parent: 31 - - uid: 10061 + - uid: 1761 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,27.5 + pos: 21.5,6.5 parent: 31 - - uid: 10064 + - uid: 1762 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,26.5 + pos: 22.5,6.5 parent: 31 - - uid: 10065 + - uid: 1777 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,26.5 + pos: 17.5,9.5 parent: 31 - - uid: 10066 + - uid: 1803 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,27.5 + pos: 8.5,6.5 parent: 31 - - uid: 10067 + - uid: 1871 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,23.5 + pos: -1.5,27.5 parent: 31 - - uid: 10068 + - uid: 1872 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,24.5 + pos: -0.5,27.5 parent: 31 - - uid: 10069 + - uid: 1891 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,24.5 + pos: 6.5,19.5 parent: 31 - - uid: 10070 + - uid: 1904 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,23.5 + pos: -7.5,18.5 parent: 31 - - uid: 10080 + - uid: 1949 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 21.5,28.5 + pos: -10.5,21.5 parent: 31 - - uid: 10113 + - uid: 1969 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,7.5 + pos: -10.5,14.5 parent: 31 - - uid: 10114 + - uid: 1996 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 63.5,12.5 + pos: -7.5,9.5 parent: 31 - - uid: 10126 + - uid: 2028 components: - type: Transform - pos: -1.5,36.5 + pos: -37.5,-28.5 parent: 31 - - uid: 10196 + - uid: 2063 components: - type: Transform - pos: -33.5,-14.5 + pos: -37.5,-32.5 parent: 31 - - uid: 10197 + - uid: 2064 components: - type: Transform - pos: -34.5,-15.5 + pos: -28.5,6.5 parent: 31 - - uid: 10198 + - uid: 2095 components: - type: Transform - pos: -35.5,-15.5 + pos: -25.5,9.5 parent: 31 - - uid: 10226 + - uid: 2115 components: - type: Transform - pos: 61.5,-15.5 + pos: 13.5,-1.5 parent: 31 - - uid: 10372 + - uid: 2117 components: - type: Transform rot: -1.5707963267948966 rad - pos: -42.5,14.5 + pos: 5.5,35.5 parent: 31 - - uid: 10438 + - uid: 2136 components: - type: Transform - pos: -39.5,18.5 + pos: 8.5,-7.5 parent: 31 - - uid: 10520 + - uid: 2149 components: - type: Transform - pos: 25.5,22.5 + pos: 11.5,2.5 parent: 31 - - uid: 10604 + - uid: 2150 components: - type: Transform - pos: 44.5,-8.5 + pos: 10.5,2.5 parent: 31 - - uid: 10712 + - uid: 2151 components: - type: Transform - pos: -44.5,7.5 + pos: 9.5,2.5 parent: 31 - - uid: 10747 + - uid: 2152 components: - type: Transform - pos: -46.5,-8.5 + pos: 8.5,2.5 parent: 31 - - uid: 10748 + - uid: 2153 components: - type: Transform - pos: -47.5,-8.5 + pos: 7.5,2.5 parent: 31 - - uid: 10749 + - uid: 2205 components: - type: Transform - pos: -48.5,-8.5 + pos: 20.5,-5.5 parent: 31 - - uid: 10751 + - uid: 2209 components: - type: Transform - pos: -45.5,-8.5 + pos: -6.5,-20.5 parent: 31 - - uid: 11071 + - uid: 2245 components: - type: Transform - pos: 46.5,20.5 + pos: -7.5,6.5 parent: 31 - - uid: 11077 + - uid: 2277 components: - type: Transform - pos: 45.5,13.5 + rot: 3.141592653589793 rad + pos: -16.5,-24.5 parent: 31 - - uid: 11090 + - uid: 2307 components: - type: Transform - pos: 30.5,23.5 + pos: -35.5,-22.5 parent: 31 - - uid: 11110 + - uid: 2423 components: - type: Transform - pos: -6.5,30.5 + pos: 28.5,-14.5 parent: 31 - - uid: 11112 + - uid: 2595 components: - type: Transform - pos: -7.5,30.5 + pos: 50.5,-25.5 parent: 31 - - uid: 11113 + - uid: 2605 components: - type: Transform - pos: -5.5,30.5 + pos: 48.5,-25.5 parent: 31 - - uid: 11145 + - uid: 2689 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,11.5 + pos: -7.5,29.5 parent: 31 - - uid: 11156 + - uid: 2721 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 69.5,-1.5 + rot: -1.5707963267948966 rad + pos: 48.5,28.5 parent: 31 - - uid: 11159 + - uid: 2848 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 67.5,-4.5 + rot: -1.5707963267948966 rad + pos: -25.5,-17.5 parent: 31 - - uid: 11161 + - uid: 2849 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,6.5 + rot: -1.5707963267948966 rad + pos: -20.5,-17.5 parent: 31 - - uid: 11162 + - uid: 3109 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,6.5 + pos: 60.5,11.5 parent: 31 - - uid: 11163 + - uid: 3242 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,8.5 + rot: -1.5707963267948966 rad + pos: 46.5,28.5 parent: 31 - - uid: 11164 + - uid: 3415 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,5.5 + pos: -16.5,-40.5 parent: 31 - - uid: 11166 + - uid: 3593 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 64.5,-4.5 + pos: -37.5,-29.5 parent: 31 - - uid: 11167 + - uid: 3825 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 63.5,-4.5 + rot: -1.5707963267948966 rad + pos: 48.5,28.5 parent: 31 - - uid: 11168 + - uid: 4020 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 69.5,12.5 + rot: -1.5707963267948966 rad + pos: 3.5,36.5 parent: 31 - - uid: 11172 + - uid: 4032 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,5.5 + pos: 28.5,-13.5 parent: 31 - - uid: 11176 + - uid: 4044 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 68.5,-4.5 + rot: -1.5707963267948966 rad + pos: 5.5,34.5 parent: 31 - - uid: 11179 + - uid: 4081 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,4.5 + pos: -7.5,30.5 parent: 31 - - uid: 11190 + - uid: 4085 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,11.5 + rot: -1.5707963267948966 rad + pos: -1.5,34.5 parent: 31 - - uid: 11192 + - uid: 4086 components: - type: Transform - pos: 63.5,11.5 + rot: 1.5707963267948966 rad + pos: -7.5,28.5 parent: 31 - - uid: 11193 + - uid: 4114 components: - type: Transform - pos: 64.5,11.5 + pos: -12.5,6.5 parent: 31 - - uid: 11324 + - uid: 4115 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-23.5 + rot: -1.5707963267948966 rad + pos: 4.5,36.5 parent: 31 - - uid: 11326 + - uid: 4117 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-20.5 + pos: -3.5,8.5 parent: 31 - - uid: 11367 + - uid: 4223 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-19.5 + pos: -2.5,9.5 parent: 31 - - uid: 11408 + - uid: 4231 components: - type: Transform rot: -1.5707963267948966 rad - pos: -43.5,-4.5 + pos: -1.5,35.5 parent: 31 - - uid: 11409 + - uid: 4393 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -41.5,-2.5 + pos: 58.5,6.5 parent: 31 - - uid: 11410 + - uid: 4394 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -41.5,-6.5 + pos: 61.5,6.5 parent: 31 - - uid: 11480 + - uid: 4399 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,16.5 + rot: 3.141592653589793 rad + pos: 54.5,1.5 parent: 31 - - uid: 11770 + - uid: 4403 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,6.5 + rot: 3.141592653589793 rad + pos: 54.5,3.5 parent: 31 - - uid: 11771 + - uid: 4445 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,7.5 + pos: 59.5,-10.5 parent: 31 - - uid: 11772 + - uid: 4460 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,8.5 + rot: 3.141592653589793 rad + pos: -17.5,-24.5 parent: 31 - - uid: 11811 + - uid: 4487 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,3.5 + pos: 34.5,-13.5 parent: 31 - - uid: 11831 + - uid: 4500 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 64.5,12.5 + pos: 54.5,-7.5 parent: 31 - - uid: 11832 + - uid: 4517 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 67.5,12.5 + rot: 3.141592653589793 rad + pos: -27.5,-6.5 parent: 31 - - uid: 11833 + - uid: 4614 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,12.5 + pos: 34.5,-12.5 parent: 31 - - uid: 11841 + - uid: 4702 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 67.5,11.5 + rot: -1.5707963267948966 rad + pos: -9.5,18.5 parent: 31 - - uid: 11845 + - uid: 4773 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,7.5 + pos: 2.5,27.5 parent: 31 - - uid: 11906 + - uid: 4844 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,-5.5 + pos: 12.5,-32.5 parent: 31 - - uid: 11907 + - uid: 4853 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,-5.5 + pos: 58.5,3.5 parent: 31 - - uid: 11908 + - uid: 4879 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-5.5 + pos: -2.5,6.5 parent: 31 - - uid: 11909 + - uid: 4881 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,-5.5 + pos: -0.5,6.5 parent: 31 - - uid: 11910 + - uid: 5071 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,5.5 + pos: 13.5,1.5 parent: 31 - - uid: 11911 + - uid: 5072 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,3.5 + pos: 13.5,-2.5 parent: 31 - - uid: 11912 + - uid: 5082 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,4.5 + pos: 13.5,0.5 parent: 31 - - uid: 11913 + - uid: 5102 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,2.5 + pos: 51.5,-6.5 parent: 31 - - uid: 11914 + - uid: 5117 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,1.5 + pos: -3.5,7.5 parent: 31 - - uid: 11915 + - uid: 5139 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 80.5,0.5 + pos: 8.5,-11.5 parent: 31 - - uid: 11916 + - uid: 5198 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 79.5,0.5 + pos: -28.5,18.5 parent: 31 - - uid: 11917 + - uid: 5199 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 79.5,-0.5 + pos: -29.5,18.5 parent: 31 - - uid: 11918 + - uid: 5215 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 78.5,-0.5 + pos: -10.5,13.5 parent: 31 - - uid: 11919 + - uid: 5222 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 78.5,-1.5 + rot: 3.141592653589793 rad + pos: -13.5,-13.5 parent: 31 - - uid: 11920 + - uid: 5244 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 77.5,-1.5 + pos: -39.5,21.5 parent: 31 - - uid: 11921 + - uid: 5251 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 77.5,-2.5 + pos: -39.5,27.5 parent: 31 - - uid: 11922 + - uid: 5313 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 76.5,-2.5 + pos: -43.5,9.5 parent: 31 - - uid: 11923 + - uid: 5898 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 76.5,-3.5 + pos: -41.5,7.5 parent: 31 - - uid: 11924 + - uid: 5978 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 75.5,-3.5 + pos: -54.5,-9.5 parent: 31 - - uid: 11925 + - uid: 6287 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 75.5,-4.5 + pos: 54.5,-8.5 parent: 31 - - uid: 11926 + - uid: 6366 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 74.5,-4.5 + pos: 22.5,14.5 parent: 31 - - uid: 11927 + - uid: 6367 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 74.5,-5.5 + pos: 40.5,18.5 parent: 31 - - uid: 11928 + - uid: 6369 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 73.5,-5.5 + pos: 42.5,18.5 parent: 31 - - uid: 11929 + - uid: 6380 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 73.5,-6.5 + pos: 39.5,18.5 parent: 31 - - uid: 11930 + - uid: 6381 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 72.5,-6.5 + pos: 38.5,18.5 parent: 31 - - uid: 11931 + - uid: 6383 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 72.5,-7.5 + pos: 37.5,18.5 parent: 31 - - uid: 11932 + - uid: 6385 components: - type: Transform rot: -1.5707963267948966 rad - pos: 71.5,-7.5 + pos: 46.5,27.5 parent: 31 - - uid: 11933 + - uid: 6387 components: - type: Transform rot: -1.5707963267948966 rad - pos: 70.5,-7.5 + pos: 50.5,28.5 parent: 31 - - uid: 11934 + - uid: 6390 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 69.5,-7.5 + pos: 50.5,10.5 parent: 31 - - uid: 12029 + - uid: 6391 components: - type: Transform - pos: 68.5,-8.5 + pos: 35.5,18.5 parent: 31 - - uid: 12030 + - uid: 6393 components: - type: Transform - pos: 67.5,-8.5 + pos: 49.5,10.5 parent: 31 - - uid: 12031 + - uid: 6394 components: - type: Transform - pos: 69.5,-8.5 + pos: 48.5,10.5 parent: 31 - - uid: 12032 + - uid: 6401 components: - type: Transform - pos: 65.5,-8.5 + pos: 34.5,18.5 parent: 31 - - uid: 12033 + - uid: 6405 components: - type: Transform - pos: 66.5,-8.5 + pos: 23.5,20.5 parent: 31 - - uid: 12034 + - uid: 6406 components: - type: Transform - pos: 64.5,-8.5 + rot: -1.5707963267948966 rad + pos: 50.5,28.5 parent: 31 - - uid: 12035 + - uid: 6415 components: - type: Transform - pos: 63.5,-8.5 + rot: 3.141592653589793 rad + pos: 54.5,17.5 parent: 31 - - uid: 12036 + - uid: 6440 components: - type: Transform - pos: 62.5,-8.5 + pos: 43.5,18.5 parent: 31 - - uid: 12099 + - uid: 6445 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,15.5 - parent: 12098 - - uid: 12296 + pos: 45.5,18.5 + parent: 31 + - uid: 6453 components: - type: Transform - pos: -45.5,11.5 + rot: 3.141592653589793 rad + pos: 54.5,15.5 parent: 31 - - uid: 12297 + - uid: 6455 components: - type: Transform - pos: -46.5,11.5 + pos: 33.5,18.5 parent: 31 - - uid: 12298 + - uid: 6456 components: - type: Transform - pos: -47.5,11.5 + rot: 3.141592653589793 rad + pos: 54.5,16.5 parent: 31 - - uid: 12299 + - uid: 6458 components: - type: Transform - pos: -48.5,11.5 + pos: 45.5,7.5 parent: 31 - - uid: 12300 + - uid: 6464 components: - type: Transform - pos: -49.5,11.5 + pos: 45.5,9.5 parent: 31 - - uid: 12301 + - uid: 6472 components: - type: Transform - pos: -50.5,11.5 + pos: 47.5,18.5 parent: 31 - - uid: 12302 + - uid: 6503 components: - type: Transform - pos: -51.5,11.5 + rot: -1.5707963267948966 rad + pos: 55.5,24.5 parent: 31 - - uid: 12303 + - uid: 6504 components: - type: Transform - pos: -52.5,11.5 + pos: 44.5,18.5 parent: 31 - - uid: 12304 + - uid: 6508 components: - type: Transform - pos: -53.5,11.5 + pos: 46.5,18.5 parent: 31 - - uid: 12305 + - uid: 6509 components: - type: Transform - pos: -53.5,9.5 + rot: -1.5707963267948966 rad + pos: 3.5,-12.5 parent: 31 - - uid: 12306 + - uid: 6539 components: - type: Transform - pos: -52.5,9.5 + pos: 47.5,10.5 parent: 31 - - uid: 12307 + - uid: 6551 components: - type: Transform - pos: -51.5,9.5 + pos: 48.5,18.5 parent: 31 - - uid: 12308 + - uid: 6565 components: - type: Transform - pos: -50.5,9.5 + pos: 46.5,14.5 parent: 31 - - uid: 12309 + - uid: 6605 components: - type: Transform - pos: -49.5,9.5 + pos: 47.5,14.5 parent: 31 - - uid: 12310 + - uid: 6606 components: - type: Transform - pos: -47.5,9.5 + pos: 48.5,14.5 parent: 31 - - uid: 12311 + - uid: 6613 components: - type: Transform - pos: -48.5,9.5 + pos: 36.5,18.5 parent: 31 - - uid: 12312 + - uid: 6641 components: - type: Transform - pos: -46.5,9.5 + pos: -41.5,-8.5 parent: 31 - - uid: 12313 + - uid: 6645 components: - type: Transform - pos: -45.5,9.5 + rot: -1.5707963267948966 rad + pos: 58.5,23.5 parent: 31 - - uid: 12314 + - uid: 6721 components: - type: Transform - pos: -45.5,7.5 + rot: -1.5707963267948966 rad + pos: 65.5,14.5 parent: 31 - - uid: 12315 + - uid: 6725 components: - type: Transform - pos: -46.5,7.5 + rot: -1.5707963267948966 rad + pos: 58.5,22.5 parent: 31 - - uid: 12316 + - uid: 6726 components: - type: Transform - pos: -47.5,7.5 + rot: -1.5707963267948966 rad + pos: 53.5,24.5 parent: 31 - - uid: 12317 + - uid: 6728 components: - type: Transform - pos: -48.5,7.5 + rot: -1.5707963267948966 rad + pos: 58.5,24.5 parent: 31 - - uid: 12318 + - uid: 6729 components: - type: Transform - pos: -50.5,7.5 + rot: -1.5707963267948966 rad + pos: 56.5,24.5 parent: 31 - - uid: 12319 + - uid: 6730 components: - type: Transform - pos: -49.5,7.5 + rot: -1.5707963267948966 rad + pos: 57.5,24.5 parent: 31 - - uid: 12320 + - uid: 6733 components: - type: Transform - pos: -51.5,7.5 + pos: 58.5,0.5 parent: 31 - - uid: 12321 + - uid: 6742 components: - type: Transform - pos: -52.5,7.5 + pos: 46.5,10.5 parent: 31 - - uid: 12322 + - uid: 6812 components: - type: Transform - pos: -53.5,7.5 + rot: 1.5707963267948966 rad + pos: -10.5,-42.5 parent: 31 - - uid: 12334 + - uid: 6815 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -45.5,3.5 + pos: 41.5,18.5 parent: 31 - - uid: 12335 + - uid: 6841 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -46.5,3.5 + pos: 50.5,14.5 parent: 31 - - uid: 12336 + - uid: 6844 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -48.5,3.5 + pos: 49.5,14.5 parent: 31 - - uid: 12337 + - uid: 6847 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -47.5,3.5 + rot: 3.141592653589793 rad + pos: 54.5,26.5 parent: 31 - - uid: 12338 + - uid: 6863 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -49.5,3.5 + pos: 27.5,22.5 parent: 31 - - uid: 12339 + - uid: 6868 components: - type: Transform rot: -1.5707963267948966 rad - pos: -50.5,3.5 + pos: 79.5,13.5 parent: 31 - - uid: 12340 + - uid: 6873 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -51.5,3.5 + pos: 59.5,11.5 parent: 31 - - uid: 12341 + - uid: 6933 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -52.5,3.5 + pos: 49.5,18.5 parent: 31 - - uid: 12342 + - uid: 6964 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -53.5,3.5 + pos: 34.5,-14.5 parent: 31 - - uid: 12343 + - uid: 7040 components: - type: Transform rot: -1.5707963267948966 rad - pos: -53.5,1.5 + pos: 45.5,27.5 parent: 31 - - uid: 12344 + - uid: 7044 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -52.5,1.5 + pos: 28.5,-12.5 parent: 31 - - uid: 12345 + - uid: 7070 components: - type: Transform rot: -1.5707963267948966 rad - pos: -51.5,1.5 + pos: 61.5,20.5 parent: 31 - - uid: 12346 + - uid: 7112 components: - type: Transform rot: -1.5707963267948966 rad - pos: -50.5,1.5 + pos: 73.5,14.5 parent: 31 - - uid: 12347 + - uid: 7186 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -49.5,1.5 + rot: 1.5707963267948966 rad + pos: 66.5,11.5 parent: 31 - - uid: 12348 + - uid: 7188 components: - type: Transform rot: -1.5707963267948966 rad - pos: -48.5,1.5 + pos: 64.5,14.5 parent: 31 - - uid: 12349 + - uid: 7192 components: - type: Transform rot: -1.5707963267948966 rad - pos: -47.5,1.5 + pos: 66.5,14.5 parent: 31 - - uid: 12350 + - uid: 7193 components: - type: Transform rot: -1.5707963267948966 rad - pos: -46.5,1.5 + pos: 61.5,15.5 parent: 31 - - uid: 12351 + - uid: 7194 components: - type: Transform rot: -1.5707963267948966 rad - pos: -45.5,1.5 + pos: 62.5,15.5 parent: 31 - - uid: 12352 + - uid: 7195 components: - type: Transform rot: -1.5707963267948966 rad - pos: -44.5,-0.5 + pos: 61.5,18.5 parent: 31 - - uid: 12353 + - uid: 7196 components: - type: Transform rot: -1.5707963267948966 rad - pos: -45.5,-0.5 + pos: 60.5,20.5 parent: 31 - - uid: 12354 + - uid: 7198 components: - type: Transform rot: -1.5707963267948966 rad - pos: -47.5,-0.5 + pos: 59.5,20.5 parent: 31 - - uid: 12355 + - uid: 7199 components: - type: Transform rot: -1.5707963267948966 rad - pos: -46.5,-0.5 + pos: 71.5,14.5 parent: 31 - - uid: 12356 + - uid: 7200 components: - type: Transform rot: -1.5707963267948966 rad - pos: -48.5,-0.5 + pos: 72.5,14.5 parent: 31 - - uid: 12357 + - uid: 7201 components: - type: Transform rot: -1.5707963267948966 rad - pos: -49.5,-0.5 + pos: 76.5,14.5 parent: 31 - - uid: 12358 + - uid: 7202 components: - type: Transform rot: -1.5707963267948966 rad - pos: -50.5,-0.5 + pos: 75.5,14.5 parent: 31 - - uid: 12359 + - uid: 7203 components: - type: Transform rot: -1.5707963267948966 rad - pos: -51.5,-0.5 + pos: 77.5,14.5 parent: 31 - - uid: 12360 + - uid: 7204 components: - type: Transform rot: -1.5707963267948966 rad - pos: -52.5,-0.5 + pos: 80.5,11.5 parent: 31 - - uid: 12361 + - uid: 7213 components: - type: Transform rot: -1.5707963267948966 rad - pos: -53.5,-0.5 + pos: 78.5,13.5 parent: 31 - - uid: 12527 + - uid: 7215 components: - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,28.5 + rot: -1.5707963267948966 rad + pos: 80.5,9.5 parent: 31 - - uid: 12528 + - uid: 7216 components: - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,28.5 + rot: -1.5707963267948966 rad + pos: 80.5,7.5 parent: 31 - - uid: 12529 + - uid: 7217 components: - type: Transform - rot: 3.141592653589793 rad - pos: 34.5,28.5 + rot: -1.5707963267948966 rad + pos: 80.5,6.5 parent: 31 - - uid: 12530 + - uid: 7221 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,28.5 + pos: 34.5,20.5 parent: 31 - - uid: 12531 + - uid: 7226 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,27.5 + pos: 36.5,20.5 parent: 31 - - uid: 12533 + - uid: 7233 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,25.5 + pos: 13.5,-5.5 parent: 31 - - uid: 12534 + - uid: 7274 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,24.5 + pos: 12.5,-6.5 parent: 31 - - uid: 12536 + - uid: 7304 components: - type: Transform rot: -1.5707963267948966 rad - pos: 37.5,27.5 + pos: 61.5,19.5 parent: 31 - - uid: 12537 + - uid: 7305 components: - type: Transform rot: -1.5707963267948966 rad - pos: 36.5,28.5 + pos: 78.5,14.5 parent: 31 - - uid: 12971 + - uid: 7307 components: - type: Transform - pos: -22.5,26.5 + pos: 1.5,-34.5 parent: 31 - - uid: 12972 + - uid: 7358 components: - type: Transform - pos: -21.5,26.5 + rot: -1.5707963267948966 rad + pos: -42.5,15.5 parent: 31 - - uid: 12973 + - uid: 7375 components: - type: Transform - pos: -20.5,26.5 + pos: 61.5,-10.5 parent: 31 -- proto: GrilleBroken - entities: - - uid: 80 + - uid: 7407 components: - type: Transform rot: 1.5707963267948966 rad - pos: -40.5,20.5 - parent: 31 - - uid: 552 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -42.5,12.5 + pos: 60.5,-26.5 parent: 31 - - uid: 831 + - uid: 7422 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,33.5 + rot: 1.5707963267948966 rad + pos: 60.5,-19.5 parent: 31 - - uid: 1025 + - uid: 7425 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,32.5 + pos: 61.5,-11.5 parent: 31 - - uid: 1520 + - uid: 7436 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,34.5 + rot: 1.5707963267948966 rad + pos: 60.5,-18.5 parent: 31 - - uid: 3658 + - uid: 7447 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,34.5 + pos: 0.5,-32.5 parent: 31 - - uid: 3825 + - uid: 7448 components: - type: Transform rot: 3.141592653589793 rad - pos: -15.5,27.5 + pos: -0.5,-32.5 parent: 31 - - uid: 4025 + - uid: 7449 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,36.5 + rot: 3.141592653589793 rad + pos: -1.5,-32.5 parent: 31 - - uid: 4444 + - uid: 7450 components: - type: Transform rot: 3.141592653589793 rad - pos: 61.5,-8.5 + pos: -2.5,-32.5 parent: 31 - - uid: 4447 + - uid: 7472 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 61.5,-13.5 + pos: -31.5,19.5 parent: 31 - - uid: 6467 + - uid: 7485 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,24.5 + pos: 1.5,-27.5 parent: 31 - - uid: 6744 + - uid: 7488 components: - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,21.5 + pos: 61.5,-7.5 parent: 31 - - uid: 6747 + - uid: 7632 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 54.5,24.5 + pos: -39.5,19.5 parent: 31 - - uid: 7080 + - uid: 7634 components: - type: Transform rot: 1.5707963267948966 rad - pos: -11.5,-42.5 + pos: 60.5,-22.5 parent: 31 - - uid: 7431 + - uid: 7636 components: - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,30.5 + pos: -47.5,-12.5 parent: 31 - - uid: 7579 + - uid: 7648 components: - type: Transform rot: 1.5707963267948966 rad - pos: 60.5,-15.5 + pos: 60.5,-20.5 parent: 31 - - uid: 7676 + - uid: 7649 components: - type: Transform rot: 3.141592653589793 rad - pos: 61.5,-12.5 + pos: 60.5,-24.5 parent: 31 - - uid: 8033 + - uid: 7667 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,29.5 + rot: 3.141592653589793 rad + pos: 54.5,26.5 parent: 31 - - uid: 8034 + - uid: 7672 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,29.5 + pos: -16.5,7.5 parent: 31 - - uid: 8035 + - uid: 7677 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,29.5 + pos: 62.5,-10.5 parent: 31 - - uid: 8308 + - uid: 7678 components: - type: Transform - pos: 58.5,-31.5 + pos: 61.5,-16.5 parent: 31 - - uid: 8369 + - uid: 7679 components: - type: Transform - pos: 38.5,26.5 + pos: 61.5,-14.5 parent: 31 - - uid: 8386 + - uid: 7688 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,36.5 + pos: 23.5,19.5 parent: 31 - - uid: 8387 + - uid: 7692 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 56.5,-38.5 + pos: -39.5,12.5 parent: 31 - - uid: 8388 + - uid: 7697 components: - type: Transform - pos: 58.5,-36.5 + pos: -46.5,-12.5 parent: 31 - - uid: 8389 + - uid: 7709 components: - type: Transform rot: 3.141592653589793 rad - pos: 58.5,-35.5 + pos: -4.5,35.5 parent: 31 - - uid: 8391 + - uid: 7713 components: - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,-28.5 + pos: -54.5,-10.5 parent: 31 - - uid: 8392 + - uid: 7748 components: - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,-26.5 + rot: 1.5707963267948966 rad + pos: 60.5,-27.5 parent: 31 - - uid: 8393 + - uid: 7777 components: - type: Transform - pos: 58.5,-26.5 + pos: 45.5,12.5 parent: 31 - - uid: 8394 + - uid: 7798 components: - type: Transform - pos: 58.5,-20.5 + pos: 13.5,-10.5 parent: 31 - - uid: 8395 + - uid: 7800 components: - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,-20.5 + pos: 13.5,-11.5 parent: 31 - - uid: 8396 + - uid: 7824 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 58.5,-17.5 + pos: -5.5,-33.5 parent: 31 - - uid: 8397 + - uid: 7830 components: - type: Transform - pos: 58.5,-15.5 + pos: -42.5,-8.5 parent: 31 - - uid: 8398 + - uid: 7838 components: - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,-13.5 + pos: -18.5,26.5 parent: 31 - - uid: 8748 + - uid: 7839 + components: + - type: Transform + pos: -15.5,26.5 + parent: 31 + - uid: 7840 components: - type: Transform rot: -1.5707963267948966 rad - pos: 40.5,26.5 + pos: 52.5,28.5 parent: 31 - - uid: 8749 + - uid: 7854 components: - type: Transform rot: -1.5707963267948966 rad - pos: 46.5,26.5 + pos: 53.5,27.5 parent: 31 - - uid: 9674 + - uid: 7867 components: - type: Transform - pos: 14.5,-33.5 + pos: 28.5,-25.5 parent: 31 - - uid: 9819 + - uid: 7868 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 13.5,-45.5 + pos: 28.5,-23.5 parent: 31 - - uid: 9844 + - uid: 7871 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-47.5 + rot: 1.5707963267948966 rad + pos: 60.5,-29.5 parent: 31 - - uid: 9845 + - uid: 7898 components: - type: Transform - pos: 4.5,-46.5 + rot: 1.5707963267948966 rad + pos: 59.5,-29.5 parent: 31 - - uid: 9846 + - uid: 7947 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-46.5 + pos: -40.5,-8.5 parent: 31 - - uid: 9848 + - uid: 8048 components: - type: Transform - pos: 11.5,-44.5 + pos: 29.5,21.5 parent: 31 - - uid: 9850 + - uid: 8052 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 10.5,-45.5 + pos: -41.5,6.5 parent: 31 - - uid: 9851 + - uid: 8074 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-45.5 + pos: 45.5,11.5 parent: 31 - - uid: 9852 + - uid: 8084 components: - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-37.5 + pos: -16.5,6.5 parent: 31 - - uid: 9853 + - uid: 8097 components: - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,-34.5 + pos: 3.5,-23.5 parent: 31 - - uid: 9854 + - uid: 8103 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-46.5 + rot: -1.5707963267948966 rad + pos: 61.5,17.5 parent: 31 - - uid: 9855 + - uid: 8108 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,-47.5 + pos: 61.5,0.5 parent: 31 - - uid: 9856 + - uid: 8109 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-47.5 + rot: 1.5707963267948966 rad + pos: 61.5,1.5 parent: 31 - - uid: 9859 + - uid: 8111 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-39.5 + rot: 1.5707963267948966 rad + pos: 61.5,3.5 parent: 31 - - uid: 9860 + - uid: 8112 components: - type: Transform - pos: -22.5,-36.5 + rot: 1.5707963267948966 rad + pos: 61.5,4.5 parent: 31 - - uid: 9871 + - uid: 8145 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,-36.5 + pos: 52.5,8.5 parent: 31 - - uid: 9874 + - uid: 8156 components: - type: Transform rot: 1.5707963267948966 rad - pos: -18.5,-39.5 + pos: 4.5,-31.5 parent: 31 - - uid: 9879 + - uid: 8157 components: - type: Transform rot: 1.5707963267948966 rad - pos: -21.5,-36.5 + pos: 2.5,-31.5 parent: 31 - - uid: 10144 + - uid: 8222 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-42.5 + pos: -32.5,19.5 parent: 31 - - uid: 10225 + - uid: 8306 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-10.5 + pos: 50.5,18.5 parent: 31 - - uid: 10227 + - uid: 8329 components: - type: Transform - pos: -10.5,30.5 + pos: 48.5,-6.5 parent: 31 - - uid: 10228 + - uid: 8330 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,-13.5 + pos: 54.5,-2.5 parent: 31 - - uid: 10467 + - uid: 8331 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,-42.5 + pos: 58.5,-16.5 parent: 31 - - uid: 10512 + - uid: 8362 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,20.5 + pos: 42.5,26.5 parent: 31 - - uid: 10605 + - uid: 8363 components: - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,-9.5 + pos: 44.5,26.5 parent: 31 - - uid: 10708 + - uid: 8364 components: - type: Transform - pos: -0.5,37.5 + pos: 45.5,26.5 parent: 31 - - uid: 12532 + - uid: 8367 components: - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,26.5 + pos: -33.5,-15.5 parent: 31 -- proto: GrilleDiagonal - entities: - - uid: 1577 + - uid: 8371 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-35.5 + pos: 43.5,26.5 parent: 31 - - uid: 9557 + - uid: 8448 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-33.5 + rot: 3.141592653589793 rad + pos: -10.5,8.5 parent: 31 - - uid: 12535 + - uid: 8484 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,28.5 + pos: -13.5,-19.5 parent: 31 -- proto: GrilleSpawner - entities: - - uid: 420 + - uid: 8522 components: - type: Transform - pos: 35.5,-34.5 + rot: -1.5707963267948966 rad + pos: 0.5,36.5 parent: 31 - - uid: 421 + - uid: 8566 components: - type: Transform - pos: 35.5,-37.5 + pos: -37.5,-24.5 parent: 31 - - uid: 422 + - uid: 8567 components: - type: Transform - pos: 34.5,-30.5 + pos: -37.5,-23.5 parent: 31 - - uid: 437 + - uid: 8568 components: - type: Transform - pos: 40.5,-32.5 + pos: -36.5,-22.5 parent: 31 - - uid: 465 + - uid: 8570 components: - type: Transform - pos: 28.5,-45.5 + pos: -34.5,-22.5 parent: 31 - - uid: 466 + - uid: 8571 components: - type: Transform - pos: 28.5,-35.5 + pos: -33.5,-23.5 parent: 31 - - uid: 468 + - uid: 8572 components: - type: Transform - pos: 30.5,-47.5 + pos: -33.5,-24.5 parent: 31 - - uid: 470 + - uid: 8576 components: - type: Transform - pos: 28.5,-44.5 + pos: -32.5,-33.5 parent: 31 - - uid: 471 + - uid: 8601 components: - type: Transform - pos: 39.5,-35.5 + rot: 3.141592653589793 rad + pos: -29.5,-32.5 parent: 31 - - uid: 481 + - uid: 8803 components: - type: Transform - pos: 36.5,-35.5 + rot: -1.5707963267948966 rad + pos: 5.5,33.5 parent: 31 - - uid: 482 + - uid: 8807 components: - type: Transform - pos: 37.5,-35.5 + pos: -12.5,26.5 parent: 31 - - uid: 483 + - uid: 8929 components: - type: Transform - pos: 36.5,-33.5 + pos: -25.5,-8.5 parent: 31 - - uid: 485 + - uid: 8942 components: - type: Transform - pos: 35.5,-47.5 + rot: 3.141592653589793 rad + pos: 53.5,26.5 parent: 31 - - uid: 486 + - uid: 8946 components: - type: Transform - pos: 43.5,-34.5 + rot: 3.141592653589793 rad + pos: -1.5,2.5 parent: 31 - - uid: 487 + - uid: 8947 components: - type: Transform - pos: 37.5,-47.5 + rot: 3.141592653589793 rad + pos: -2.5,2.5 parent: 31 - - uid: 488 + - uid: 8948 components: - type: Transform - pos: 39.5,-47.5 + rot: 3.141592653589793 rad + pos: -3.5,2.5 parent: 31 - - uid: 489 + - uid: 9008 components: - type: Transform - pos: 42.5,-35.5 + rot: 3.141592653589793 rad + pos: 55.5,26.5 parent: 31 - - uid: 499 + - uid: 9012 components: - type: Transform - pos: 43.5,-31.5 + pos: -4.5,-33.5 parent: 31 - - uid: 500 + - uid: 9019 components: - type: Transform - pos: 45.5,-30.5 + rot: -1.5707963267948966 rad + pos: 79.5,12.5 parent: 31 - - uid: 502 + - uid: 9027 components: - type: Transform - pos: 45.5,-32.5 + pos: -8.5,-24.5 parent: 31 - - uid: 504 + - uid: 9030 components: - type: Transform - pos: 44.5,-33.5 + rot: -1.5707963267948966 rad + pos: 80.5,10.5 parent: 31 - - uid: 505 + - uid: 9063 components: - type: Transform - pos: 37.5,-33.5 + rot: -1.5707963267948966 rad + pos: 80.5,8.5 parent: 31 - - uid: 512 + - uid: 9064 components: - type: Transform - pos: 40.5,-36.5 + rot: -1.5707963267948966 rad + pos: 80.5,12.5 parent: 31 - - uid: 559 + - uid: 9124 components: - type: Transform - pos: 39.5,-33.5 + pos: 5.5,-11.5 parent: 31 - - uid: 932 + - uid: 9125 components: - type: Transform - pos: 18.5,-32.5 + pos: 5.5,-10.5 parent: 31 - - uid: 1046 + - uid: 9126 components: - type: Transform - pos: 41.5,-33.5 + pos: 5.5,-8.5 parent: 31 - - uid: 1695 + - uid: 9127 components: - type: Transform - pos: 40.5,-28.5 + pos: 5.5,-7.5 parent: 31 - - uid: 2537 + - uid: 9136 components: - type: Transform - pos: 35.5,-32.5 + pos: 26.5,22.5 parent: 31 - - uid: 3053 + - uid: 9145 components: - type: Transform - pos: 32.5,-47.5 + rot: -1.5707963267948966 rad + pos: 63.5,14.5 parent: 31 - - uid: 3424 + - uid: 9163 components: - type: Transform - pos: 20.5,-32.5 + rot: -1.5707963267948966 rad + pos: 74.5,14.5 parent: 31 - - uid: 3475 + - uid: 9174 components: - type: Transform - pos: 40.5,-46.5 + pos: -37.5,-12.5 parent: 31 - - uid: 3806 + - uid: 9175 components: - type: Transform - pos: -39.5,23.5 + pos: -39.5,-1.5 parent: 31 - - uid: 3807 + - uid: 9198 components: - type: Transform - pos: -39.5,22.5 + rot: -1.5707963267948966 rad + pos: -21.5,4.5 parent: 31 - - uid: 4195 + - uid: 9208 components: - type: Transform - pos: -39.5,25.5 + pos: -36.5,-12.5 parent: 31 - - uid: 4343 + - uid: 9209 components: - type: Transform - pos: 39.5,-31.5 + pos: -35.5,-12.5 parent: 31 - - uid: 4401 + - uid: 9231 components: - type: Transform - pos: 41.5,-31.5 + pos: -41.5,-0.5 parent: 31 - - uid: 4411 + - uid: 9232 components: - type: Transform - pos: 40.5,-40.5 + pos: -42.5,-0.5 parent: 31 - - uid: 4412 + - uid: 9233 components: - type: Transform - pos: 35.5,-30.5 + pos: -43.5,-0.5 parent: 31 - - uid: 4413 + - uid: 9234 components: - type: Transform - pos: 38.5,-31.5 + pos: -43.5,11.5 parent: 31 - - uid: 4415 + - uid: 9235 components: - type: Transform - pos: 40.5,-30.5 + pos: -42.5,11.5 parent: 31 - - uid: 4422 + - uid: 9236 components: - type: Transform - pos: 34.5,-28.5 + pos: -41.5,11.5 parent: 31 - - uid: 4423 + - uid: 9254 components: - type: Transform - pos: 22.5,-32.5 + rot: 3.141592653589793 rad + pos: -3.5,29.5 parent: 31 - - uid: 4426 + - uid: 9257 components: - type: Transform - pos: 40.5,-38.5 + pos: -7.5,-24.5 parent: 31 - - uid: 4454 + - uid: 9260 components: - type: Transform - pos: 40.5,-42.5 + rot: -1.5707963267948966 rad + pos: 68.5,14.5 parent: 31 - - uid: 4462 + - uid: 9291 components: - type: Transform - pos: 40.5,-44.5 + rot: -1.5707963267948966 rad + pos: -13.5,-30.5 parent: 31 - - uid: 4585 + - uid: 9344 components: - type: Transform - pos: -39.5,24.5 + rot: -1.5707963267948966 rad + pos: 60.5,17.5 parent: 31 - - uid: 4744 + - uid: 9362 components: - type: Transform - pos: -51.5,-32.5 + rot: -1.5707963267948966 rad + pos: -26.5,-30.5 parent: 31 - - uid: 4871 + - uid: 9364 components: - type: Transform - pos: -49.5,-32.5 + rot: -1.5707963267948966 rad + pos: -30.5,-25.5 parent: 31 - - uid: 4872 + - uid: 9368 components: - type: Transform - pos: -47.5,-32.5 + rot: -1.5707963267948966 rad + pos: -27.5,-30.5 parent: 31 - - uid: 4876 + - uid: 9370 components: - type: Transform - pos: -55.5,-24.5 + rot: -1.5707963267948966 rad + pos: 70.5,14.5 parent: 31 - - uid: 4877 + - uid: 9405 components: - type: Transform - pos: -55.5,-26.5 + rot: -1.5707963267948966 rad + pos: 69.5,14.5 parent: 31 - - uid: 4896 + - uid: 9408 components: - type: Transform - pos: -39.5,26.5 + pos: -4.5,-37.5 parent: 31 - - uid: 4953 + - uid: 9409 components: - type: Transform - pos: -55.5,-28.5 + pos: -3.5,-37.5 parent: 31 - - uid: 4955 + - uid: 9410 components: - type: Transform - pos: -53.5,-32.5 + pos: -2.5,-37.5 parent: 31 - - uid: 4956 + - uid: 9413 components: - type: Transform - pos: -55.5,-32.5 + pos: -1.5,-37.5 parent: 31 - - uid: 4960 + - uid: 9419 components: - type: Transform - pos: -55.5,-30.5 + pos: -14.5,-33.5 parent: 31 - - uid: 5051 + - uid: 9420 components: - type: Transform - pos: 28.5,-37.5 + pos: -15.5,-33.5 parent: 31 - - uid: 5052 + - uid: 9421 components: - type: Transform - pos: 28.5,-39.5 + pos: -16.5,-33.5 parent: 31 - - uid: 5053 + - uid: 9422 components: - type: Transform - pos: 28.5,-38.5 + pos: -15.5,-40.5 parent: 31 - - uid: 5054 + - uid: 9423 components: - type: Transform - pos: 28.5,-33.5 + pos: -14.5,-40.5 parent: 31 - - uid: 5129 + - uid: 9424 components: - type: Transform - pos: 28.5,-36.5 + pos: -13.5,-40.5 parent: 31 - - uid: 5131 + - uid: 9460 components: - type: Transform - pos: 28.5,-34.5 + rot: 3.141592653589793 rad + pos: -22.5,-26.5 parent: 31 - - uid: 5159 + - uid: 9515 components: - type: Transform - pos: 27.5,-32.5 + rot: -1.5707963267948966 rad + pos: 49.5,-12.5 parent: 31 - - uid: 5160 + - uid: 9525 components: - type: Transform - pos: 26.5,-32.5 + rot: -1.5707963267948966 rad + pos: 12.5,-41.5 parent: 31 - - uid: 5164 + - uid: 9535 components: - type: Transform - pos: 25.5,-32.5 + rot: -1.5707963267948966 rad + pos: 50.5,-12.5 parent: 31 - - uid: 5165 + - uid: 9536 components: - type: Transform - pos: 28.5,-32.5 + rot: -1.5707963267948966 rad + pos: 51.5,-12.5 parent: 31 - - uid: 5266 + - uid: 9553 components: - type: Transform - pos: -38.5,45.5 + rot: -1.5707963267948966 rad + pos: 67.5,14.5 parent: 31 - - uid: 5267 + - uid: 9561 components: - type: Transform - pos: -37.5,45.5 + pos: 3.5,-35.5 parent: 31 - - uid: 6402 + - uid: 9598 components: - type: Transform - pos: 28.5,-47.5 + rot: -1.5707963267948966 rad + pos: 19.5,-14.5 parent: 31 - - uid: 6410 + - uid: 9658 components: - type: Transform - pos: 28.5,-40.5 + pos: -3.5,-44.5 parent: 31 - - uid: 6437 + - uid: 9659 components: - type: Transform - pos: 28.5,-46.5 + pos: -2.5,-44.5 parent: 31 - - uid: 6442 + - uid: 9660 components: - type: Transform - pos: 28.5,-43.5 + pos: -0.5,-45.5 parent: 31 - - uid: 6469 + - uid: 9661 components: - type: Transform - pos: 28.5,-41.5 + pos: 0.5,-45.5 parent: 31 - - uid: 6511 + - uid: 9662 components: - type: Transform - pos: 24.5,-32.5 + pos: 1.5,-45.5 parent: 31 - - uid: 6681 + - uid: 9686 components: - type: Transform - pos: 33.5,-47.5 + rot: 3.141592653589793 rad + pos: -27.5,-7.5 parent: 31 - - uid: 6710 + - uid: 9692 components: - type: Transform - pos: 40.5,-41.5 + rot: -1.5707963267948966 rad + pos: 12.5,-40.5 parent: 31 - - uid: 6768 + - uid: 9693 components: - type: Transform - pos: 40.5,-43.5 + rot: -1.5707963267948966 rad + pos: 12.5,-42.5 parent: 31 - - uid: 6769 + - uid: 9723 components: - type: Transform - pos: 35.5,-31.5 + pos: 54.5,7.5 parent: 31 - - uid: 6770 + - uid: 9745 components: - type: Transform - pos: 40.5,-29.5 + pos: 58.5,4.5 parent: 31 - - uid: 6771 + - uid: 9765 components: - type: Transform - pos: 37.5,-31.5 + rot: -1.5707963267948966 rad + pos: 58.5,2.5 parent: 31 - - uid: 6772 + - uid: 9769 components: - type: Transform - pos: 40.5,-31.5 + pos: -6.5,-33.5 parent: 31 - - uid: 6773 + - uid: 9805 components: - type: Transform - pos: 21.5,-32.5 + rot: 1.5707963267948966 rad + pos: 14.5,-34.5 parent: 31 - - uid: 6776 + - uid: 9806 components: - type: Transform - pos: 40.5,-45.5 + rot: 1.5707963267948966 rad + pos: 14.5,-35.5 parent: 31 - - uid: 6777 + - uid: 9807 components: - type: Transform - pos: 40.5,-27.5 + rot: 1.5707963267948966 rad + pos: 14.5,-36.5 parent: 31 - - uid: 6780 + - uid: 9808 components: - type: Transform - pos: 19.5,-32.5 + pos: 12.5,-45.5 parent: 31 - - uid: 6781 + - uid: 9809 components: - type: Transform - pos: 35.5,-33.5 + pos: 11.5,-45.5 parent: 31 - - uid: 6993 + - uid: 9810 components: - type: Transform - pos: 40.5,-39.5 + pos: 8.5,-45.5 parent: 31 - - uid: 6994 + - uid: 9811 components: - type: Transform - pos: 40.5,-37.5 + pos: 5.5,-47.5 parent: 31 - - uid: 7220 + - uid: 9812 components: - type: Transform - pos: 34.5,-27.5 + pos: 4.5,-47.5 parent: 31 - - uid: 8025 + - uid: 9813 components: - type: Transform - pos: 36.5,-31.5 + pos: 3.5,-47.5 parent: 31 - - uid: 8354 + - uid: 9814 components: - type: Transform - pos: 38.5,-33.5 + pos: 4.5,-45.5 parent: 31 - - uid: 8355 + - uid: 9815 components: - type: Transform - pos: 42.5,-33.5 + pos: -0.5,-47.5 parent: 31 - - uid: 8356 + - uid: 9817 components: - type: Transform - pos: 40.5,-33.5 + pos: 0.5,-47.5 parent: 31 - - uid: 8357 + - uid: 9823 components: - type: Transform - pos: 35.5,-35.5 + pos: -22.5,-39.5 parent: 31 - - uid: 8375 + - uid: 9824 components: - type: Transform - pos: 35.5,-36.5 + pos: -22.5,-38.5 parent: 31 - - uid: 8376 + - uid: 9826 components: - type: Transform - pos: 34.5,-29.5 + pos: -22.5,-37.5 parent: 31 - - uid: 8377 + - uid: 9827 components: - type: Transform - pos: 42.5,-31.5 + pos: -21.5,-39.5 parent: 31 - - uid: 8378 + - uid: 9832 components: - type: Transform - pos: 44.5,-31.5 + pos: -22.5,-34.5 parent: 31 - - uid: 8379 + - uid: 9837 components: - type: Transform - pos: 45.5,-31.5 + pos: -22.5,-35.5 parent: 31 - - uid: 8380 + - uid: 9838 components: - type: Transform - pos: 45.5,-33.5 + pos: -39.5,14.5 parent: 31 - - uid: 8577 + - uid: 9862 components: - type: Transform - pos: 43.5,-33.5 + rot: -1.5707963267948966 rad + pos: -1.5,33.5 parent: 31 - - uid: 8578 + - uid: 9889 components: - type: Transform - pos: 43.5,-35.5 + rot: -1.5707963267948966 rad + pos: -42.5,13.5 parent: 31 - - uid: 8579 + - uid: 9899 components: - type: Transform - pos: 41.5,-35.5 + rot: -1.5707963267948966 rad + pos: -0.5,36.5 parent: 31 - - uid: 8580 + - uid: 9949 components: - type: Transform - pos: 40.5,-35.5 + rot: 1.5707963267948966 rad + pos: 43.5,-14.5 parent: 31 - - uid: 8589 + - uid: 10061 components: - type: Transform - pos: 36.5,-47.5 + rot: -1.5707963267948966 rad + pos: 18.5,27.5 parent: 31 - - uid: 8590 + - uid: 10064 components: - type: Transform - pos: 38.5,-47.5 + rot: -1.5707963267948966 rad + pos: 18.5,26.5 parent: 31 - - uid: 8591 + - uid: 10065 components: - type: Transform - pos: 40.5,-47.5 + rot: -1.5707963267948966 rad + pos: 24.5,26.5 parent: 31 - - uid: 8592 + - uid: 10066 components: - type: Transform - pos: 29.5,-47.5 + rot: -1.5707963267948966 rad + pos: 24.5,27.5 parent: 31 - - uid: 8593 + - uid: 10067 components: - type: Transform - pos: 31.5,-47.5 + rot: -1.5707963267948966 rad + pos: 19.5,23.5 parent: 31 - - uid: 8594 + - uid: 10068 components: - type: Transform - pos: 34.5,-47.5 + rot: -1.5707963267948966 rad + pos: 19.5,24.5 parent: 31 - - uid: 8595 + - uid: 10069 components: - type: Transform - pos: 38.5,-35.5 + rot: -1.5707963267948966 rad + pos: 23.5,24.5 parent: 31 - - uid: 8630 + - uid: 10070 components: - type: Transform - pos: -55.5,-25.5 + rot: -1.5707963267948966 rad + pos: 23.5,23.5 parent: 31 - - uid: 8631 + - uid: 10080 components: - type: Transform - pos: -55.5,-27.5 + rot: -1.5707963267948966 rad + pos: 21.5,28.5 parent: 31 - - uid: 8632 + - uid: 10100 components: - type: Transform - pos: -55.5,-29.5 + rot: 3.141592653589793 rad + pos: -4.5,34.5 parent: 31 - - uid: 8633 + - uid: 10196 components: - type: Transform - pos: -46.5,-32.5 + pos: -33.5,-14.5 parent: 31 - - uid: 8634 + - uid: 10197 components: - type: Transform - pos: -50.5,-32.5 + pos: -34.5,-15.5 parent: 31 - - uid: 8635 + - uid: 10198 components: - type: Transform - pos: -48.5,-32.5 + pos: -35.5,-15.5 parent: 31 - - uid: 8636 + - uid: 10226 components: - type: Transform - pos: -52.5,-32.5 + pos: 61.5,-15.5 parent: 31 - - uid: 8637 + - uid: 10227 components: - type: Transform - pos: -54.5,-32.5 + rot: 3.141592653589793 rad + pos: -8.5,37.5 parent: 31 - - uid: 8638 + - uid: 10372 components: - type: Transform - pos: -55.5,-31.5 + rot: -1.5707963267948966 rad + pos: -42.5,14.5 parent: 31 - - uid: 11812 + - uid: 10438 components: - type: Transform - pos: 23.5,-32.5 + pos: -39.5,18.5 parent: 31 - - uid: 11937 + - uid: 10520 components: - type: Transform - pos: 28.5,-42.5 + pos: 25.5,22.5 parent: 31 - - uid: 12121 + - uid: 10604 components: - type: Transform - pos: -36.5,45.5 + pos: 44.5,-8.5 parent: 31 - - uid: 12558 + - uid: 10712 components: - type: Transform - pos: -27.5,29.5 + pos: -44.5,7.5 parent: 31 - - uid: 12631 + - uid: 10747 components: - type: Transform - pos: -35.5,45.5 + pos: -46.5,-8.5 parent: 31 - - uid: 12632 + - uid: 10748 components: - type: Transform - pos: -34.5,45.5 + pos: -47.5,-8.5 parent: 31 - - uid: 12633 + - uid: 10749 components: - type: Transform - pos: -33.5,45.5 + pos: -48.5,-8.5 parent: 31 - - uid: 12634 + - uid: 10751 components: - type: Transform - pos: -32.5,45.5 + pos: -45.5,-8.5 parent: 31 - - uid: 12635 + - uid: 11071 components: - type: Transform - pos: -31.5,45.5 + pos: 46.5,20.5 parent: 31 - - uid: 12636 + - uid: 11077 components: - type: Transform - pos: -30.5,45.5 + pos: 45.5,13.5 parent: 31 - - uid: 12637 + - uid: 11090 components: - type: Transform - pos: -29.5,45.5 + pos: 30.5,23.5 parent: 31 - - uid: 12638 + - uid: 11145 components: - type: Transform - pos: -28.5,45.5 + rot: 1.5707963267948966 rad + pos: 69.5,11.5 parent: 31 - - uid: 12639 + - uid: 11156 components: - type: Transform - pos: -26.5,44.5 + rot: 1.5707963267948966 rad + pos: 69.5,-1.5 parent: 31 - - uid: 12640 + - uid: 11159 components: - type: Transform - pos: -26.5,43.5 + rot: 1.5707963267948966 rad + pos: 67.5,-4.5 parent: 31 - - uid: 12641 + - uid: 11161 components: - type: Transform - pos: -26.5,42.5 + rot: 1.5707963267948966 rad + pos: 77.5,6.5 parent: 31 - - uid: 12642 + - uid: 11166 components: - type: Transform - pos: -26.5,41.5 + rot: 1.5707963267948966 rad + pos: 64.5,-4.5 parent: 31 - - uid: 12643 + - uid: 11167 components: - type: Transform - pos: -26.5,40.5 + rot: 1.5707963267948966 rad + pos: 63.5,-4.5 parent: 31 - - uid: 12644 + - uid: 11168 components: - type: Transform - pos: -26.5,39.5 + rot: 3.141592653589793 rad + pos: -6.5,37.5 parent: 31 - - uid: 12645 + - uid: 11169 components: - type: Transform - pos: -26.5,38.5 + rot: 3.141592653589793 rad + pos: -5.5,37.5 parent: 31 - - uid: 12646 + - uid: 11172 components: - type: Transform - pos: -26.5,36.5 + rot: 1.5707963267948966 rad + pos: 77.5,5.5 parent: 31 - - uid: 12647 + - uid: 11176 components: - type: Transform - pos: -26.5,35.5 + rot: 1.5707963267948966 rad + pos: 68.5,-4.5 parent: 31 - - uid: 12648 + - uid: 11178 components: - type: Transform - pos: -26.5,34.5 + rot: 3.141592653589793 rad + pos: -9.5,37.5 parent: 31 - - uid: 12649 + - uid: 11190 components: - type: Transform - pos: -26.5,33.5 + rot: 1.5707963267948966 rad + pos: 70.5,11.5 parent: 31 - - uid: 12650 + - uid: 11192 components: - type: Transform - pos: -26.5,32.5 + pos: 63.5,11.5 parent: 31 - - uid: 12651 + - uid: 11193 components: - type: Transform - pos: -40.5,30.5 + pos: 64.5,11.5 parent: 31 - - uid: 12652 + - uid: 11324 components: - type: Transform - pos: -40.5,31.5 + rot: 3.141592653589793 rad + pos: -18.5,-23.5 parent: 31 - - uid: 12653 + - uid: 11326 components: - type: Transform - pos: -40.5,32.5 + rot: 3.141592653589793 rad + pos: -18.5,-20.5 parent: 31 - - uid: 12654 + - uid: 11367 components: - type: Transform - pos: -40.5,33.5 + rot: 3.141592653589793 rad + pos: -18.5,-19.5 parent: 31 - - uid: 12655 + - uid: 11408 components: - type: Transform - pos: -40.5,34.5 + rot: -1.5707963267948966 rad + pos: -43.5,-4.5 parent: 31 - - uid: 12656 + - uid: 11409 components: - type: Transform - pos: -40.5,35.5 + rot: -1.5707963267948966 rad + pos: -41.5,-2.5 parent: 31 - - uid: 12657 + - uid: 11410 components: - type: Transform - pos: -40.5,36.5 + rot: -1.5707963267948966 rad + pos: -41.5,-6.5 parent: 31 - - uid: 12658 + - uid: 11480 components: - type: Transform - pos: -40.5,38.5 + rot: -1.5707963267948966 rad + pos: 61.5,16.5 parent: 31 - - uid: 12659 + - uid: 11770 components: - type: Transform - pos: -40.5,39.5 + rot: 1.5707963267948966 rad + pos: 72.5,6.5 parent: 31 - - uid: 12660 + - uid: 11771 components: - type: Transform - pos: -40.5,40.5 + rot: 1.5707963267948966 rad + pos: 72.5,7.5 parent: 31 - - uid: 12661 + - uid: 11772 components: - type: Transform - pos: -40.5,41.5 + rot: 1.5707963267948966 rad + pos: 72.5,8.5 parent: 31 - - uid: 12662 + - uid: 11811 components: - type: Transform - pos: -40.5,42.5 + rot: 1.5707963267948966 rad + pos: 71.5,3.5 parent: 31 - - uid: 12663 + - uid: 11841 components: - type: Transform - pos: -40.5,43.5 + rot: 1.5707963267948966 rad + pos: 67.5,11.5 parent: 31 - - uid: 12664 + - uid: 11845 components: - type: Transform - pos: -27.5,35.5 + rot: 1.5707963267948966 rad + pos: 77.5,7.5 parent: 31 - - uid: 12665 + - uid: 11850 components: - type: Transform - pos: -38.5,33.5 + pos: -5.5,-13.5 parent: 31 - - uid: 12666 + - uid: 11851 components: - type: Transform - pos: -27.5,41.5 + pos: -6.5,-13.5 parent: 31 - - uid: 12667 + - uid: 11853 components: - type: Transform - pos: -27.5,41.5 + rot: -1.5707963267948966 rad + pos: 0.5,-15.5 parent: 31 - - uid: 12668 + - uid: 11910 components: - type: Transform - pos: -28.5,41.5 + rot: -1.5707963267948966 rad + pos: 80.5,5.5 parent: 31 - - uid: 12669 + - uid: 11911 components: - type: Transform - pos: -38.5,41.5 + rot: -1.5707963267948966 rad + pos: 80.5,3.5 parent: 31 - - uid: 12670 + - uid: 11912 components: - type: Transform - pos: -39.5,41.5 + rot: -1.5707963267948966 rad + pos: 80.5,4.5 parent: 31 - - uid: 12671 + - uid: 11913 components: - type: Transform - pos: -39.5,33.5 + rot: -1.5707963267948966 rad + pos: 80.5,2.5 parent: 31 - - uid: 12672 + - uid: 11914 components: - type: Transform - pos: -28.5,35.5 + rot: -1.5707963267948966 rad + pos: 80.5,1.5 parent: 31 - - uid: 12673 + - uid: 11915 components: - type: Transform - pos: -28.5,46.5 + rot: -1.5707963267948966 rad + pos: 80.5,0.5 parent: 31 - - uid: 12674 + - uid: 11916 components: - type: Transform - pos: -28.5,44.5 + rot: -1.5707963267948966 rad + pos: 79.5,0.5 parent: 31 - - uid: 12675 + - uid: 11917 components: - type: Transform - pos: -27.5,44.5 + rot: -1.5707963267948966 rad + pos: 79.5,-0.5 parent: 31 - - uid: 12676 + - uid: 11918 components: - type: Transform - pos: -25.5,44.5 + rot: -1.5707963267948966 rad + pos: 78.5,-0.5 parent: 31 - - uid: 12677 + - uid: 11919 components: - type: Transform - pos: -27.5,42.5 + rot: -1.5707963267948966 rad + pos: 78.5,-1.5 parent: 31 - - uid: 12678 + - uid: 11920 components: - type: Transform - pos: -27.5,40.5 + rot: -1.5707963267948966 rad + pos: 77.5,-1.5 parent: 31 - - uid: 12679 + - uid: 11921 components: - type: Transform - pos: -27.5,38.5 + rot: -1.5707963267948966 rad + pos: 77.5,-2.5 parent: 31 - - uid: 12680 + - uid: 11922 components: - type: Transform - pos: -25.5,38.5 + rot: -1.5707963267948966 rad + pos: 76.5,-2.5 parent: 31 - - uid: 12681 + - uid: 11923 components: - type: Transform - pos: -25.5,36.5 + rot: -1.5707963267948966 rad + pos: 76.5,-3.5 parent: 31 - - uid: 12682 + - uid: 11924 components: - type: Transform - pos: -27.5,36.5 + rot: -1.5707963267948966 rad + pos: 75.5,-3.5 parent: 31 - - uid: 12683 + - uid: 11925 components: - type: Transform - pos: -27.5,34.5 + rot: -1.5707963267948966 rad + pos: 75.5,-4.5 parent: 31 - - uid: 12684 + - uid: 11926 components: - type: Transform - pos: -27.5,32.5 + rot: -1.5707963267948966 rad + pos: 74.5,-4.5 parent: 31 - - uid: 12685 + - uid: 11927 components: - type: Transform - pos: -25.5,32.5 + rot: -1.5707963267948966 rad + pos: 74.5,-5.5 parent: 31 - - uid: 12686 + - uid: 11928 components: - type: Transform - pos: -39.5,34.5 + rot: -1.5707963267948966 rad + pos: 73.5,-5.5 parent: 31 - - uid: 12687 + - uid: 11929 components: - type: Transform - pos: -39.5,32.5 + rot: -1.5707963267948966 rad + pos: 73.5,-6.5 parent: 31 - - uid: 12688 + - uid: 11930 components: - type: Transform - pos: -39.5,36.5 + rot: -1.5707963267948966 rad + pos: 72.5,-6.5 parent: 31 - - uid: 12689 + - uid: 11931 components: - type: Transform - pos: -39.5,38.5 + rot: -1.5707963267948966 rad + pos: 72.5,-7.5 parent: 31 - - uid: 12690 + - uid: 11932 components: - type: Transform - pos: -39.5,40.5 + rot: -1.5707963267948966 rad + pos: 71.5,-7.5 parent: 31 - - uid: 12691 + - uid: 11933 components: - type: Transform - pos: -39.5,43.5 + rot: -1.5707963267948966 rad + pos: 70.5,-7.5 parent: 31 - - uid: 12692 + - uid: 11934 components: - type: Transform - pos: -41.5,43.5 + rot: -1.5707963267948966 rad + pos: 69.5,-7.5 parent: 31 - - uid: 12693 + - uid: 12029 components: - type: Transform - pos: -38.5,44.5 + pos: 68.5,-8.5 parent: 31 - - uid: 12694 + - uid: 12030 components: - type: Transform - pos: -38.5,46.5 + pos: 67.5,-8.5 parent: 31 - - uid: 12695 + - uid: 12031 components: - type: Transform - pos: -41.5,38.5 + pos: 69.5,-8.5 parent: 31 - - uid: 12696 + - uid: 12032 components: - type: Transform - pos: -41.5,36.5 + pos: 65.5,-8.5 parent: 31 - - uid: 12697 + - uid: 12033 components: - type: Transform - pos: -39.5,30.5 + pos: 66.5,-8.5 parent: 31 - - uid: 12698 + - uid: 12034 components: - type: Transform - pos: -41.5,30.5 + pos: 64.5,-8.5 parent: 31 - - uid: 12699 + - uid: 12035 components: - type: Transform - pos: -41.5,22.5 + pos: 63.5,-8.5 parent: 31 - - uid: 12700 + - uid: 12036 components: - type: Transform - pos: -41.5,20.5 + pos: 62.5,-8.5 parent: 31 - - uid: 12701 + - uid: 12296 components: - type: Transform - pos: -24.5,27.5 + pos: -45.5,11.5 parent: 31 - - uid: 12702 + - uid: 12297 components: - type: Transform - pos: -25.5,27.5 + pos: -46.5,11.5 parent: 31 - - uid: 12703 + - uid: 12298 components: - type: Transform - pos: -27.5,27.5 + pos: -47.5,11.5 parent: 31 - - uid: 12704 + - uid: 12299 components: - type: Transform - pos: -25.5,26.5 + pos: -48.5,11.5 parent: 31 - - uid: 12706 + - uid: 12300 components: - type: Transform - pos: -19.5,27.5 + pos: -49.5,11.5 parent: 31 - - uid: 12707 + - uid: 12301 components: - type: Transform - pos: -17.5,27.5 + pos: -50.5,11.5 parent: 31 - - uid: 12774 + - uid: 12302 components: - type: Transform - pos: -45.5,-32.5 + pos: -51.5,11.5 parent: 31 - - uid: 12775 + - uid: 12303 components: - type: Transform - pos: -44.5,-32.5 + pos: -52.5,11.5 parent: 31 - - uid: 12776 + - uid: 12304 components: - type: Transform - pos: -43.5,-32.5 + pos: -53.5,11.5 parent: 31 - - uid: 12777 + - uid: 12305 components: - type: Transform - pos: -42.5,-32.5 + pos: -53.5,9.5 parent: 31 - - uid: 12778 + - uid: 12306 components: - type: Transform - pos: -41.5,-32.5 + pos: -52.5,9.5 parent: 31 - - uid: 12779 + - uid: 12307 components: - type: Transform - pos: -40.5,-32.5 + pos: -51.5,9.5 parent: 31 - - uid: 12780 + - uid: 12308 components: - type: Transform - pos: -39.5,-32.5 + pos: -50.5,9.5 parent: 31 - - uid: 12781 + - uid: 12309 components: - type: Transform - pos: -38.5,-32.5 + pos: -49.5,9.5 parent: 31 - - uid: 12782 + - uid: 12310 components: - type: Transform - pos: -54.5,-24.5 + pos: -47.5,9.5 parent: 31 - - uid: 12783 + - uid: 12311 components: - type: Transform - pos: -53.5,-24.5 + pos: -48.5,9.5 parent: 31 - - uid: 12784 + - uid: 12312 components: - type: Transform - pos: -52.5,-24.5 + pos: -46.5,9.5 parent: 31 - - uid: 12785 + - uid: 12313 components: - type: Transform - pos: -51.5,-24.5 + pos: -45.5,9.5 parent: 31 - - uid: 12786 + - uid: 12314 components: - type: Transform - pos: -50.5,-24.5 + pos: -45.5,7.5 parent: 31 - - uid: 12787 + - uid: 12315 components: - type: Transform - pos: -49.5,-24.5 + pos: -46.5,7.5 parent: 31 - - uid: 12788 + - uid: 12316 components: - type: Transform - pos: -48.5,-24.5 + pos: -47.5,7.5 parent: 31 - - uid: 12789 + - uid: 12317 components: - type: Transform - pos: -47.5,-24.5 + pos: -48.5,7.5 parent: 31 - - uid: 12790 + - uid: 12318 components: - type: Transform - pos: -46.5,-24.5 + pos: -50.5,7.5 parent: 31 - - uid: 12791 + - uid: 12319 components: - type: Transform - pos: -45.5,-24.5 + pos: -49.5,7.5 parent: 31 - - uid: 12792 + - uid: 12320 components: - type: Transform - pos: -44.5,-24.5 + pos: -51.5,7.5 parent: 31 - - uid: 12793 + - uid: 12321 components: - type: Transform - pos: -43.5,-24.5 + pos: -52.5,7.5 parent: 31 - - uid: 12794 + - uid: 12322 components: - type: Transform - pos: -42.5,-24.5 + pos: -53.5,7.5 parent: 31 - - uid: 12795 + - uid: 12334 components: - type: Transform - pos: -41.5,-24.5 + rot: -1.5707963267948966 rad + pos: -45.5,3.5 parent: 31 - - uid: 12796 + - uid: 12335 components: - type: Transform - pos: -40.5,-24.5 + rot: -1.5707963267948966 rad + pos: -46.5,3.5 parent: 31 - - uid: 12797 + - uid: 12336 components: - type: Transform - pos: -39.5,-24.5 + rot: -1.5707963267948966 rad + pos: -48.5,3.5 parent: 31 - - uid: 12798 + - uid: 12337 components: - type: Transform - pos: -38.5,-24.5 + rot: -1.5707963267948966 rad + pos: -47.5,3.5 parent: 31 - - uid: 12799 + - uid: 12338 components: - type: Transform - pos: -38.5,-23.5 + rot: -1.5707963267948966 rad + pos: -49.5,3.5 parent: 31 - - uid: 12800 + - uid: 12339 components: - type: Transform - pos: -38.5,-22.5 + rot: -1.5707963267948966 rad + pos: -50.5,3.5 parent: 31 - - uid: 12802 + - uid: 12340 components: - type: Transform - pos: -36.5,-43.5 + rot: -1.5707963267948966 rad + pos: -51.5,3.5 parent: 31 - - uid: 12847 + - uid: 12341 components: - type: Transform - pos: -36.5,-34.5 + rot: -1.5707963267948966 rad + pos: -52.5,3.5 parent: 31 - - uid: 12848 + - uid: 12342 components: - type: Transform - pos: -36.5,-35.5 + rot: -1.5707963267948966 rad + pos: -53.5,3.5 parent: 31 - - uid: 12849 + - uid: 12343 components: - type: Transform - pos: -36.5,-36.5 + rot: -1.5707963267948966 rad + pos: -53.5,1.5 parent: 31 - - uid: 12850 + - uid: 12344 components: - type: Transform - pos: -36.5,-37.5 + rot: -1.5707963267948966 rad + pos: -52.5,1.5 parent: 31 - - uid: 12851 + - uid: 12345 components: - type: Transform - pos: -36.5,-38.5 + rot: -1.5707963267948966 rad + pos: -51.5,1.5 parent: 31 - - uid: 12852 + - uid: 12346 components: - type: Transform - pos: -36.5,-39.5 + rot: -1.5707963267948966 rad + pos: -50.5,1.5 parent: 31 - - uid: 12853 + - uid: 12347 components: - type: Transform - pos: -36.5,-40.5 + rot: -1.5707963267948966 rad + pos: -49.5,1.5 parent: 31 - - uid: 12854 + - uid: 12348 components: - type: Transform - pos: -36.5,-41.5 + rot: -1.5707963267948966 rad + pos: -48.5,1.5 parent: 31 - - uid: 12855 + - uid: 12349 components: - type: Transform - pos: -36.5,-42.5 + rot: -1.5707963267948966 rad + pos: -47.5,1.5 parent: 31 - - uid: 12856 + - uid: 12350 components: - type: Transform - pos: -36.5,-44.5 + rot: -1.5707963267948966 rad + pos: -46.5,1.5 parent: 31 - - uid: 12857 + - uid: 12351 components: - type: Transform - pos: -36.5,-45.5 + rot: -1.5707963267948966 rad + pos: -45.5,1.5 parent: 31 - - uid: 12858 + - uid: 12352 components: - type: Transform - pos: -36.5,-46.5 + rot: -1.5707963267948966 rad + pos: -44.5,-0.5 parent: 31 - - uid: 12859 + - uid: 12353 components: - type: Transform - pos: -36.5,-47.5 + rot: -1.5707963267948966 rad + pos: -45.5,-0.5 parent: 31 - - uid: 12860 + - uid: 12354 components: - type: Transform - pos: -35.5,-47.5 + rot: -1.5707963267948966 rad + pos: -47.5,-0.5 parent: 31 - - uid: 12861 + - uid: 12355 components: - type: Transform - pos: -34.5,-47.5 + rot: -1.5707963267948966 rad + pos: -46.5,-0.5 parent: 31 - - uid: 12862 + - uid: 12356 components: - type: Transform - pos: -33.5,-47.5 + rot: -1.5707963267948966 rad + pos: -48.5,-0.5 parent: 31 - - uid: 12863 + - uid: 12357 components: - type: Transform - pos: -32.5,-47.5 + rot: -1.5707963267948966 rad + pos: -49.5,-0.5 parent: 31 - - uid: 12864 + - uid: 12358 components: - type: Transform - pos: -31.5,-47.5 + rot: -1.5707963267948966 rad + pos: -50.5,-0.5 parent: 31 - - uid: 12865 + - uid: 12359 components: - type: Transform - pos: -30.5,-47.5 + rot: -1.5707963267948966 rad + pos: -51.5,-0.5 parent: 31 - - uid: 12866 + - uid: 12360 components: - type: Transform - pos: -29.5,-47.5 + rot: -1.5707963267948966 rad + pos: -52.5,-0.5 parent: 31 - - uid: 12867 + - uid: 12361 components: - type: Transform - pos: -28.5,-47.5 + rot: -1.5707963267948966 rad + pos: -53.5,-0.5 parent: 31 - - uid: 12868 + - uid: 12533 components: - type: Transform - pos: -28.5,-46.5 + rot: 3.141592653589793 rad + pos: 30.5,25.5 parent: 31 - - uid: 12869 + - uid: 12534 components: - type: Transform - pos: -28.5,-45.5 + rot: 3.141592653589793 rad + pos: 30.5,24.5 parent: 31 - - uid: 12870 + - uid: 12644 components: - type: Transform - pos: -28.5,-44.5 + pos: 56.5,-37.5 parent: 31 - - uid: 12871 + - uid: 12645 components: - type: Transform - pos: -28.5,-43.5 + pos: 55.5,-37.5 parent: 31 - - uid: 12872 + - uid: 12646 components: - type: Transform - pos: -28.5,-42.5 + pos: 54.5,-37.5 parent: 31 - - uid: 12873 + - uid: 12647 components: - type: Transform - pos: -28.5,-41.5 + pos: 53.5,-37.5 parent: 31 - - uid: 12874 + - uid: 12648 components: - type: Transform - pos: -28.5,-40.5 + pos: 50.5,-36.5 parent: 31 - - uid: 12875 + - uid: 12649 components: - type: Transform - pos: -28.5,-39.5 + pos: 48.5,-36.5 parent: 31 - - uid: 12876 + - uid: 12664 components: - type: Transform - pos: -37.5,-36.5 + pos: 47.5,-36.5 parent: 31 - - uid: 12877 + - uid: 12666 components: - type: Transform - pos: -28.5,-38.5 + pos: 46.5,-36.5 parent: 31 - - uid: 12878 + - uid: 12672 components: - type: Transform - pos: -28.5,-37.5 + pos: 52.5,-36.5 parent: 31 - - uid: 12879 + - uid: 12971 components: - type: Transform - pos: -28.5,-36.5 + pos: -22.5,26.5 parent: 31 - - uid: 12880 + - uid: 12972 components: - type: Transform - pos: -28.5,-35.5 + pos: -21.5,26.5 parent: 31 - - uid: 12881 + - uid: 12973 components: - type: Transform - pos: -36.5,-33.5 + pos: -20.5,26.5 parent: 31 - - uid: 12882 +- proto: GrilleBroken + entities: + - uid: 40 components: - type: Transform - pos: -37.5,-33.5 + rot: 1.5707963267948966 rad + pos: 49.5,28.5 parent: 31 - - uid: 12883 + - uid: 80 components: - type: Transform - pos: -38.5,-33.5 + rot: 1.5707963267948966 rad + pos: -40.5,20.5 parent: 31 - - uid: 12884 + - uid: 552 components: - type: Transform - pos: -38.5,-36.5 + rot: 3.141592653589793 rad + pos: -42.5,12.5 parent: 31 - - uid: 12885 + - uid: 4444 components: - type: Transform - pos: -39.5,-36.5 + rot: 3.141592653589793 rad + pos: 61.5,-8.5 parent: 31 - - uid: 12886 + - uid: 4447 components: - type: Transform - pos: -37.5,-39.5 + rot: 1.5707963267948966 rad + pos: 61.5,-13.5 parent: 31 - - uid: 12887 + - uid: 6467 components: - type: Transform - pos: -38.5,-39.5 + rot: -1.5707963267948966 rad + pos: 54.5,24.5 parent: 31 - - uid: 12888 + - uid: 6744 components: - type: Transform - pos: -39.5,-39.5 + rot: 3.141592653589793 rad + pos: 58.5,21.5 parent: 31 - - uid: 12889 + - uid: 6747 components: - type: Transform - pos: -40.5,-39.5 + rot: 1.5707963267948966 rad + pos: 54.5,24.5 parent: 31 - - uid: 12890 + - uid: 7080 components: - type: Transform - pos: -27.5,-42.5 + rot: 1.5707963267948966 rad + pos: -11.5,-42.5 parent: 31 - - uid: 12891 + - uid: 7565 components: - type: Transform - pos: -26.5,-42.5 + rot: 1.5707963267948966 rad + pos: 59.5,-18.5 parent: 31 - - uid: 12892 + - uid: 7570 components: - type: Transform - pos: -25.5,-42.5 + rot: 3.141592653589793 rad + pos: 60.5,-23.5 parent: 31 - - uid: 12893 + - uid: 7572 components: - type: Transform - pos: -24.5,-42.5 + pos: 60.5,-25.5 parent: 31 - - uid: 12894 + - uid: 7579 components: - type: Transform - pos: -27.5,-45.5 + rot: 1.5707963267948966 rad + pos: 60.5,-15.5 parent: 31 - - uid: 12895 + - uid: 7580 components: - type: Transform - pos: -27.5,-46.5 + rot: 3.141592653589793 rad + pos: 60.5,-28.5 parent: 31 - - uid: 12896 + - uid: 7650 components: - type: Transform - pos: -26.5,-45.5 + pos: 60.5,-21.5 parent: 31 - - uid: 12897 + - uid: 7676 components: - type: Transform - pos: -25.5,-45.5 + rot: 3.141592653589793 rad + pos: 61.5,-12.5 parent: 31 - - uid: 12898 + - uid: 7699 components: - type: Transform - pos: -29.5,-48.5 + rot: 3.141592653589793 rad + pos: 60.5,-21.5 parent: 31 - - uid: 12899 + - uid: 8035 components: - type: Transform - pos: -29.5,-49.5 + rot: -1.5707963267948966 rad + pos: -28.5,29.5 parent: 31 - - uid: 12900 + - uid: 8369 components: - type: Transform - pos: -31.5,-48.5 + pos: 38.5,26.5 parent: 31 - - uid: 12901 + - uid: 8396 components: - type: Transform - pos: -35.5,-48.5 + rot: -1.5707963267948966 rad + pos: 58.5,-17.5 parent: 31 - - uid: 12902 + - uid: 8397 components: - type: Transform - pos: -37.5,-46.5 + pos: 58.5,-15.5 parent: 31 - - uid: 12903 + - uid: 8398 components: - type: Transform - pos: -37.5,-44.5 + rot: 3.141592653589793 rad + pos: 58.5,-13.5 parent: 31 - - uid: 12904 + - uid: 8748 components: - type: Transform - pos: -38.5,-44.5 + rot: -1.5707963267948966 rad + pos: 40.5,26.5 parent: 31 - - uid: 12938 + - uid: 8749 components: - type: Transform - pos: -36.5,30.5 + rot: -1.5707963267948966 rad + pos: 46.5,26.5 parent: 31 - - uid: 12939 + - uid: 8943 components: - type: Transform - pos: -37.5,29.5 + rot: 3.141592653589793 rad + pos: 55.5,25.5 parent: 31 - - uid: 12940 + - uid: 9674 components: - type: Transform - pos: -36.5,29.5 + pos: 14.5,-33.5 parent: 31 - - uid: 12941 + - uid: 9819 components: - type: Transform - pos: -35.5,29.5 + rot: -1.5707963267948966 rad + pos: 13.5,-45.5 parent: 31 - - uid: 12942 + - uid: 9844 components: - type: Transform - pos: -36.5,28.5 + rot: -1.5707963267948966 rad + pos: 1.5,-47.5 parent: 31 - - uid: 12943 + - uid: 9845 components: - type: Transform - pos: -35.5,28.5 + pos: 4.5,-46.5 parent: 31 - - uid: 12944 + - uid: 9846 components: - type: Transform - pos: -35.5,27.5 + rot: 3.141592653589793 rad + pos: 4.5,-46.5 parent: 31 - - uid: 12945 + - uid: 9848 components: - type: Transform - pos: -30.5,29.5 + pos: 11.5,-44.5 parent: 31 - - uid: 12946 + - uid: 9850 components: - type: Transform - pos: -31.5,29.5 + rot: 1.5707963267948966 rad + pos: 10.5,-45.5 parent: 31 - - uid: 12947 + - uid: 9851 components: - type: Transform - pos: -31.5,28.5 + rot: -1.5707963267948966 rad + pos: 9.5,-45.5 parent: 31 - - uid: 12948 + - uid: 9852 components: - type: Transform - pos: -30.5,28.5 + rot: 3.141592653589793 rad + pos: 14.5,-37.5 parent: 31 - - uid: 12949 + - uid: 9853 components: - type: Transform - pos: -30.5,30.5 + rot: 3.141592653589793 rad + pos: 13.5,-34.5 parent: 31 - - uid: 12950 + - uid: 9854 components: - type: Transform - pos: -29.5,29.5 + rot: 3.141592653589793 rad + pos: -1.5,-46.5 parent: 31 - - uid: 12951 + - uid: 9855 components: - type: Transform - pos: -31.5,27.5 + rot: 1.5707963267948966 rad + pos: -1.5,-47.5 parent: 31 - - uid: 12952 + - uid: 9856 components: - type: Transform - pos: -35.5,25.5 + rot: -1.5707963267948966 rad + pos: 6.5,-47.5 parent: 31 - - uid: 12953 + - uid: 9859 components: - type: Transform - pos: -35.5,24.5 + rot: -1.5707963267948966 rad + pos: -20.5,-39.5 parent: 31 - - uid: 12954 + - uid: 9860 components: - type: Transform - pos: -36.5,24.5 + pos: -22.5,-36.5 parent: 31 - - uid: 12955 + - uid: 9871 components: - type: Transform - pos: -37.5,23.5 + rot: 3.141592653589793 rad + pos: -22.5,-36.5 parent: 31 - - uid: 12956 + - uid: 9874 components: - type: Transform - pos: -36.5,23.5 + rot: 1.5707963267948966 rad + pos: -18.5,-39.5 parent: 31 - - uid: 12957 + - uid: 9879 components: - type: Transform - pos: -35.5,23.5 + rot: 1.5707963267948966 rad + pos: -21.5,-36.5 parent: 31 - - uid: 12958 + - uid: 10144 components: - type: Transform - pos: -35.5,22.5 + rot: -1.5707963267948966 rad + pos: -6.5,-42.5 parent: 31 - - uid: 12959 + - uid: 10225 components: - type: Transform - pos: -36.5,22.5 + rot: 1.5707963267948966 rad + pos: 60.5,-10.5 parent: 31 - - uid: 12960 + - uid: 10228 components: - type: Transform - pos: -31.5,25.5 + rot: -1.5707963267948966 rad + pos: 61.5,-13.5 parent: 31 - - uid: 12961 + - uid: 10467 components: - type: Transform - pos: -30.5,25.5 + rot: 1.5707963267948966 rad + pos: -6.5,-42.5 parent: 31 - - uid: 12962 + - uid: 10512 components: - type: Transform - pos: -29.5,25.5 + rot: 1.5707963267948966 rad + pos: 58.5,20.5 parent: 31 - - uid: 12963 + - uid: 10605 components: - type: Transform - pos: -33.5,22.5 + rot: 3.141592653589793 rad + pos: 44.5,-9.5 parent: 31 - - uid: 12964 + - uid: 11150 components: - type: Transform - pos: -33.5,21.5 + rot: -1.5707963267948966 rad + pos: 47.5,28.5 parent: 31 - - uid: 12965 + - uid: 12532 components: - type: Transform - pos: -32.5,22.5 + rot: 3.141592653589793 rad + pos: 30.5,26.5 parent: 31 - - uid: 12966 + - uid: 12641 components: - type: Transform - pos: -32.5,21.5 + rot: 1.5707963267948966 rad + pos: 52.5,-37.5 parent: 31 - - uid: 12967 + - uid: 12667 components: - type: Transform - pos: -31.5,21.5 + rot: -1.5707963267948966 rad + pos: 51.5,-36.5 parent: 31 - - uid: 12968 + - uid: 12668 components: - type: Transform - pos: -30.5,21.5 + rot: 1.5707963267948966 rad + pos: 45.5,-36.5 parent: 31 - - uid: 12969 +- proto: GrilleDiagonal + entities: + - uid: 4098 components: - type: Transform - pos: -31.5,22.5 + rot: -1.5707963267948966 rad + pos: 5.5,36.5 parent: 31 - - uid: 12970 + - uid: 8753 components: - type: Transform - pos: -32.5,23.5 + pos: -1.5,36.5 parent: 31 - proto: GunSafeLaserCarbine entities: @@ -55456,13 +54935,6 @@ entities: - type: Transform pos: -14.5,21.5 parent: 31 -- proto: Handcuffs - entities: - - uid: 8802 - components: - - type: Transform - pos: 9.513287,30.488989 - parent: 31 - proto: HandheldGPSBasic entities: - uid: 3890 @@ -55509,11 +54981,6 @@ entities: - type: Transform pos: 22.522892,12.524126 parent: 31 - - uid: 2854 - components: - - type: Transform - pos: -23.390205,-5.6188893 - parent: 31 - uid: 7126 components: - type: Transform @@ -55524,11 +54991,6 @@ entities: - type: Transform pos: 8.041532,18.530302 parent: 31 - - uid: 10139 - components: - - type: Transform - pos: -2.5260825,30.718403 - parent: 31 - proto: HarmonicaInstrument entities: - uid: 7248 @@ -55536,43 +54998,74 @@ entities: - type: Transform pos: -18.398912,10.183618 parent: 31 +- proto: HeadBorgMedical + entities: + - uid: 8243 + components: + - type: Transform + pos: 50.338017,-30.219852 + parent: 31 +- proto: HeadBorgMining + entities: + - uid: 4385 + components: + - type: Transform + pos: 50.681767,-30.219852 + parent: 31 +- proto: HeadBorgService + entities: + - uid: 4386 + components: + - type: Transform + pos: 50.515102,-30.490873 + parent: 31 - proto: HeatExchanger entities: - - uid: 3508 + - uid: 275 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,13.5 + pos: 49.5,24.5 parent: 31 - - uid: 3675 + - uid: 877 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,11.5 + rot: 3.141592653589793 rad + pos: 48.5,22.5 parent: 31 - - uid: 3888 + - uid: 1015 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 48.5,11.5 + rot: 3.141592653589793 rad + pos: 50.5,23.5 parent: 31 - - uid: 4275 + - uid: 1025 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,11.5 + rot: 3.141592653589793 rad + pos: 50.5,22.5 parent: 31 - - uid: 4289 + - uid: 1032 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,13.5 + rot: 3.141592653589793 rad + pos: 48.5,23.5 parent: 31 - - uid: 4292 + - uid: 1186 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,13.5 + pos: 50.5,24.5 + parent: 31 + - uid: 1228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,22.5 + parent: 31 + - uid: 1265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,23.5 parent: 31 - uid: 4348 components: @@ -55586,24 +55079,14 @@ entities: rot: -1.5707963267948966 rad pos: 67.5,2.5 parent: 31 + - type: AtmosPipeColor + color: '#A01E16FF' - uid: 4358 components: - type: Transform rot: 1.5707963267948966 rad pos: 64.5,8.5 parent: 31 - - uid: 4469 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 50.5,12.5 - parent: 31 - - uid: 4470 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,13.5 - parent: 31 - uid: 4850 components: - type: Transform @@ -55611,7 +55094,7 @@ entities: pos: 68.5,2.5 parent: 31 - type: AtmosPipeColor - color: '#990000FF' + color: '#A01E16FF' - uid: 6740 components: - type: Transform @@ -55632,11 +55115,10 @@ entities: rot: 1.5707963267948966 rad pos: 67.5,8.5 parent: 31 - - uid: 11047 + - uid: 7689 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 49.5,11.5 + pos: 48.5,24.5 parent: 31 - uid: 11785 components: @@ -55749,11 +55231,6 @@ entities: parent: 31 - proto: HydroponicsToolClippers entities: - - uid: 1138 - components: - - type: Transform - pos: -20.498135,-2.4408062 - parent: 31 - uid: 7744 components: - type: Transform @@ -55766,18 +55243,8 @@ entities: - type: Transform pos: 17.345112,-20.624432 parent: 31 - - uid: 1142 - components: - - type: Transform - pos: -19.529385,-2.4251812 - parent: 31 - proto: HydroponicsToolMiniHoe entities: - - uid: 1055 - components: - - type: Transform - pos: -20.498135,-2.3626812 - parent: 31 - uid: 5633 components: - type: Transform @@ -55788,20 +55255,8 @@ entities: - type: Transform pos: -4.4002256,-42.332767 parent: 31 -- proto: HydroponicsToolScythe - entities: - - uid: 4130 - components: - - type: Transform - pos: -19.498135,-2.3783062 - parent: 31 - proto: HydroponicsToolSpade entities: - - uid: 4131 - components: - - type: Transform - pos: -20.529385,-2.3470562 - parent: 31 - uid: 8850 components: - type: Transform @@ -55814,62 +55269,65 @@ entities: parent: 31 - proto: hydroponicsTray entities: - - uid: 775 - components: - - type: Transform - pos: -17.5,0.5 - parent: 31 - - uid: 807 + - uid: 2766 components: - type: Transform - pos: -18.5,-1.5 + rot: -1.5707963267948966 rad + pos: -19.5,8.5 parent: 31 - - uid: 2147 + - uid: 2909 components: - type: Transform - pos: -19.5,-1.5 + rot: -1.5707963267948966 rad + pos: -18.5,8.5 parent: 31 - - uid: 2148 + - uid: 10356 components: - type: Transform - pos: -17.5,-0.5 + rot: 3.141592653589793 rad + pos: -22.5,1.5 parent: 31 - - uid: 2457 + - uid: 10359 components: - type: Transform - pos: -19.5,0.5 + rot: 3.141592653589793 rad + pos: -22.5,-2.5 parent: 31 - - uid: 2766 + - uid: 10360 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,8.5 + rot: 3.141592653589793 rad + pos: -20.5,-2.5 parent: 31 - - uid: 2909 + - uid: 10369 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,8.5 + rot: 3.141592653589793 rad + pos: -20.5,1.5 parent: 31 - - uid: 2979 + - uid: 10370 components: - type: Transform - pos: -17.5,-1.5 + rot: 3.141592653589793 rad + pos: -20.5,-1.5 parent: 31 - - uid: 3553 + - uid: 10385 components: - type: Transform - pos: -19.5,-0.5 + rot: 3.141592653589793 rad + pos: -22.5,-1.5 parent: 31 - - uid: 3914 + - uid: 10386 components: - type: Transform - pos: -18.5,0.5 + rot: 3.141592653589793 rad + pos: -22.5,0.5 parent: 31 - - uid: 3917 + - uid: 10387 components: - type: Transform - pos: -18.5,-0.5 + rot: 3.141592653589793 rad + pos: -20.5,0.5 parent: 31 - proto: HydroponicsTrayMachineCircuitboard entities: @@ -55890,6 +55348,11 @@ entities: - 11052 - proto: InflatableDoorStack entities: + - uid: 2457 + components: + - type: Transform + pos: -35.48331,-23.570734 + parent: 31 - uid: 3907 components: - type: Transform @@ -55897,6 +55360,11 @@ entities: parent: 31 - proto: InflatableWallStack entities: + - uid: 2979 + components: + - type: Transform + pos: -35.495815,-23.283033 + parent: 31 - uid: 3679 components: - type: Transform @@ -55909,6 +55377,18 @@ entities: - type: Transform pos: -0.9189515,16.662592 parent: 31 +- proto: IngotGold1 + entities: + - uid: 11824 + components: + - type: Transform + pos: -17.388897,-5.447556 + parent: 31 + - uid: 11833 + components: + - type: Transform + pos: -17.669382,-5.7498493 + parent: 31 - proto: IngotSilver entities: - uid: 4144 @@ -55921,6 +55401,11 @@ entities: linearDamping: 0 - proto: IntercomAll entities: + - uid: 7039 + components: + - type: Transform + pos: 49.5,-23.5 + parent: 31 - uid: 9903 components: - type: Transform @@ -55935,12 +55420,6 @@ entities: parent: 31 - proto: IntercomCommon entities: - - uid: 9905 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-3.5 - parent: 31 - uid: 9906 components: - type: Transform @@ -56009,12 +55488,6 @@ entities: rot: 3.141592653589793 rad pos: 40.5,10.5 parent: 31 - - uid: 9899 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,10.5 - parent: 31 - uid: 9900 components: - type: Transform @@ -56097,20 +55570,21 @@ entities: parent: 31 - proto: IntercomSecurity entities: - - uid: 2088 + - uid: 7827 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,11.5 + pos: -6.5,6.5 parent: 31 - - uid: 7827 + - uid: 8100 components: - type: Transform - pos: -6.5,6.5 + rot: 3.141592653589793 rad + pos: -10.5,9.5 parent: 31 - uid: 8908 components: - type: Transform + anchored: False pos: -15.5,15.5 parent: 31 - proto: IntercomService @@ -56171,11 +55645,11 @@ entities: parent: 31 - proto: JanitorialTrolley entities: - - uid: 2291 + - uid: 8283 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,-11.5 + rot: 1.5707963267948966 rad + pos: -21.5,-7.5 parent: 31 - proto: JetpackBlueFilled entities: @@ -56224,6 +55698,13 @@ entities: - type: Transform pos: -12.5,-0.5 parent: 31 +- proto: KitchenElectricGrill + entities: + - uid: 11828 + components: + - type: Transform + pos: -12.5,1.5 + parent: 31 - proto: KitchenMicrowave entities: - uid: 893 @@ -56258,6 +55739,11 @@ entities: - type: Transform pos: -16.5,11.5 parent: 31 + - uid: 10725 + components: + - type: Transform + pos: -16.5,-1.5 + parent: 31 - uid: 11703 components: - type: Transform @@ -56309,11 +55795,29 @@ entities: - type: Transform pos: 28.30586,10.796111 parent: 31 - - uid: 4095 + - uid: 2469 components: - type: Transform - pos: -30.466906,-1.5231686 + pos: -6.0362816,36.832863 parent: 31 + - type: HandheldLight + toggleActionEntity: 2470 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 2470 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: True + - type: ActionsContainer - uid: 4925 components: - type: Transform @@ -56349,6 +55853,14 @@ entities: - type: Transform pos: 14.479344,-6.1264844 parent: 31 +- proto: LampBanana + entities: + - uid: 6987 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.574013,-9.851585 + parent: 31 - proto: LampGold entities: - uid: 1422 @@ -56357,21 +55869,34 @@ entities: rot: -1.5707963267948966 rad pos: 7.852048,19.178608 parent: 31 - - uid: 4092 - components: - - type: Transform - pos: -30.54503,-5.3981686 - parent: 31 - uid: 4178 components: - type: Transform pos: 0.41178536,-5.2814264 parent: 31 - - uid: 7149 + - uid: 7042 components: - type: Transform - pos: 6.5934343,24.65432 + pos: 7.4295483,24.92614 parent: 31 + - type: HandheldLight + toggleActionEntity: 7058 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 7058 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: True + - type: ActionsContainer - uid: 7319 components: - type: Transform @@ -56382,11 +55907,6 @@ entities: - type: Transform pos: 8.54651,-28.293444 parent: 31 - - uid: 8725 - components: - - type: Transform - pos: -36.511345,-29.258835 - parent: 31 - uid: 11694 components: - type: Transform @@ -56407,6 +55927,11 @@ entities: parent: 31 - proto: LargeBeaker entities: + - uid: 4667 + components: + - type: Transform + pos: -16.216745,-1.5088191 + parent: 31 - uid: 5074 components: - type: Transform @@ -56424,13 +55949,6 @@ entities: - type: Transform pos: 5.3452716,-33.460297 parent: 31 -- proto: LidSalami - entities: - - uid: 10821 - components: - - type: Transform - pos: -2.4760625,33.567844 - parent: 31 - proto: Lighter entities: - uid: 3506 @@ -56490,16 +56008,6 @@ entities: parent: 31 - proto: LiquidOxygenCanister entities: - - uid: 4232 - components: - - type: Transform - anchored: True - pos: 36.5,23.5 - parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 - bodyType: Static - uid: 11888 components: - type: Transform @@ -56539,6 +56047,25 @@ entities: - Pressed: Toggle 6348: - Pressed: Toggle +- proto: LockableButtonCommand + entities: + - uid: 6124 + components: + - type: Transform + pos: -1.5,30.5 + parent: 31 + - type: DeviceLinkSource + linkedPorts: + 6090: + - Pressed: Toggle + 6091: + - Pressed: Toggle + 6121: + - Pressed: Toggle + 6122: + - Pressed: Toggle + 6123: + - Pressed: Toggle - proto: LockableButtonEngineering entities: - uid: 9957 @@ -56550,8 +56077,6 @@ entities: parent: 31 - type: DeviceLinkSource linkedPorts: - 11905: - - Pressed: Toggle 11904: - Pressed: Toggle 11898: @@ -56584,30 +56109,19 @@ entities: - Pressed: Toggle 7225: - Pressed: Toggle - - uid: 11939 +- proto: LockableButtonService + entities: + - uid: 8715 components: - - type: MetaData - name: blast doors button - type: Transform - pos: 59.5,5.5 + rot: -1.5707963267948966 rad + pos: -23.5,-4.5 parent: 31 - type: DeviceLinkSource linkedPorts: - 7308: + 3791: - Pressed: Toggle - 3140: - - Pressed: Toggle - 7297: - - Pressed: Toggle - 11935: - - Pressed: Toggle - 11936: - - Pressed: Toggle - 8199: - - Pressed: Toggle - 11938: - - Pressed: Toggle - 11027: + 3399: - Pressed: Toggle - proto: LockerAtmosphericsFilledHardsuit entities: @@ -56623,24 +56137,22 @@ entities: parent: 31 - proto: LockerBoozeFilled entities: - - uid: 584 + - uid: 8731 components: - type: Transform - pos: -11.5,-6.5 + pos: -12.5,-6.5 parent: 31 - proto: LockerBotanistFilled entities: - - uid: 782 + - uid: 3137 components: - type: Transform - pos: -17.5,1.5 + pos: -19.5,-2.5 parent: 31 -- proto: LockerBrigmedicFilledHardsuit - entities: - - uid: 6580 + - uid: 11485 components: - type: Transform - pos: -0.5,14.5 + pos: -19.5,1.5 parent: 31 - proto: LockerCaptainFilled entities: @@ -56677,11 +56189,6 @@ entities: - type: Transform pos: -11.5,-39.5 parent: 31 - - uid: 11058 - components: - - type: Transform - pos: -22.5,17.5 - parent: 31 - proto: LockerElectricalSuppliesFilled entities: - uid: 3114 @@ -56706,6 +56213,11 @@ entities: - type: Transform pos: 35.5,-2.5 parent: 31 + - uid: 1669 + components: + - type: Transform + pos: -36.5,-26.5 + parent: 31 - uid: 3369 components: - type: Transform @@ -56758,35 +56270,6 @@ entities: - type: Transform pos: -9.5,22.5 parent: 31 -- proto: LockerMedicalFilled - entities: - - uid: 802 - components: - - type: Transform - pos: 23.5,-7.5 - parent: 31 - - uid: 1149 - components: - - type: Transform - pos: 22.5,-7.5 - parent: 31 - - uid: 1151 - components: - - type: Transform - pos: 21.5,-7.5 - parent: 31 -- proto: LockerMedicineFilled - entities: - - uid: 4336 - components: - - type: Transform - pos: 15.5,-11.5 - parent: 31 - - uid: 7247 - components: - - type: Transform - pos: 12.5,-10.5 - parent: 31 - proto: LockerParamedicFilled entities: - uid: 7489 @@ -56844,11 +56327,6 @@ entities: parent: 31 - proto: LockerSecurityFilled entities: - - uid: 803 - components: - - type: Transform - pos: -12.5,13.5 - parent: 31 - uid: 804 components: - type: Transform @@ -56913,6 +56391,25 @@ entities: - type: Physics canCollide: False bodyType: Static +- proto: LunchboxGeneric + entities: + - uid: 10036 + components: + - type: Transform + pos: -30.684525,-9.548513 + parent: 31 + - uid: 12679 + components: + - type: Transform + pos: -30.496725,-29.480463 + parent: 31 +- proto: LunchboxGenericFilledRandom + entities: + - uid: 2908 + components: + - type: Transform + pos: -30.366293,-5.307212 + parent: 31 - proto: MachineAnomalyGenerator entities: - uid: 6098 @@ -56972,25 +56469,8 @@ entities: - type: Transform pos: -3.5,-43.5 parent: 31 -- proto: MagazinePistolSubMachineGunTopMounted - entities: - - uid: 10123 - components: - - type: Transform - pos: -8.471462,20.3102 - parent: 31 - - uid: 10124 - components: - - type: Transform - pos: -8.471462,20.4352 - parent: 31 - proto: MaintenanceFluffSpawner entities: - - uid: 113 - components: - - type: Transform - pos: -29.5,-5.5 - parent: 31 - uid: 4504 components: - type: Transform @@ -57001,11 +56481,6 @@ entities: - type: Transform pos: 45.5,-2.5 parent: 31 - - uid: 5714 - components: - - type: Transform - pos: -3.5,-12.5 - parent: 31 - uid: 7949 components: - type: Transform @@ -57016,16 +56491,6 @@ entities: - type: Transform pos: -4.5,-39.5 parent: 31 - - uid: 11127 - components: - - type: Transform - pos: -7.5,29.5 - parent: 31 - - uid: 11128 - components: - - type: Transform - pos: -6.5,29.5 - parent: 31 - proto: MaintenancePlantSpawner entities: - uid: 982 @@ -57043,10 +56508,10 @@ entities: - type: Transform pos: -0.5,21.5 parent: 31 - - uid: 7453 + - uid: 1408 components: - type: Transform - pos: -5.5,-12.5 + pos: -20.5,16.5 parent: 31 - uid: 9755 components: @@ -57065,6 +56530,11 @@ entities: parent: 31 - proto: MaintenanceToolSpawner entities: + - uid: 2454 + components: + - type: Transform + pos: -36.5,-23.5 + parent: 31 - uid: 3739 components: - type: Transform @@ -57080,6 +56550,12 @@ entities: - type: Transform pos: 38.5,-3.5 parent: 31 + - uid: 8235 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-11.5 + parent: 31 - uid: 8558 components: - type: Transform @@ -57115,17 +56591,18 @@ entities: - type: Transform pos: 15.5,16.5 parent: 31 - - uid: 11125 - components: - - type: Transform - pos: -5.5,29.5 - parent: 31 - uid: 11230 components: - type: Transform rot: -1.5707963267948966 rad pos: -27.5,-14.5 parent: 31 + - uid: 12084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-18.5 + parent: 31 - proto: MaintenanceWeaponSpawner entities: - uid: 3306 @@ -57134,11 +56611,6 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-2.5 parent: 31 - - uid: 4924 - components: - - type: Transform - pos: -29.5,-4.5 - parent: 31 - uid: 7866 components: - type: Transform @@ -57149,11 +56621,6 @@ entities: - type: Transform pos: 7.5,-41.5 parent: 31 - - uid: 11126 - components: - - type: Transform - pos: -7.5,28.5 - parent: 31 - proto: MaterialBiomass entities: - uid: 11682 @@ -57302,10 +56769,10 @@ entities: parent: 31 - proto: MedkitFilled entities: - - uid: 1040 + - uid: 2601 components: - type: Transform - pos: -0.4864614,32.561848 + pos: -0.3825792,35.550694 parent: 31 - uid: 8490 components: @@ -57350,27 +56817,34 @@ entities: - type: Transform pos: 10.5,-17.5 parent: 31 -- proto: MinimoogInstrument +- proto: MicrophoneInstrument entities: - - uid: 8736 + - uid: 12062 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,-28.5 + rot: -1.5707963267948966 rad + pos: -14.793948,-11.52346 + parent: 31 +- proto: Mirror + entities: + - uid: 4632 + components: + - type: Transform + pos: -6.5,-10.5 parent: 31 - proto: MonkeyCubeWrapped entities: - - uid: 8871 + - uid: 11842 components: - type: Transform - pos: -9.196694,-7.814363 + pos: -9.195737,-7.547551 parent: 31 - proto: MopBucket entities: - - uid: 2301 + - uid: 8216 components: - type: Transform - pos: -19.682484,-11.924354 + pos: -20.744839,-7.557439 parent: 31 - uid: 10216 components: @@ -57379,10 +56853,10 @@ entities: parent: 31 - proto: MopItem entities: - - uid: 2708 + - uid: 10177 components: - type: Transform - pos: -18.42709,-10.56736 + pos: -20.784925,-4.3508377 parent: 31 - uid: 10217 components: @@ -57396,12 +56870,6 @@ entities: - type: Transform pos: 14.5,-13.5 parent: 31 - - uid: 699 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-17.5 - parent: 31 - uid: 2172 components: - type: Transform @@ -57424,20 +56892,8 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-17.5 parent: 31 -- proto: MouseTimedSpawner - entities: - - uid: 1641 - components: - - type: Transform - pos: -12.5,-12.5 - parent: 31 - proto: Multitool entities: - - uid: 1038 - components: - - type: Transform - pos: 5.4978743,31.63788 - parent: 31 - uid: 11282 components: - type: Transform @@ -57501,6 +56957,11 @@ entities: parent: 31 - proto: NitrogenTankFilled entities: + - uid: 8561 + components: + - type: Transform + pos: -23.321144,22.409895 + parent: 31 - uid: 10652 components: - type: Transform @@ -57547,13 +57008,6 @@ entities: - type: Transform pos: -1.5,18.5 parent: 31 -- proto: NuclearBombKeg - entities: - - uid: 9842 - components: - - type: Transform - pos: -13.5,-11.5 - parent: 31 - proto: OilJarCorn entities: - uid: 12202 @@ -57645,6 +57099,16 @@ entities: - type: Transform pos: 35.5,10.5 parent: 31 + - uid: 2458 + components: + - type: Transform + anchored: True + pos: 36.5,23.5 + parent: 31 + - type: Physics + angularDamping: 0 + linearDamping: 0 + bodyType: Static - uid: 3576 components: - type: Transform @@ -57687,16 +57151,6 @@ entities: - type: Transform pos: -23.521854,22.535301 parent: 31 - - uid: 8740 - components: - - type: Transform - pos: -32.388412,-27.529545 - parent: 31 - - uid: 8741 - components: - - type: Transform - pos: -32.638412,-27.48267 - parent: 31 - proto: PackPaperRolling entities: - uid: 11702 @@ -57718,12 +57172,13 @@ entities: - type: Transform pos: -4.5,-7.5 parent: 31 -- proto: PaintingMoony +- proto: PaintingSadClown entities: - - uid: 8370 + - uid: 10388 components: - type: Transform - pos: 22.5,-8.5 + rot: 1.5707963267948966 rad + pos: -13.5,-9.5 parent: 31 - proto: PaintingTheGreatWave entities: @@ -57746,21 +57201,14 @@ entities: - type: Transform pos: -1.344388,25.58412 parent: 31 - - uid: 1071 - components: - - type: Transform - pos: -24.037928,-5.9436545 - parent: 31 - - uid: 1132 - components: - - type: Transform - pos: -24.147303,-5.8967795 - parent: 31 - - uid: 2356 + - uid: 2501 components: - type: Transform - pos: -24.256678,-5.7405295 - parent: 31 + parent: 2495 + - type: Physics + angularDamping: 0 + linearDamping: 0 + canCollide: False - uid: 6694 components: - type: Transform @@ -57775,11 +57223,6 @@ entities: - type: Physics angularDamping: 0 linearDamping: 0 - - uid: 7230 - components: - - type: Transform - pos: -19.27266,-5.542589 - parent: 31 - uid: 7318 components: - type: Transform @@ -57800,25 +57243,40 @@ entities: - type: Transform pos: 11.761125,-31.361996 parent: 31 - - uid: 8743 + - uid: 8393 components: - type: Transform - parent: 8742 - - type: Paper - content: > - Weh. - - type: Physics - canCollide: False + rot: -1.5707963267948966 rad + pos: -5.5279813,15.344591 + parent: 31 + - uid: 8685 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.628653,15.626471 + parent: 31 + - uid: 8955 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.4955661,10.757132 + parent: 31 - uid: 9738 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.392193,-41.961483 parent: 31 + - uid: 11714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.3747604,10.877937 + parent: 31 - uid: 12253 components: - type: Transform - pos: 59.767834,2.5585926 + pos: 59.60517,3.029881 parent: 31 - type: Paper stampState: paper_stamp-centcom @@ -57864,11 +57322,6 @@ entities: rot: 1.5707963267948966 rad pos: 7.6286554,1.6747794 parent: 31 - - uid: 2221 - components: - - type: Transform - pos: -19.27266,-5.365598 - parent: 31 - uid: 4533 components: - type: Transform @@ -57885,11 +57338,6 @@ entities: - type: Transform pos: 7.5388665,-3.406831 parent: 31 - - uid: 7229 - components: - - type: Transform - pos: -19.27266,-5.483592 - parent: 31 - uid: 9148 components: - type: Transform @@ -57906,13 +57354,6 @@ entities: - type: Transform pos: 14.251285,12.542005 parent: 31 -- proto: ParchisBoard - entities: - - uid: 2501 - components: - - type: Transform - pos: -23.526257,-2.4008582 - parent: 31 - proto: PartRodMetal entities: - uid: 1300 @@ -57921,6 +57362,12 @@ entities: rot: 3.141592653589793 rad pos: 50.50942,4.811885 parent: 31 + - uid: 3798 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -36.57201,-24.009228 + parent: 31 - uid: 6364 components: - type: Transform @@ -57929,6 +57376,12 @@ entities: parent: 31 - proto: PartRodMetal1 entities: + - uid: 271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.399883,19.1777 + parent: 31 - uid: 9682 components: - type: Transform @@ -57940,46 +57393,51 @@ entities: - type: Transform pos: 44.987167,-9.130011 parent: 31 -- proto: PartRodMetal10 - entities: - - uid: 9714 + - uid: 11125 components: - type: Transform rot: 3.141592653589793 rad - pos: 11.569283,-41.135525 + pos: -21.102043,16.27145 parent: 31 -- proto: Pen - entities: - - uid: 863 + - uid: 13048 components: - type: Transform rot: -1.5707963267948966 rad - pos: -16.707977,-25.58053 + pos: 39.617805,13.958574 parent: 31 - - uid: 2031 + - uid: 13049 components: - type: Transform - pos: -24.647303,-6.4436545 + rot: 3.141592653589793 rad + pos: 43.151688,16.364824 parent: 31 - - uid: 2032 + - uid: 13050 components: - type: Transform - pos: -23.350428,-5.2092795 + rot: 1.5707963267948966 rad + pos: 49.02943,16.333574 parent: 31 - - uid: 2355 + - uid: 13051 components: - type: Transform - pos: -23.709803,-6.4905295 + rot: 1.5707963267948966 rad + pos: 32.104553,12.521074 parent: 31 - - uid: 8744 +- proto: PartRodMetal10 + entities: + - uid: 9714 components: - type: Transform - pos: -35.660393,-24.67745 + rot: 3.141592653589793 rad + pos: 11.569283,-41.135525 parent: 31 - - uid: 8840 +- proto: Pen + entities: + - uid: 863 components: - type: Transform - pos: 7.355826,32.45485 + rot: -1.5707963267948966 rad + pos: -16.707977,-25.58053 parent: 31 - uid: 8867 components: @@ -57996,22 +57454,19 @@ entities: - type: Transform pos: 22.626728,-10.546311 parent: 31 -- proto: PersonalAI - entities: - - uid: 979 - components: - - type: Transform - pos: 2.5129576,32.47221 - parent: 31 - - uid: 2780 + - uid: 11720 components: - type: Transform - pos: -24.675209,-5.91818 + rot: 1.5707963267948966 rad + pos: -3.7170417,10.978607 parent: 31 - - uid: 7898 +- proto: PersonalAI + entities: + - uid: 8690 components: - type: Transform - pos: 7.5388803,-23.388987 + rot: -1.5707963267948966 rad + pos: 7.3941746,-29.957026 parent: 31 - proto: PhoneInstrument entities: @@ -58028,6 +57483,12 @@ entities: rot: 3.141592653589793 rad pos: -4.5,1.5 parent: 31 + - uid: 11548 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,-9.5 + parent: 31 - uid: 11620 components: - type: Transform @@ -58121,74 +57582,6 @@ entities: angularDamping: 0 linearDamping: 0 bodyType: Static -- proto: PlasmaReinforcedWindowDirectional - entities: - - uid: 12044 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 60.5,0.5 - parent: 31 - - uid: 12076 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,1.5 - parent: 31 - - uid: 12078 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,0.5 - parent: 31 - - uid: 12079 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,2.5 - parent: 31 - - uid: 12080 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,3.5 - parent: 31 - - uid: 12081 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,4.5 - parent: 31 - - uid: 12084 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,4.5 - parent: 31 - - uid: 12085 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,3.5 - parent: 31 - - uid: 12086 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,2.5 - parent: 31 - - uid: 12087 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,1.5 - parent: 31 - - uid: 12088 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,0.5 - parent: 31 - proto: PlasmaTankFilled entities: - uid: 12056 @@ -58201,14 +57594,6 @@ entities: - type: Transform pos: 57.572613,4.401287 parent: 31 -- proto: PlasmaWindoorSecureEngineeringLocked - entities: - - uid: 12043 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,0.5 - parent: 31 - proto: PlasticFlapsAirtightClear entities: - uid: 547 @@ -58250,20 +57635,15 @@ entities: parent: 31 - proto: PlushieLizard entities: - - uid: 1125 - components: - - type: Transform - pos: -31.457468,18.461973 - parent: 31 - - uid: 8715 + - uid: 1058 components: - type: Transform - pos: -34.491947,-24.517502 + pos: -36.50589,-29.473022 parent: 31 - - uid: 8737 + - uid: 1125 components: - type: Transform - pos: -32.58532,-31.483488 + pos: -31.457468,18.461973 parent: 31 - uid: 10650 components: @@ -58275,24 +57655,12 @@ entities: - type: Transform pos: 6.8823633,-3.4168224 parent: 31 -- proto: PlushieNar - entities: - - uid: 11111 - components: - - type: Transform - pos: -41.4551,17.484098 - parent: 31 - proto: PlushieSpaceLizard entities: - - uid: 7422 - components: - - type: Transform - pos: -39.495785,-7.6992884 - parent: 31 - - uid: 8712 + - uid: 13054 components: - type: Transform - pos: -35.523197,-23.564377 + pos: -40.496353,-9.50457 parent: 31 - proto: PonderingOrb entities: @@ -58310,6 +57678,11 @@ entities: parent: 31 - proto: PortableGeneratorJrPacman entities: + - uid: 3248 + components: + - type: Transform + pos: -21.5,12.5 + parent: 31 - uid: 10125 components: - type: Transform @@ -58420,6 +57793,14 @@ entities: - type: Transform pos: 28.5,-0.5 parent: 31 +- proto: PosterContrabandFunPolice + entities: + - uid: 2771 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,31.5 + parent: 31 - proto: PosterContrabandLamarr entities: - uid: 9617 @@ -58443,10 +57824,11 @@ entities: parent: 31 - proto: PosterContrabandSmoke entities: - - uid: 7802 + - uid: 8288 components: - type: Transform - pos: 13.5,20.5 + rot: -1.5707963267948966 rad + pos: 14.5,20.5 parent: 31 - proto: PosterContrabandSpaceCola entities: @@ -58462,33 +57844,35 @@ entities: - type: Transform pos: -27.5,12.5 parent: 31 -- proto: PosterContrabandVoteWeh +- proto: PosterLegitAnatomyPoster entities: - - uid: 8703 + - uid: 6883 components: - type: Transform - pos: -37.5,-26.5 + rot: -1.5707963267948966 rad + pos: 25.5,-7.5 parent: 31 -- proto: PosterContrabandWehWatches +- proto: PosterLegitBlessThisSpess entities: - - uid: 8720 + - uid: 3571 components: - type: Transform - pos: -31.5,-28.5 + rot: -1.5707963267948966 rad + pos: -19.5,-4.5 parent: 31 -- proto: PosterLegitAnatomyPoster +- proto: PosterLegitBuild entities: - - uid: 7342 + - uid: 2677 components: - type: Transform - pos: 25.5,-6.5 + rot: -1.5707963267948966 rad + pos: -33.5,-25.5 parent: 31 -- proto: PosterLegitCarbonDioxide - entities: - - uid: 7690 + - uid: 7857 components: - type: Transform - pos: 29.5,14.5 + rot: -1.5707963267948966 rad + pos: -21.5,21.5 parent: 31 - proto: PosterLegitCarpMount entities: @@ -58513,12 +57897,11 @@ entities: - type: Transform pos: 1.5,-5.5 parent: 31 -- proto: PosterLegitDickGumshue - entities: - - uid: 9366 + - uid: 9993 components: - type: Transform - pos: -22.5,18.5 + rot: 3.141592653589793 rad + pos: -27.5,-5.5 parent: 31 - proto: PosterLegitIan entities: @@ -58536,16 +57919,21 @@ entities: parent: 31 - proto: PosterLegitNanotrasenLogo entities: - - uid: 619 + - uid: 2566 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,-8.5 + parent: 31 + - uid: 2691 components: - type: Transform pos: 5.5,26.5 parent: 31 - - uid: 2566 + - uid: 6309 components: - type: Transform - rot: 3.141592653589793 rad - pos: -43.5,-8.5 + pos: 5.5,24.5 parent: 31 - uid: 7803 components: @@ -58562,16 +57950,6 @@ entities: - type: Transform pos: 34.5,-18.5 parent: 31 - - uid: 8325 - components: - - type: Transform - pos: 43.5,-22.5 - parent: 31 - - uid: 8326 - components: - - type: Transform - pos: 43.5,-26.5 - parent: 31 - proto: PosterLegitNoERP entities: - uid: 7808 @@ -58616,17 +57994,10 @@ entities: parent: 31 - proto: PosterLegitStateLaws entities: - - uid: 10558 - components: - - type: Transform - pos: -4.5,-26.5 - parent: 31 -- proto: PosterLegitWorkForAFuture - entities: - - uid: 11107 + - uid: 9675 components: - type: Transform - pos: -18.5,-9.5 + pos: -4.5,-25.5 parent: 31 - proto: PosterMapSaltern entities: @@ -58677,13 +58048,6 @@ entities: - type: Transform pos: 23.784285,-11.850549 parent: 31 -- proto: PottedPlantBioluminscent - entities: - - uid: 8292 - components: - - type: Transform - pos: 32.5,-25.5 - parent: 31 - proto: PottedPlantRandom entities: - uid: 161 @@ -58694,74 +58058,64 @@ entities: - type: ContainerContainer containers: stash: !type:ContainerSlot {} - - uid: 763 + - uid: 1068 components: - type: Transform - pos: 0.5,26.5 + pos: 5.5,16.5 parent: 31 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - - uid: 1068 + - uid: 1391 components: - type: Transform - pos: 5.5,16.5 + pos: 4.5,30.5 parent: 31 - - uid: 2712 + - uid: 1686 components: - type: Transform - pos: -35.5,-11.5 + pos: -4.5,29.5 parent: 31 - - uid: 4934 + - uid: 2451 components: - type: Transform - pos: 4.5,27.5 + pos: 0.5,14.5 parent: 31 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - - uid: 5634 + - uid: 2678 components: - type: Transform - pos: -7.5,17.5 + pos: -7.5,36.5 parent: 31 - - uid: 7290 + - uid: 2692 components: - type: Transform - pos: 6.5,1.5 + pos: -7.5,36.5 parent: 31 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - - uid: 7334 + - uid: 2712 components: - type: Transform - pos: -10.5,11.5 + pos: -35.5,-11.5 parent: 31 - - uid: 8288 + - uid: 5634 components: - type: Transform - pos: 55.5,-24.5 + pos: -7.5,17.5 parent: 31 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - - uid: 8709 + - uid: 7150 components: - type: Transform - pos: -34.5,-23.5 + pos: 4.5,23.5 parent: 31 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - - uid: 8808 + - uid: 7290 components: - type: Transform - pos: 2.5,27.5 + pos: 6.5,1.5 parent: 31 - type: ContainerContainer containers: stash: !type:ContainerSlot {} + - uid: 7334 + components: + - type: Transform + pos: -10.5,11.5 + parent: 31 - uid: 9325 components: - type: Transform @@ -58770,6 +58124,11 @@ entities: - type: ContainerContainer containers: stash: !type:ContainerSlot {} + - uid: 9552 + components: + - type: Transform + pos: 2.5,23.5 + parent: 31 - uid: 9915 components: - type: Transform @@ -58797,6 +58156,11 @@ entities: parent: 31 - proto: PottedPlantRandomPlastic entities: + - uid: 1363 + components: + - type: Transform + pos: -35.5,-29.5 + parent: 31 - uid: 2316 components: - type: Transform @@ -58834,6 +58198,11 @@ entities: - type: Transform pos: 0.6812986,-27.61599 parent: 31 + - uid: 8252 + components: + - type: Transform + pos: 47.648796,-19.40138 + parent: 31 - proto: PowerCellMedium entities: - uid: 2198 @@ -58854,18 +58223,6 @@ entities: rot: 1.5707963267948966 rad pos: -17.5,-23.5 parent: 31 - - uid: 1395 - components: - - type: Transform - pos: 5.5,32.5 - parent: 31 - - type: Physics - canCollide: False - - uid: 1425 - components: - - type: Transform - pos: -11.5,16.5 - parent: 31 - uid: 2889 components: - type: Transform @@ -58883,11 +58240,22 @@ entities: - type: Transform pos: 8.5,-4.5 parent: 31 + - uid: 4622 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-19.5 + parent: 31 - uid: 6205 components: - type: Transform pos: 18.5,17.5 parent: 31 + - uid: 7161 + components: + - type: Transform + pos: -11.5,16.5 + parent: 31 - uid: 9528 components: - type: Transform @@ -58905,239 +58273,203 @@ entities: - type: Transform pos: -17.310383,-23.212906 parent: 31 -- proto: Poweredlight +- proto: PoweredLEDLightPostSmall entities: - - uid: 41 + - uid: 426 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,6.5 + pos: -10.5,28.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 143 + - uid: 554 components: - type: Transform rot: -1.5707963267948966 rad - pos: 12.5,-3.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 220 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-31.5 + pos: 49.5,-32.5 parent: 31 - - uid: 303 + - uid: 2056 components: - type: Transform - pos: 8.5,21.5 + rot: 1.5707963267948966 rad + pos: -0.5,37.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 401 + - uid: 2584 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-13.5 + pos: -55.5,-28.5 parent: 31 - - uid: 493 + - uid: 2673 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,11.5 + pos: -32.5,-47.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 516 + - uid: 5769 components: - type: Transform - pos: 28.5,6.5 + pos: 46.5,-16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 557 + - uid: 7214 components: - type: Transform - pos: -38.5,10.5 + rot: 1.5707963267948966 rad + pos: 4.5,37.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 776 + - uid: 7701 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,13.5 + rot: 3.141592653589793 rad + pos: -9.5,38.5 parent: 31 - - uid: 857 + - uid: 8286 components: - type: Transform rot: -1.5707963267948966 rad - pos: -35.5,0.5 + pos: 56.5,-27.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 891 + - uid: 8816 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -35.5,-4.5 + rot: 3.141592653589793 rad + pos: -9.5,32.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 892 + - uid: 8953 components: - type: Transform - pos: -32.5,5.5 + rot: -1.5707963267948966 rad + pos: 42.5,-27.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 917 + - uid: 9376 components: - type: Transform rot: 3.141592653589793 rad - pos: -30.5,3.5 + pos: -3.5,35.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 994 + - uid: 11844 components: - type: Transform - rot: 3.141592653589793 rad - pos: 22.5,-11.5 + pos: 52.5,-16.5 parent: 31 - - uid: 1033 +- proto: PoweredLEDSmallLight + entities: + - uid: 2860 components: - type: Transform rot: 1.5707963267948966 rad - pos: -29.5,9.5 + pos: -15.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1034 + - type: Timer +- proto: Poweredlight + entities: + - uid: 41 components: - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,8.5 + rot: 1.5707963267948966 rad + pos: -25.5,6.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1058 + - uid: 220 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,2.5 + rot: 3.141592653589793 rad + pos: -10.5,-31.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1059 + - uid: 303 components: - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,3.5 + pos: 8.5,21.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1060 + - uid: 493 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,-0.5 + pos: 24.5,11.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1061 + - uid: 557 components: - type: Transform - pos: -18.5,5.5 + pos: -38.5,10.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1064 + - uid: 674 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,0.5 + rot: 3.141592653589793 rad + pos: 52.5,-27.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1066 + - uid: 699 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-4.5 + pos: 52.5,-21.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1069 + - uid: 776 components: - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,-2.5 + rot: 1.5707963267948966 rad + pos: -15.5,13.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1122 + - uid: 857 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,30.5 + rot: -1.5707963267948966 rad + pos: -35.5,0.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1123 + - uid: 891 components: - type: Transform rot: -1.5707963267948966 rad - pos: 9.5,30.5 + pos: -35.5,-4.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1135 + - uid: 892 components: - type: Transform - pos: 12.5,27.5 + pos: -32.5,5.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1171 + - uid: 917 components: - type: Transform rot: 3.141592653589793 rad - pos: 1.5,30.5 + pos: -30.5,3.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1186 + - uid: 994 components: - type: Transform rot: 3.141592653589793 rad - pos: 5.5,30.5 + pos: 22.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1188 + - uid: 1033 components: - type: Transform rot: 1.5707963267948966 rad - pos: 2.5,23.5 + pos: -29.5,9.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1200 + - uid: 1034 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,23.5 + rot: 3.141592653589793 rad + pos: -26.5,8.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1210 + - uid: 1059 components: - type: Transform rot: 3.141592653589793 rad - pos: 5.5,16.5 + pos: -20.5,3.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 @@ -59172,22 +58504,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1228 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 12.5,10.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1234 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,12.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1252 components: - type: Transform @@ -59196,53 +58512,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1253 - components: - - type: Transform - pos: 15.5,12.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1259 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,13.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1261 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,8.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1262 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,7.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1265 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,3.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1266 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 13.5,3.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1271 components: - type: Transform @@ -59250,28 +58519,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1272 - components: - - type: Transform - pos: 15.5,1.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1274 - components: - - type: Transform - pos: 18.5,1.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1281 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 23.5,3.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1283 components: - type: Transform @@ -59342,22 +58589,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1313 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-21.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1322 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-17.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1323 components: - type: Transform @@ -59375,30 +58606,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1325 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-17.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1331 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-17.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 1344 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,17.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1358 components: - type: Transform @@ -59430,14 +58637,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1367 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,3.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1371 components: - type: Transform @@ -59454,14 +58653,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 1538 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,15.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 1605 components: - type: Transform @@ -59487,17 +58678,16 @@ entities: rot: 3.141592653589793 rad pos: -4.5,-23.5 parent: 31 - - uid: 2179 + - uid: 2131 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-3.5 + pos: -11.5,-18.5 parent: 31 - - uid: 2220 + - uid: 2179 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,-8.5 + rot: 1.5707963267948966 rad + pos: 6.5,-3.5 parent: 31 - uid: 2247 components: @@ -59507,6 +58697,34 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 + - uid: 2346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,10.5 + parent: 31 + - uid: 2406 + components: + - type: Transform + pos: 14.5,12.5 + parent: 31 + - uid: 2473 + components: + - type: Transform + pos: -18.5,-14.5 + parent: 31 + - uid: 2690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,31.5 + parent: 31 + - uid: 2717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-19.5 + parent: 31 - uid: 3380 components: - type: Transform @@ -59527,59 +58745,51 @@ entities: rot: 3.141592653589793 rad pos: -14.5,-22.5 parent: 31 - - uid: 3732 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,-27.5 - parent: 31 - uid: 3734 components: - type: Transform rot: 1.5707963267948966 rad pos: -16.5,-29.5 parent: 31 - - uid: 3963 + - uid: 3842 components: - type: Transform rot: 3.141592653589793 rad - pos: -10.5,7.5 + pos: 46.5,-27.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 3983 + - uid: 3896 components: - type: Transform - pos: -5.5,17.5 + pos: 46.5,-21.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 3998 + - uid: 3908 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-30.5 + parent: 31 + - uid: 3919 components: - type: Transform rot: 1.5707963267948966 rad - pos: -9.5,17.5 + pos: 43.5,-24.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4097 + - uid: 3930 components: - type: Transform - pos: -12.5,11.5 + rot: -1.5707963267948966 rad + pos: 55.5,-24.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4119 + - uid: 3999 components: - type: Transform - pos: -11.5,5.5 + rot: 1.5707963267948966 rad + pos: -25.5,-15.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4120 + - uid: 4097 components: - type: Transform - pos: -9.5,5.5 + pos: -12.5,11.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 @@ -59590,14 +58800,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 4122 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,-1.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 4251 components: - type: Transform @@ -59634,22 +58836,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 4912 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 24.5,15.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 5103 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,-0.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 6182 components: - type: Transform @@ -59680,46 +58866,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 6384 - components: - - type: Transform - pos: 34.5,23.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6385 - components: - - type: Transform - pos: 42.5,23.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6387 - components: - - type: Transform - pos: 36.5,23.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6406 - components: - - type: Transform - pos: 35.5,19.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6407 - components: - - type: Transform - pos: 43.5,19.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6435 - components: - - type: Transform - pos: 46.5,23.5 - parent: 31 - uid: 6436 components: - type: Transform @@ -59727,33 +58873,19 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 6463 - components: - - type: Transform - pos: 44.5,23.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 6509 + - uid: 6566 components: - type: Transform - pos: 40.5,23.5 + pos: 39.5,19.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 6527 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 48.5,21.5 - parent: 31 - - uid: 6566 + - uid: 6860 components: - type: Transform - pos: 39.5,19.5 + rot: 3.141592653589793 rad + pos: -19.5,-12.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 6897 components: - type: Transform @@ -59789,13 +58921,6 @@ entities: rot: 1.5707963267948966 rad pos: 20.5,22.5 parent: 31 - - uid: 6921 - components: - - type: Transform - pos: 38.5,23.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 7067 components: - type: Transform @@ -59814,194 +58939,189 @@ entities: - uid: 7171 components: - type: Transform - pos: 8.5,26.5 + rot: -1.5707963267948966 rad + pos: 12.5,-3.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 7349 + - uid: 7231 components: - type: Transform - pos: 14.5,-13.5 + rot: 3.141592653589793 rad + pos: 20.5,3.5 parent: 31 - - uid: 7350 + - uid: 7247 + components: + - type: Transform + pos: 28.5,6.5 + parent: 31 + - uid: 7254 components: - type: Transform rot: 3.141592653589793 rad - pos: 18.5,-18.5 + pos: 12.5,3.5 parent: 31 - - uid: 7586 + - uid: 7277 + components: + - type: Transform + pos: 18.5,1.5 + parent: 31 + - uid: 7296 components: - type: Transform rot: 3.141592653589793 rad - pos: 8.5,16.5 + pos: 51.5,15.5 parent: 31 - - uid: 7653 + - uid: 7298 components: - type: Transform - pos: 6.5,-7.5 + rot: 3.141592653589793 rad + pos: 18.5,-2.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 7747 + - uid: 7349 components: - type: Transform - pos: -8.5,-14.5 + pos: 14.5,-13.5 parent: 31 - - uid: 7785 + - uid: 7350 components: - type: Transform rot: 3.141592653589793 rad - pos: -50.5,-11.5 + pos: 18.5,-18.5 parent: 31 - - uid: 7788 + - uid: 7384 components: - type: Transform rot: 3.141592653589793 rad - pos: -45.5,-11.5 + pos: -13.5,3.5 parent: 31 - - uid: 7871 + - uid: 7487 components: - type: Transform rot: -1.5707963267948966 rad - pos: -17.5,-11.5 + pos: 4.5,28.5 parent: 31 - - uid: 8085 + - uid: 7533 components: - type: Transform - pos: -0.5,8.5 + pos: -5.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8086 + - uid: 7564 components: - type: Transform rot: 3.141592653589793 rad - pos: -0.5,10.5 + pos: -9.5,-16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8270 + - uid: 7586 components: - type: Transform - pos: 34.5,-23.5 + rot: 3.141592653589793 rad + pos: 8.5,16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8272 + - uid: 7653 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,-19.5 + pos: 6.5,-7.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 8273 + - uid: 7785 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,-22.5 + rot: 3.141592653589793 rad + pos: -50.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8274 + - uid: 7788 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,-26.5 + rot: 3.141592653589793 rad + pos: -45.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8275 + - uid: 8231 components: - type: Transform rot: 3.141592653589793 rad - pos: 47.5,-29.5 + pos: -15.5,-27.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8276 + - uid: 8236 components: - type: Transform - rot: 3.141592653589793 rad - pos: 51.5,-29.5 + rot: 1.5707963267948966 rad + pos: -9.5,12.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8277 + - uid: 8237 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-26.5 + pos: 5.5,21.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8278 + - uid: 8238 components: - type: Transform rot: -1.5707963267948966 rad - pos: 54.5,-22.5 + pos: 5.5,-16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8279 + - uid: 8240 components: - type: Transform - pos: 51.5,-19.5 + rot: 1.5707963267948966 rad + pos: 2.5,-25.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8280 + - uid: 8241 components: - type: Transform - pos: 47.5,-19.5 + pos: -2.5,-14.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8734 + - uid: 8242 components: - type: Transform - pos: -35.5,-23.5 + rot: -1.5707963267948966 rad + pos: 4.5,14.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8835 + - uid: 8245 components: - type: Transform rot: 1.5707963267948966 rad - pos: 6.5,29.5 + pos: -30.5,-6.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8836 + - uid: 8261 components: - type: Transform rot: -1.5707963267948966 rad - pos: 0.5,29.5 + pos: 0.5,13.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8837 + - uid: 8262 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,27.5 + pos: -5.5,16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8838 + - uid: 8274 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,27.5 + rot: -1.5707963267948966 rad + pos: -16.5,-2.5 + parent: 31 + - uid: 8275 + components: + - type: Transform + pos: -11.5,1.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 8845 components: - type: Transform rot: -1.5707963267948966 rad pos: 50.5,8.5 parent: 31 + - uid: 8921 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-1.5 + parent: 31 + - uid: 9003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,-18.5 + parent: 31 - uid: 9094 components: - type: Transform @@ -60025,18 +59145,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 10062 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 19.5,27.5 - parent: 31 - - uid: 10063 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 23.5,27.5 - parent: 31 - uid: 10301 components: - type: Transform @@ -60049,12 +59157,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-31.5 parent: 31 - - uid: 10355 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -21.5,-9.5 - parent: 31 - uid: 10767 components: - type: Transform @@ -60096,23 +59198,12 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,14.5 parent: 31 - - uid: 11133 - components: - - type: Transform - pos: -2.5,26.5 - parent: 31 - uid: 11250 components: - type: Transform rot: -1.5707963267948966 rad pos: -34.5,8.5 parent: 31 - - uid: 11255 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,23.5 - parent: 31 - uid: 11260 components: - type: Transform @@ -60154,53 +59245,71 @@ entities: rot: -1.5707963267948966 rad pos: 68.5,-2.5 parent: 31 -- proto: PoweredlightBlue - entities: - - uid: 6708 + - uid: 12225 components: - type: Transform - pos: -8.5,1.5 + rot: 1.5707963267948966 rad + pos: 0.5,-20.5 parent: 31 - - uid: 11093 + - uid: 12227 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-6.5 + rot: 1.5707963267948966 rad + pos: -26.5,-5.5 parent: 31 - - uid: 11297 + - uid: 12528 components: - type: Transform rot: -1.5707963267948966 rad - pos: 0.5,-4.5 + pos: -22.5,-10.5 parent: 31 - - uid: 11298 + - uid: 12530 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,-3.5 + rot: -1.5707963267948966 rad + pos: -24.5,-0.5 + parent: 31 + - uid: 13064 + components: + - type: Transform + pos: -20.5,1.5 parent: 31 -- proto: PoweredLightPostSmall +- proto: PoweredLightColoredBlack entities: - - uid: 7709 + - uid: 1259 components: - type: Transform - pos: 30.5,28.5 + pos: 12.5,27.5 parent: 31 - proto: PoweredlightSodium entities: + - uid: 8246 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-6.5 + parent: 31 - uid: 8526 components: - type: Transform pos: -31.5,-13.5 parent: 31 -- proto: PoweredSmallLight - entities: - - uid: 14 + - uid: 8887 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,16.5 + pos: -4.5,1.5 parent: 31 + - uid: 9685 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-0.5 + parent: 31 + - type: DeviceLinkSink + links: + - 10155 +- proto: PoweredSmallLight + entities: - uid: 1246 components: - type: Transform @@ -60223,6 +59332,12 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 + - uid: 1603 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -38.5,-30.5 + parent: 31 - uid: 2020 components: - type: Transform @@ -60230,18 +59345,24 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 2343 + - uid: 2466 components: - type: Transform - pos: -13.5,-10.5 + rot: 1.5707963267948966 rad + pos: -33.5,-31.5 parent: 31 - - uid: 3586 + - uid: 3395 components: - type: Transform - pos: 11.5,24.5 + rot: 1.5707963267948966 rad + pos: -18.5,-6.5 + parent: 31 + - uid: 3836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-6.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 3861 components: - type: Transform @@ -60347,14 +59468,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 4020 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,15.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 4029 components: - type: Transform @@ -60368,6 +59481,12 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 + - uid: 4092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -36.5,-26.5 + parent: 31 - uid: 4153 components: - type: Transform @@ -60382,38 +59501,26 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 4605 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 52.5,6.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4862 + - uid: 4598 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -30.5,-5.5 + rot: 3.141592653589793 rad + pos: 10.5,23.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 4957 + - uid: 4605 components: - type: Transform rot: 1.5707963267948966 rad - pos: -30.5,-2.5 + pos: 52.5,6.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 4958 + - uid: 4906 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -30.5,0.5 + rot: 3.141592653589793 rad + pos: 29.5,-19.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 4959 components: - type: Transform @@ -60422,14 +59529,6 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 5008 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,-5.5 - parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 5009 components: - type: Transform @@ -60438,28 +59537,25 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 5010 + - uid: 5190 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-7.5 + pos: -22.5,25.5 parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 5120 + - uid: 5550 components: - type: Transform - pos: 10.5,26.5 + rot: 3.141592653589793 rad + pos: -12.5,-7.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 5190 + - uid: 5765 components: - type: Transform - pos: -22.5,25.5 + rot: 3.141592653589793 rad + pos: -21.5,-7.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 7063 components: - type: Transform @@ -60467,11 +59563,11 @@ entities: parent: 31 - type: ApcPowerReceiver powerLoad: 0 - - uid: 7479 + - uid: 7459 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,13.5 + rot: 3.141592653589793 rad + pos: 54.5,19.5 parent: 31 - uid: 7498 components: @@ -60479,17 +59575,17 @@ entities: rot: 1.5707963267948966 rad pos: 40.5,-8.5 parent: 31 - - uid: 7543 + - uid: 7518 components: - type: Transform rot: 3.141592653589793 rad - pos: -31.5,9.5 + pos: 19.5,26.5 parent: 31 - - uid: 7602 + - uid: 7543 components: - type: Transform rot: 3.141592653589793 rad - pos: -29.5,-9.5 + pos: -31.5,9.5 parent: 31 - uid: 7686 components: @@ -60497,6 +59593,11 @@ entities: rot: 3.141592653589793 rad pos: 60.5,6.5 parent: 31 + - uid: 7725 + components: + - type: Transform + pos: -32.5,-21.5 + parent: 31 - uid: 7811 components: - type: Transform @@ -60518,36 +59619,28 @@ entities: - type: Transform pos: 56.5,8.5 parent: 31 - - uid: 8732 + - uid: 8244 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-27.5 + rot: -1.5707963267948966 rad + pos: -15.5,9.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8733 + - uid: 8259 components: - type: Transform rot: -1.5707963267948966 rad - pos: -32.5,-27.5 + pos: 16.5,16.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8735 + - uid: 8273 components: - type: Transform - pos: -32.5,-31.5 + pos: -28.5,-11.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 8775 + - uid: 8512 components: - type: Transform - pos: -16.5,11.5 + pos: -1.5,8.5 parent: 31 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 9248 components: - type: Transform @@ -60592,6 +59685,12 @@ entities: rot: 3.141592653589793 rad pos: 32.5,21.5 parent: 31 + - uid: 10393 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-0.5 + parent: 31 - uid: 10499 components: - type: Transform @@ -60619,11 +59718,11 @@ entities: - type: Transform pos: -7.5,22.5 parent: 31 - - uid: 11200 + - uid: 11186 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,28.5 + rot: 1.5707963267948966 rad + pos: -26.5,-26.5 parent: 31 - uid: 11209 components: @@ -60631,22 +59730,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-28.5 parent: 31 - - uid: 11289 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -13.5,-1.5 - parent: 31 - - uid: 11295 - components: - - type: Transform - pos: 52.5,17.5 - parent: 31 - - uid: 11296 - components: - - type: Transform - pos: -11.5,1.5 - parent: 31 - uid: 11419 components: - type: Transform @@ -60682,33 +59765,12 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,-26.5 parent: 31 - - uid: 11545 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -21.5,-27.5 - parent: 31 - - uid: 11546 - components: - - type: Transform - pos: -21.5,-25.5 - parent: 31 - uid: 11547 components: - type: Transform rot: -1.5707963267948966 rad pos: -24.5,-26.5 parent: 31 - - uid: 11548 - components: - - type: Transform - pos: -26.5,-24.5 - parent: 31 - - uid: 11549 - components: - - type: Transform - pos: -33.5,-21.5 - parent: 31 - uid: 11551 components: - type: Transform @@ -60794,15 +59856,73 @@ entities: rot: 3.141592653589793 rad pos: -46.5,2.5 parent: 31 -- proto: PoweredSmallLightEmpty +- proto: PoweredSmallLightMaintenance entities: - - uid: 8209 + - uid: 1401 components: - type: Transform - pos: -22.5,17.5 + pos: 34.5,23.5 + parent: 31 + - uid: 1956 + components: + - type: Transform + pos: 36.5,23.5 + parent: 31 + - uid: 5817 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,12.5 + parent: 31 + - uid: 6006 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-10.5 + parent: 31 + - uid: 7306 + components: + - type: Transform + pos: 38.5,23.5 + parent: 31 + - uid: 7308 + components: + - type: Transform + pos: 42.5,23.5 + parent: 31 + - uid: 7376 + components: + - type: Transform + pos: 46.5,23.5 + parent: 31 + - uid: 7428 + components: + - type: Transform + pos: 44.5,23.5 + parent: 31 + - uid: 7431 + components: + - type: Transform + pos: 40.5,23.5 + parent: 31 + - uid: 7479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,23.5 + parent: 31 + - uid: 8127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-11.5 + parent: 31 + - uid: 8272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,14.5 parent: 31 -- proto: PoweredSmallLightMaintenance - entities: - uid: 11552 components: - type: Transform @@ -60834,6 +59954,11 @@ entities: - type: Transform pos: -13.5,-21.5 parent: 31 + - uid: 7342 + components: + - type: Transform + pos: 12.5,10.5 + parent: 31 - proto: ProtolatheMachineCircuitboard entities: - uid: 12578 @@ -60860,11 +59985,23 @@ entities: rot: 1.5707963267948966 rad pos: 48.5,-3.5 parent: 31 + - uid: 1595 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,-3.5 + parent: 31 - uid: 2133 components: - type: Transform pos: -11.5,18.5 parent: 31 + - uid: 2442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-23.5 + parent: 31 - uid: 2827 components: - type: Transform @@ -60880,11 +60017,23 @@ entities: - type: Transform pos: 10.5,10.5 parent: 31 + - uid: 4901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-18.5 + parent: 31 - uid: 6417 components: - type: Transform pos: 51.5,17.5 parent: 31 + - uid: 6527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-11.5 + parent: 31 - uid: 6853 components: - type: Transform @@ -60935,11 +60084,6 @@ entities: - type: Transform pos: 27.5,-4.5 parent: 31 - - uid: 8739 - components: - - type: Transform - pos: -32.5,-27.5 - parent: 31 - uid: 8886 components: - type: Transform @@ -60950,12 +60094,6 @@ entities: - type: Transform pos: 45.5,5.5 parent: 31 - - uid: 8993 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-10.5 - parent: 31 - uid: 9072 components: - type: Transform @@ -60987,6 +60125,11 @@ entities: - type: Transform pos: 8.5,-17.5 parent: 31 + - uid: 10390 + components: + - type: Transform + pos: -20.5,-4.5 + parent: 31 - uid: 10559 components: - type: Transform @@ -61008,11 +60151,6 @@ entities: - type: Transform pos: 56.5,-5.5 parent: 31 - - uid: 11124 - components: - - type: Transform - pos: -5.5,29.5 - parent: 31 - uid: 11442 components: - type: Transform @@ -61039,11 +60177,6 @@ entities: - type: Transform pos: -13.5,-1.5 parent: 31 - - uid: 12431 - components: - - type: Transform - pos: 46.5,9.5 - parent: 31 - uid: 12539 components: - type: Transform @@ -61114,15 +60247,17 @@ entities: - type: Transform pos: 22.740244,13.497578 parent: 31 - - uid: 9021 + - uid: 8278 components: - type: Transform - pos: 32.380318,-3.4857323 + rot: -1.5707963267948966 rad + pos: 32.61437,-3.5820618 parent: 31 - - uid: 9022 + - uid: 8279 components: - type: Transform - pos: 32.645943,-3.4701073 + rot: -1.5707963267948966 rad + pos: 32.676914,-3.4101868 parent: 31 - proto: RagItem entities: @@ -61133,28 +60268,112 @@ entities: parent: 31 - proto: Railing entities: - - uid: 12978 + - uid: 2118 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,30.5 + parent: 31 + - uid: 2192 + components: + - type: Transform + pos: -18.5,27.5 + parent: 31 + - uid: 2729 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-27.5 + parent: 31 + - uid: 2850 components: - type: Transform rot: 1.5707963267948966 rad - pos: -27.5,25.5 + pos: -14.5,-11.5 parent: 31 - - uid: 12979 + - uid: 3796 components: - type: Transform rot: 1.5707963267948966 rad - pos: -27.5,23.5 + pos: -14.5,-10.5 parent: 31 - - uid: 12980 + - uid: 5314 + components: + - type: Transform + pos: -15.5,27.5 + parent: 31 + - uid: 6452 + components: + - type: Transform + pos: -20.5,27.5 + parent: 31 + - uid: 6977 + components: + - type: Transform + pos: 46.5,-26.5 + parent: 31 + - uid: 7864 + components: + - type: Transform + pos: -12.5,27.5 + parent: 31 + - uid: 9554 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,30.5 + parent: 31 + - uid: 9573 + components: + - type: Transform + pos: -9.5,27.5 + parent: 31 + - uid: 10175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,1.5 + parent: 31 + - uid: 10176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,-2.5 + parent: 31 + - uid: 12086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-22.5 + parent: 31 + - uid: 12087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-21.5 + parent: 31 + - uid: 12088 components: - type: Transform rot: 1.5707963267948966 rad - pos: -27.5,22.5 + pos: 51.5,-21.5 parent: 31 - - uid: 12982 + - uid: 12096 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-22.5 + parent: 31 + - uid: 12098 + components: + - type: Transform + pos: 52.5,-26.5 + parent: 31 + - uid: 12099 components: - type: Transform - pos: -26.5,26.5 + rot: 1.5707963267948966 rad + pos: 51.5,-27.5 parent: 31 - uid: 12983 components: @@ -61171,11 +60390,6 @@ entities: - type: Transform pos: -21.5,27.5 parent: 31 - - uid: 12986 - components: - - type: Transform - pos: -20.5,27.5 - parent: 31 - uid: 12987 components: - type: Transform @@ -61337,17 +60551,153 @@ entities: parent: 31 - proto: RailingCornerSmall entities: + - uid: 2680 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,36.5 + parent: 31 + - uid: 2682 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,38.5 + parent: 31 + - uid: 2713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,-22.5 + parent: 31 + - uid: 4078 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,38.5 + parent: 31 + - uid: 4082 + components: + - type: Transform + pos: 6.5,32.5 + parent: 31 + - uid: 4087 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,37.5 + parent: 31 + - uid: 4093 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,38.5 + parent: 31 + - uid: 4095 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,27.5 + parent: 31 + - uid: 4099 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,37.5 + parent: 31 + - uid: 4106 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,32.5 + parent: 31 + - uid: 4110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,31.5 + parent: 31 + - uid: 4128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,38.5 + parent: 31 + - uid: 4254 + components: + - type: Transform + pos: -3.5,33.5 + parent: 31 + - uid: 4545 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,27.5 + parent: 31 + - uid: 4557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,27.5 + parent: 31 + - uid: 4617 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,27.5 + parent: 31 + - uid: 4912 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,27.5 + parent: 31 + - uid: 5111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,27.5 + parent: 31 + - uid: 5865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,27.5 + parent: 31 + - uid: 5869 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,27.5 + parent: 31 - uid: 7316 components: - type: Transform pos: 5.5,-35.5 parent: 31 + - uid: 7791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,27.5 + parent: 31 - uid: 8488 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-29.5 parent: 31 + - uid: 10716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,27.5 + parent: 31 + - uid: 10740 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,27.5 + parent: 31 - uid: 12082 components: - type: Transform @@ -61359,11 +60709,22 @@ entities: rot: 1.5707963267948966 rad pos: 62.5,5.5 parent: 31 - - uid: 12981 + - uid: 12085 components: - type: Transform rot: 3.141592653589793 rad - pos: -27.5,26.5 + pos: 51.5,-26.5 + parent: 31 + - uid: 12097 + components: + - type: Transform + pos: 47.5,-22.5 + parent: 31 + - uid: 12101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,-26.5 parent: 31 - uid: 13011 components: @@ -61409,6 +60770,11 @@ entities: - type: Transform pos: -18.5,-29.5 parent: 31 + - uid: 10146 + components: + - type: Transform + pos: -30.5,1.5 + parent: 31 - proto: RandomArtifactSpawner entities: - uid: 60 @@ -61496,11 +60862,6 @@ entities: parent: 31 - proto: RandomInstruments entities: - - uid: 1189 - components: - - type: Transform - pos: -30.5,1.5 - parent: 31 - uid: 5710 components: - type: Transform @@ -61570,6 +60931,11 @@ entities: - type: Transform pos: -18.5,11.5 parent: 31 + - uid: 1374 + components: + - type: Transform + pos: -12.5,-8.5 + parent: 31 - uid: 7263 components: - type: Transform @@ -61585,20 +60951,15 @@ entities: - type: Transform pos: -14.5,8.5 parent: 31 - - uid: 9279 - components: - - type: Transform - pos: -10.5,-11.5 - parent: 31 - - uid: 11201 + - uid: 11706 components: - type: Transform - pos: -4.5,30.5 + pos: 4.5,-35.5 parent: 31 - - uid: 11706 + - uid: 13066 components: - type: Transform - pos: 4.5,-35.5 + pos: -16.5,-0.5 parent: 31 - proto: RandomPosterLegit entities: @@ -61642,11 +61003,6 @@ entities: - type: Transform pos: -31.5,-1.5 parent: 31 - - uid: 9284 - components: - - type: Transform - pos: -21.5,-1.5 - parent: 31 - uid: 10540 components: - type: Transform @@ -61657,18 +61013,30 @@ entities: - type: Transform pos: 47.5,-4.5 parent: 31 - - uid: 11106 +- proto: RandomSnacks + entities: + - uid: 4080 components: - type: Transform - pos: -12.5,-13.5 + rot: 3.141592653589793 rad + pos: -5.5,36.5 + parent: 31 + - uid: 5004 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,35.5 parent: 31 -- proto: RandomSnacks - entities: - uid: 7476 components: - type: Transform pos: -12.5,11.5 parent: 31 + - uid: 9842 + components: + - type: Transform + pos: -30.5,-6.5 + parent: 31 - uid: 10760 components: - type: Transform @@ -61676,18 +61044,13 @@ entities: parent: 31 - proto: RandomSoap entities: - - uid: 8440 + - uid: 2867 components: - type: Transform - pos: -17.5,-12.5 + pos: -20.5,-6.5 parent: 31 - proto: RandomSpawner entities: - - uid: 426 - components: - - type: Transform - pos: -25.5,0.5 - parent: 31 - uid: 427 components: - type: Transform @@ -61698,10 +61061,35 @@ entities: - type: Transform pos: -7.5,5.5 parent: 31 - - uid: 494 + - uid: 1364 components: - type: Transform - pos: -21.5,12.5 + pos: -31.5,-32.5 + parent: 31 + - uid: 1378 + components: + - type: Transform + pos: -34.5,-25.5 + parent: 31 + - uid: 2291 + components: + - type: Transform + pos: -30.5,-7.5 + parent: 31 + - uid: 4077 + components: + - type: Transform + pos: -20.5,-24.5 + parent: 31 + - uid: 4109 + components: + - type: Transform + pos: -26.5,-21.5 + parent: 31 + - uid: 4131 + components: + - type: Transform + pos: -0.5,31.5 parent: 31 - uid: 4382 components: @@ -61723,21 +61111,21 @@ entities: - type: Transform pos: 24.5,-20.5 parent: 31 - - uid: 5212 + - uid: 5003 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,-18.5 + pos: -8.5,34.5 parent: 31 - - uid: 7593 + - uid: 5212 components: - type: Transform - pos: -14.5,-11.5 + rot: -1.5707963267948966 rad + pos: -8.5,-18.5 parent: 31 - - uid: 7594 + - uid: 5766 components: - type: Transform - pos: -15.5,-4.5 + pos: -26.5,-2.5 parent: 31 - uid: 7595 components: @@ -61817,6 +61205,11 @@ entities: - type: Transform pos: 38.5,-7.5 parent: 31 + - uid: 8285 + components: + - type: Transform + pos: -18.5,0.5 + parent: 31 - uid: 8797 components: - type: Transform @@ -61833,6 +61226,11 @@ entities: - type: Transform pos: -18.5,-32.5 parent: 31 + - uid: 10150 + components: + - type: Transform + pos: -29.5,1.5 + parent: 31 - uid: 10448 components: - type: Transform @@ -61867,17 +61265,23 @@ entities: - type: Transform pos: -7.5,24.5 parent: 31 - - uid: 11228 + - uid: 11231 components: - type: Transform rot: -1.5707963267948966 rad - pos: -28.5,-9.5 + pos: -28.5,-11.5 parent: 31 - - uid: 11231 + - uid: 12080 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-11.5 + rot: 3.141592653589793 rad + pos: 52.5,-26.5 + parent: 31 + - uid: 12081 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-22.5 parent: 31 - proto: RandomVendingDrinks entities: @@ -61938,342 +61342,264 @@ entities: - type: Transform pos: 42.5,20.5 parent: 31 - - uid: 4326 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,3.5 - parent: 31 - - uid: 4404 - components: - - type: Transform - pos: 64.5,11.5 - parent: 31 - uid: 5310 components: - type: Transform - pos: 50.5,10.5 - parent: 31 - - uid: 6248 - components: - - type: Transform - pos: 46.5,14.5 - parent: 31 - - uid: 6337 - components: - - type: Transform - pos: 48.5,14.5 - parent: 31 - - uid: 6341 - components: - - type: Transform - pos: 49.5,14.5 - parent: 31 - - uid: 6357 - components: - - type: Transform - pos: 47.5,14.5 - parent: 31 - - uid: 6361 - components: - - type: Transform - pos: 50.5,14.5 - parent: 31 - - uid: 6378 - components: - - type: Transform - pos: 46.5,10.5 - parent: 31 - - uid: 6382 - components: - - type: Transform - pos: 47.5,10.5 - parent: 31 - - uid: 6443 - components: - - type: Transform - pos: 48.5,10.5 - parent: 31 - - uid: 6628 - components: - - type: Transform - pos: 49.5,10.5 - parent: 31 - - uid: 6767 - components: - - type: Transform - pos: 63.5,11.5 - parent: 31 - - uid: 7214 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-5.5 - parent: 31 - - uid: 7222 - components: - - type: Transform - pos: 34.5,20.5 - parent: 31 - - uid: 7277 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,-5.5 + pos: 50.5,10.5 parent: 31 - - uid: 7296 + - uid: 6248 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 68.5,-4.5 + pos: 46.5,14.5 parent: 31 - - uid: 7298 + - uid: 6337 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-4.5 + pos: 48.5,14.5 parent: 31 - - uid: 8158 + - uid: 6341 components: - type: Transform - pos: 61.5,6.5 + pos: 49.5,14.5 parent: 31 - - uid: 8949 + - uid: 6357 components: - type: Transform - pos: -10.5,19.5 + pos: 47.5,14.5 parent: 31 - - uid: 9001 + - uid: 6361 components: - type: Transform - pos: -10.5,21.5 + pos: 50.5,14.5 parent: 31 - - uid: 9038 + - uid: 6378 components: - type: Transform - pos: 46.5,20.5 + pos: 46.5,10.5 parent: 31 - - uid: 9549 + - uid: 6382 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,-4.5 + pos: 47.5,10.5 parent: 31 - - uid: 9550 + - uid: 6443 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 64.5,-5.5 + pos: 48.5,10.5 parent: 31 - - uid: 9551 + - uid: 6628 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,-5.5 + pos: 49.5,10.5 parent: 31 - - uid: 9552 + - uid: 7222 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,-4.5 + pos: 34.5,20.5 parent: 31 - - uid: 9554 + - uid: 8949 components: - type: Transform - pos: 61.5,4.5 + pos: -10.5,19.5 parent: 31 - - uid: 9555 + - uid: 9001 components: - type: Transform - pos: 61.5,0.5 + pos: -10.5,21.5 parent: 31 - - uid: 9563 + - uid: 9038 components: - type: Transform - pos: 61.5,2.5 + pos: 46.5,20.5 parent: 31 - - uid: 9573 + - uid: 11094 components: - type: Transform - pos: 61.5,1.5 + pos: 45.5,12.5 parent: 31 - - uid: 9735 + - uid: 11096 components: - type: Transform - pos: 61.5,3.5 + pos: 45.5,13.5 parent: 31 - - uid: 9746 + - uid: 11097 components: - type: Transform - pos: 58.5,0.5 + pos: 45.5,11.5 parent: 31 - - uid: 9863 +- proto: ReinforcedUraniumWindow + entities: + - uid: 516 components: - type: Transform - pos: 58.5,4.5 + pos: 58.5,6.5 parent: 31 - - uid: 9926 + - uid: 6951 components: - type: Transform - pos: 58.5,3.5 + pos: 61.5,6.5 parent: 31 - - uid: 10810 + - uid: 7899 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 58.5,2.5 + rot: 1.5707963267948966 rad + pos: 70.5,11.5 parent: 31 - - uid: 11094 + - uid: 7900 components: - type: Transform - pos: 45.5,12.5 + rot: 1.5707963267948966 rad + pos: 67.5,-4.5 parent: 31 - - uid: 11096 + - uid: 7901 components: - type: Transform - pos: 45.5,13.5 + rot: 1.5707963267948966 rad + pos: 68.5,-4.5 parent: 31 - - uid: 11097 + - uid: 7911 components: - type: Transform - pos: 45.5,11.5 + rot: 1.5707963267948966 rad + pos: 67.5,11.5 parent: 31 - - uid: 11141 + - uid: 7912 components: - type: Transform - pos: 58.5,6.5 + rot: 1.5707963267948966 rad + pos: 66.5,11.5 parent: 31 - - uid: 11146 + - uid: 7948 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,-1.5 + pos: 61.5,3.5 parent: 31 - - uid: 11191 + - uid: 8021 components: - type: Transform rot: 1.5707963267948966 rad - pos: 63.5,12.5 + pos: 63.5,11.5 parent: 31 - - uid: 11778 + - uid: 8024 components: - type: Transform rot: 1.5707963267948966 rad - pos: 72.5,8.5 + pos: 64.5,11.5 parent: 31 - - uid: 11779 + - uid: 8033 components: - type: Transform rot: 1.5707963267948966 rad - pos: 72.5,7.5 + pos: 61.5,1.5 parent: 31 - - uid: 11780 + - uid: 8034 components: - type: Transform rot: 1.5707963267948966 rad - pos: 72.5,6.5 + pos: 58.5,3.5 parent: 31 - - uid: 11848 + - uid: 8038 components: - type: Transform rot: 1.5707963267948966 rad - pos: 64.5,12.5 + pos: 61.5,2.5 parent: 31 - - uid: 11849 + - uid: 8056 components: - type: Transform rot: 1.5707963267948966 rad - pos: 66.5,12.5 + pos: 58.5,4.5 parent: 31 - - uid: 11850 + - uid: 8085 components: - type: Transform rot: 1.5707963267948966 rad - pos: 66.5,11.5 + pos: 61.5,4.5 parent: 31 - - uid: 11851 + - uid: 8086 components: - type: Transform rot: 1.5707963267948966 rad - pos: 67.5,11.5 + pos: 69.5,11.5 parent: 31 - - uid: 11852 + - uid: 8158 components: - type: Transform rot: 1.5707963267948966 rad - pos: 67.5,12.5 + pos: 72.5,7.5 parent: 31 - - uid: 11853 + - uid: 8159 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,12.5 + pos: 72.5,6.5 parent: 31 - - uid: 11854 + - uid: 8199 components: - type: Transform rot: 1.5707963267948966 rad - pos: 70.5,12.5 + pos: 72.5,8.5 parent: 31 - - uid: 11855 + - uid: 8209 components: - type: Transform rot: 1.5707963267948966 rad - pos: 70.5,11.5 + pos: 64.5,-4.5 parent: 31 - - uid: 11856 + - uid: 8232 components: - type: Transform rot: 1.5707963267948966 rad - pos: 69.5,11.5 + pos: 63.5,-4.5 parent: 31 - - uid: 11857 + - uid: 8349 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,8.5 + pos: 71.5,3.5 parent: 31 - - uid: 11858 + - uid: 8370 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,7.5 + pos: 69.5,-1.5 parent: 31 - - uid: 11859 + - uid: 8390 components: - type: Transform rot: 1.5707963267948966 rad - pos: 77.5,7.5 + pos: 77.5,5.5 parent: 31 - - uid: 11860 + - uid: 8422 components: - type: Transform rot: 1.5707963267948966 rad pos: 77.5,6.5 parent: 31 - - uid: 11861 + - uid: 8466 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,6.5 + pos: 77.5,7.5 parent: 31 - - uid: 11862 + - uid: 8819 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,5.5 + pos: 61.5,0.5 parent: 31 - - uid: 11863 + - uid: 8834 components: - type: Transform rot: 1.5707963267948966 rad - pos: 77.5,5.5 + pos: 58.5,0.5 parent: 31 - - uid: 11864 + - uid: 8836 components: - type: Transform rot: 1.5707963267948966 rad - pos: 78.5,4.5 + pos: 58.5,2.5 parent: 31 - proto: ReinforcedWindow entities: @@ -62357,6 +61683,12 @@ entities: - type: Transform pos: -39.5,19.5 parent: 31 + - uid: 550 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,34.5 + parent: 31 - uid: 572 components: - type: Transform @@ -62397,6 +61729,18 @@ entities: - type: Transform pos: -41.5,-0.5 parent: 31 + - uid: 761 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,7.5 + parent: 31 + - uid: 766 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,8.5 + parent: 31 - uid: 785 components: - type: Transform @@ -62412,6 +61756,18 @@ entities: - type: Transform pos: 52.5,8.5 parent: 31 + - uid: 831 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,36.5 + parent: 31 + - uid: 870 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,37.5 + parent: 31 - uid: 871 components: - type: Transform @@ -62444,16 +61800,6 @@ entities: - type: Transform pos: -43.5,3.5 parent: 31 - - uid: 1013 - components: - - type: Transform - pos: 4.5,26.5 - parent: 31 - - uid: 1051 - components: - - type: Transform - pos: -1.5,9.5 - parent: 31 - uid: 1254 components: - type: Transform @@ -62469,11 +61815,6 @@ entities: - type: Transform pos: -2.5,9.5 parent: 31 - - uid: 1381 - components: - - type: Transform - pos: 2.5,26.5 - parent: 31 - uid: 1389 components: - type: Transform @@ -62484,82 +61825,17 @@ entities: - type: Transform pos: -1.5,27.5 parent: 31 - - uid: 1391 - components: - - type: Transform - pos: 4.5,22.5 - parent: 31 - - uid: 1392 - components: - - type: Transform - pos: 10.5,29.5 - parent: 31 - - uid: 1394 - components: - - type: Transform - pos: 9.5,31.5 - parent: 31 - - uid: 1397 - components: - - type: Transform - pos: 7.5,33.5 - parent: 31 - - uid: 1398 - components: - - type: Transform - pos: 6.5,33.5 - parent: 31 - - uid: 1399 - components: - - type: Transform - pos: 5.5,33.5 - parent: 31 - - uid: 1400 - components: - - type: Transform - pos: 4.5,33.5 - parent: 31 - - uid: 1401 - components: - - type: Transform - pos: 3.5,33.5 - parent: 31 - - uid: 1402 - components: - - type: Transform - pos: 2.5,33.5 - parent: 31 - - uid: 1403 - components: - - type: Transform - pos: 1.5,33.5 - parent: 31 - - uid: 1404 - components: - - type: Transform - pos: 0.5,33.5 - parent: 31 - - uid: 1405 - components: - - type: Transform - pos: -0.5,33.5 - parent: 31 - - uid: 1406 - components: - - type: Transform - pos: 10.5,31.5 - parent: 31 - - uid: 1410 - components: - - type: Transform - pos: -3.5,9.5 - parent: 31 - uid: 1439 components: - type: Transform rot: -1.5707963267948966 rad pos: -24.5,-17.5 parent: 31 + - uid: 1445 + components: + - type: Transform + pos: -37.5,-32.5 + parent: 31 - uid: 1446 components: - type: Transform @@ -62611,11 +61887,6 @@ entities: - type: Transform pos: 6.5,19.5 parent: 31 - - uid: 1530 - components: - - type: Transform - pos: 41.5,-22.5 - parent: 31 - uid: 1582 components: - type: Transform @@ -62626,36 +61897,11 @@ entities: - type: Transform pos: 30.5,23.5 parent: 31 - - uid: 1595 - components: - - type: Transform - pos: 15.5,20.5 - parent: 31 - - uid: 1596 - components: - - type: Transform - pos: 15.5,21.5 - parent: 31 - - uid: 1657 - components: - - type: Transform - pos: -15.5,26.5 - parent: 31 - uid: 1660 components: - type: Transform pos: -18.5,26.5 parent: 31 - - uid: 1736 - components: - - type: Transform - pos: 40.5,-26.5 - parent: 31 - - uid: 1763 - components: - - type: Transform - pos: 40.5,-22.5 - parent: 31 - uid: 1765 components: - type: Transform @@ -62666,11 +61912,6 @@ entities: - type: Transform pos: -42.5,11.5 parent: 31 - - uid: 1809 - components: - - type: Transform - pos: 41.5,-26.5 - parent: 31 - uid: 1919 components: - type: Transform @@ -62707,11 +61948,6 @@ entities: - type: Transform pos: -16.5,6.5 parent: 31 - - uid: 2056 - components: - - type: Transform - pos: -12.5,26.5 - parent: 31 - uid: 2096 components: - type: Transform @@ -62722,16 +61958,6 @@ entities: - type: Transform pos: -7.5,9.5 parent: 31 - - uid: 2098 - components: - - type: Transform - pos: -9.5,8.5 - parent: 31 - - uid: 2117 - components: - - type: Transform - pos: -11.5,8.5 - parent: 31 - uid: 2119 components: - type: Transform @@ -62758,6 +61984,16 @@ entities: - type: Transform pos: 28.5,-13.5 parent: 31 + - uid: 2490 + components: + - type: Transform + pos: 50.5,-25.5 + parent: 31 + - uid: 2597 + components: + - type: Transform + pos: 48.5,-25.5 + parent: 31 - uid: 2855 components: - type: Transform @@ -62769,33 +62005,32 @@ entities: - type: Transform pos: 36.5,18.5 parent: 31 + - uid: 3243 + components: + - type: Transform + pos: 4.5,27.5 + parent: 31 - uid: 3421 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-30.5 parent: 31 - - uid: 3427 + - uid: 3480 components: - type: Transform - pos: -9.5,26.5 + pos: 4.5,22.5 parent: 31 - uid: 3766 components: - type: Transform pos: 59.5,11.5 parent: 31 - - uid: 3836 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,13.5 - parent: 31 - - uid: 3911 + - uid: 3852 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,12.5 + rot: -1.5707963267948966 rad + pos: 5.5,35.5 parent: 31 - uid: 3923 components: @@ -62807,25 +62042,33 @@ entities: - type: Transform pos: -42.5,3.5 parent: 31 - - uid: 3972 + - uid: 3978 components: - type: Transform - pos: -9.5,7.5 + pos: 28.5,-12.5 parent: 31 - - uid: 3978 + - uid: 3983 components: - type: Transform - pos: 28.5,-12.5 + rot: -1.5707963267948966 rad + pos: -1.5,34.5 parent: 31 - uid: 4014 components: - type: Transform pos: -43.5,-0.5 parent: 31 - - uid: 4098 + - uid: 4031 components: - type: Transform - pos: -11.5,7.5 + rot: -1.5707963267948966 rad + pos: 3.5,36.5 + parent: 31 + - uid: 4083 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,28.5 parent: 31 - uid: 4113 components: @@ -62835,7 +62078,8 @@ entities: - uid: 4116 components: - type: Transform - pos: -3.5,6.5 + rot: -1.5707963267948966 rad + pos: -0.5,36.5 parent: 31 - uid: 4282 components: @@ -62847,136 +62091,70 @@ entities: - type: Transform pos: 17.5,20.5 parent: 31 - - uid: 4375 - components: - - type: Transform - pos: 51.5,-17.5 - parent: 31 - - uid: 4398 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 54.5,3.5 - parent: 31 - - uid: 4515 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,-26.5 - parent: 31 - - uid: 4516 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,-24.5 - parent: 31 - - uid: 4522 - components: - - type: Transform - pos: 34.5,-13.5 - parent: 31 - - uid: 4577 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,-22.5 - parent: 31 - - uid: 4578 + - uid: 4326 components: - type: Transform rot: -1.5707963267948966 rad - pos: 37.5,-22.5 + pos: -4.5,34.5 parent: 31 - - uid: 4583 + - uid: 4381 components: - type: Transform rot: -1.5707963267948966 rad - pos: 36.5,-26.5 - parent: 31 - - uid: 4627 - components: - - type: Transform - pos: 45.5,-29.5 - parent: 31 - - uid: 4628 - components: - - type: Transform - pos: 44.5,-29.5 - parent: 31 - - uid: 4629 - components: - - type: Transform - pos: 44.5,-28.5 - parent: 31 - - uid: 4631 - components: - - type: Transform - pos: 46.5,-19.5 - parent: 31 - - uid: 4632 - components: - - type: Transform - pos: 44.5,-21.5 - parent: 31 - - uid: 4634 - components: - - type: Transform - pos: 46.5,-29.5 - parent: 31 - - uid: 4635 - components: - - type: Transform - pos: 44.5,-27.5 + pos: -1.5,33.5 parent: 31 - - uid: 4656 + - uid: 4398 components: - type: Transform - pos: 31.5,-23.5 + rot: 3.141592653589793 rad + pos: 54.5,3.5 parent: 31 - - uid: 4663 + - uid: 4404 components: - type: Transform - pos: 31.5,-25.5 + pos: -15.5,26.5 parent: 31 - - uid: 4673 + - uid: 4522 components: - type: Transform - pos: 56.5,-26.5 + pos: 34.5,-13.5 parent: 31 - - uid: 4676 + - uid: 4715 components: - type: Transform - pos: 47.5,-18.5 + pos: -37.5,-29.5 parent: 31 - - uid: 4677 + - uid: 4717 components: - type: Transform - pos: 51.5,-18.5 + pos: 2.5,27.5 parent: 31 - - uid: 4679 + - uid: 4819 components: - type: Transform - pos: 50.5,-17.5 + pos: 12.5,-32.5 parent: 31 - - uid: 4680 + - uid: 4820 components: - type: Transform - pos: 49.5,-17.5 + pos: -37.5,-28.5 parent: 31 - - uid: 4681 + - uid: 4883 components: - type: Transform - pos: 48.5,-17.5 + pos: -0.5,6.5 parent: 31 - - uid: 4819 + - uid: 4897 components: - type: Transform - pos: 12.5,-32.5 + rot: 1.5707963267948966 rad + pos: -7.5,30.5 parent: 31 - - uid: 4883 + - uid: 4924 components: - type: Transform - pos: -0.5,6.5 + rot: 1.5707963267948966 rad + pos: -7.5,29.5 parent: 31 - uid: 4930 components: @@ -63014,6 +62192,12 @@ entities: - type: Transform pos: 13.5,0.5 parent: 31 + - uid: 5103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,29.5 + parent: 31 - uid: 5113 components: - type: Transform @@ -63034,11 +62218,11 @@ entities: - type: Transform pos: -28.5,18.5 parent: 31 - - uid: 5766 + - uid: 5940 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,14.5 + pos: -9.5,37.5 parent: 31 - uid: 5988 components: @@ -63182,6 +62366,12 @@ entities: - type: Transform pos: 34.5,18.5 parent: 31 + - uid: 6907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,37.5 + parent: 31 - uid: 6929 components: - type: Transform @@ -63194,157 +62384,27 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-35.5 parent: 31 - - uid: 6972 - components: - - type: Transform - pos: 47.5,-17.5 - parent: 31 - - uid: 6973 - components: - - type: Transform - pos: 47.5,-30.5 - parent: 31 - - uid: 6974 - components: - - type: Transform - pos: 47.5,-31.5 - parent: 31 - - uid: 6975 - components: - - type: Transform - pos: 51.5,-31.5 - parent: 31 - - uid: 6976 - components: - - type: Transform - pos: 51.5,-30.5 - parent: 31 - - uid: 6977 - components: - - type: Transform - pos: 52.5,-29.5 - parent: 31 - - uid: 6978 - components: - - type: Transform - pos: 54.5,-27.5 - parent: 31 - - uid: 6979 - components: - - type: Transform - pos: 54.5,-21.5 - parent: 31 - - uid: 6980 - components: - - type: Transform - pos: 52.5,-19.5 - parent: 31 - - uid: 6988 - components: - - type: Transform - pos: 55.5,-22.5 - parent: 31 - - uid: 6989 - components: - - type: Transform - pos: 56.5,-22.5 - parent: 31 - - uid: 6991 - components: - - type: Transform - pos: 55.5,-26.5 - parent: 31 - - uid: 6996 - components: - - type: Transform - pos: 56.5,-23.5 - parent: 31 - - uid: 6997 - components: - - type: Transform - pos: 56.5,-25.5 - parent: 31 - - uid: 6998 - components: - - type: Transform - pos: 56.5,-24.5 - parent: 31 - - uid: 6999 - components: - - type: Transform - pos: 53.5,-29.5 - parent: 31 - - uid: 7000 - components: - - type: Transform - pos: 54.5,-29.5 - parent: 31 - - uid: 7001 - components: - - type: Transform - pos: 54.5,-28.5 - parent: 31 - - uid: 7002 - components: - - type: Transform - pos: 53.5,-19.5 - parent: 31 - - uid: 7003 - components: - - type: Transform - pos: 54.5,-19.5 - parent: 31 - - uid: 7004 - components: - - type: Transform - pos: 54.5,-20.5 - parent: 31 - - uid: 7005 - components: - - type: Transform - pos: 45.5,-19.5 - parent: 31 - - uid: 7006 - components: - - type: Transform - pos: 44.5,-19.5 - parent: 31 - - uid: 7007 - components: - - type: Transform - pos: 44.5,-20.5 - parent: 31 - - uid: 7008 - components: - - type: Transform - pos: 42.5,-26.5 - parent: 31 - - uid: 7009 + - uid: 7071 components: - type: Transform - pos: 42.5,-22.5 + pos: 60.5,11.5 parent: 31 - - uid: 7029 + - uid: 7118 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,-26.5 + pos: -34.5,-22.5 parent: 31 - - uid: 7069 + - uid: 7149 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,-22.5 - parent: 31 - - uid: 7071 - components: - - type: Transform - pos: 60.5,11.5 + pos: 5.5,33.5 parent: 31 - - uid: 7118 + - uid: 7187 components: - type: Transform - pos: -34.5,-22.5 + rot: 1.5707963267948966 rad + pos: -8.5,33.5 parent: 31 - uid: 7242 components: @@ -63416,6 +62476,12 @@ entities: - type: Transform pos: -39.5,12.5 parent: 31 + - uid: 7690 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,37.5 + parent: 31 - uid: 7749 components: - type: Transform @@ -63446,26 +62512,22 @@ entities: - type: Transform pos: -6.5,-33.5 parent: 31 - - uid: 7903 + - uid: 7902 components: - type: Transform - pos: 34.5,-14.5 + rot: -1.5707963267948966 rad + pos: -1.5,35.5 parent: 31 - - uid: 7946 + - uid: 7903 components: - type: Transform - pos: 48.5,-31.5 + pos: 34.5,-14.5 parent: 31 - uid: 7963 components: - type: Transform pos: -42.5,-8.5 parent: 31 - - uid: 8028 - components: - - type: Transform - pos: 50.5,-31.5 - parent: 31 - uid: 8090 components: - type: Transform @@ -63478,11 +62540,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-31.5 parent: 31 - - uid: 8203 - components: - - type: Transform - pos: 49.5,-31.5 - parent: 31 - uid: 8204 components: - type: Transform @@ -63558,11 +62615,6 @@ entities: - type: Transform pos: -14.5,-33.5 parent: 31 - - uid: 8531 - components: - - type: Transform - pos: -37.5,-28.5 - parent: 31 - uid: 8533 components: - type: Transform @@ -63589,6 +62641,12 @@ entities: - type: Transform pos: -37.5,-23.5 parent: 31 + - uid: 8804 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,36.5 + parent: 31 - uid: 8935 components: - type: Transform @@ -63874,6 +62932,12 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,28.5 parent: 31 + - uid: 10115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,33.5 + parent: 31 - uid: 10121 components: - type: Transform @@ -63955,20 +63019,21 @@ entities: rot: 3.141592653589793 rad pos: 54.5,16.5 parent: 31 - - uid: 11130 + - uid: 11160 components: - type: Transform - pos: -7.5,30.5 + rot: 1.5707963267948966 rad + pos: -4.5,35.5 parent: 31 - - uid: 11131 + - uid: 11179 components: - type: Transform - pos: -6.5,30.5 + pos: -9.5,26.5 parent: 31 - - uid: 11132 + - uid: 11183 components: - type: Transform - pos: -5.5,30.5 + pos: -12.5,26.5 parent: 31 - uid: 11299 components: @@ -64235,17 +63300,16 @@ entities: parent: 31 - proto: ReinforcedWindowDiagonal entities: - - uid: 809 + - uid: 3244 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,-35.5 + pos: -1.5,36.5 parent: 31 - - uid: 11256 + - uid: 5127 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,-33.5 + rot: -1.5707963267948966 rad + pos: 5.5,36.5 parent: 31 - proto: ResearchAndDevelopmentServer entities: @@ -64254,6 +63318,14 @@ entities: - type: Transform pos: -1.5,-19.5 parent: 31 +- proto: RevolverCapGun + entities: + - uid: 5709 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.440866,-11.49221 + parent: 31 - proto: RiceSeeds entities: - uid: 9676 @@ -64302,6 +63374,13 @@ entities: - type: Transform pos: -5.5,-28.5 parent: 31 +- proto: Saw + entities: + - uid: 11905 + components: + - type: Transform + pos: -20.077808,-10.445335 + parent: 31 - proto: ScalpelLaser entities: - uid: 9095 @@ -64312,6 +63391,12 @@ entities: parent: 31 - proto: Screwdriver entities: + - uid: 6986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.694298,-23.716614 + parent: 31 - uid: 10899 components: - type: Transform @@ -64339,7 +63424,7 @@ entities: parent: 31 - proto: SeedExtractor entities: - - uid: 4125 + - uid: 10447 components: - type: Transform pos: -18.5,1.5 @@ -64379,6 +63464,12 @@ entities: - type: Transform pos: 29.605116,0.5307963 parent: 31 + - uid: 1412 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.63822,-11.5152235 + parent: 31 - uid: 1484 components: - type: Transform @@ -64389,6 +63480,11 @@ entities: - type: Transform pos: -11.562502,-21.488012 parent: 31 + - uid: 3770 + components: + - type: Transform + pos: -36.501347,-24.525356 + parent: 31 - uid: 4733 components: - type: Transform @@ -64418,13 +63514,6 @@ entities: - type: Transform pos: -6.54687,-32.500237 parent: 31 - - uid: 7859 - components: - - type: Transform - parent: 7853 - - type: Physics - canCollide: False - - type: InsideEntityStorage - proto: SheetPlasteel entities: - uid: 738 @@ -64447,6 +63536,11 @@ entities: - type: Transform pos: 50.498375,5.494252 parent: 31 + - uid: 3800 + components: + - type: Transform + pos: -36.488842,-25.488525 + parent: 31 - uid: 4123 components: - type: Transform @@ -64476,6 +63570,12 @@ entities: - type: Transform pos: 19.62285,7.50161 parent: 31 + - uid: 11153 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.45072,-11.4214735 + parent: 31 - proto: SheetSteel entities: - uid: 432 @@ -64513,11 +63613,22 @@ entities: - type: Transform pos: -11.562502,-22.461464 parent: 31 + - uid: 1884 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.29447,-11.5152235 + parent: 31 - uid: 2159 components: - type: Transform pos: 18.507324,7.4999294 parent: 31 + - uid: 3799 + components: + - type: Transform + pos: -36.476334,-25.000687 + parent: 31 - uid: 4214 components: - type: Transform @@ -64542,31 +63653,17 @@ entities: parent: 31 - proto: SheetUranium entities: - - uid: 40 - components: - - type: Transform - pos: 46.313587,9.561768 - parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 - - uid: 6820 - components: - - type: Transform - pos: 46.751087,9.546143 - parent: 31 - - type: Physics - angularDamping: 0 - linearDamping: 0 - - uid: 12429 + - uid: 12540 components: - type: Transform - pos: 46.5,9.5 + pos: 56.396378,0.48042822 parent: 31 - - uid: 12540 +- proto: Shovel + entities: + - uid: 10474 components: - type: Transform - pos: 56.396378,0.48042822 + pos: -22.51185,-0.41375875 parent: 31 - proto: ShuttersNormal entities: @@ -64579,22 +63676,24 @@ entities: invokeCounter: 2 links: - 5132 - - uid: 11118 + - uid: 3399 components: - type: Transform - pos: -7.5,26.5 + pos: -23.5,-6.5 parent: 31 - type: DeviceLinkSink links: - - 11284 - - uid: 11119 + - 8715 + - 1178 + - uid: 3791 components: - type: Transform - pos: -6.5,26.5 + pos: -23.5,-5.5 parent: 31 - type: DeviceLinkSink links: - - 11284 + - 8715 + - 1178 - proto: ShuttersNormalOpen entities: - uid: 1475 @@ -64843,26 +63942,45 @@ entities: - type: DeviceLinkSink links: - 9957 - - uid: 11905 + - uid: 12125 components: - type: Transform rot: -1.5707963267948966 rad - pos: 61.5,6.5 + pos: 54.5,3.5 parent: 31 - type: DeviceLinkSink links: - 9957 - - uid: 12125 +- proto: SignAi + entities: + - uid: 4578 components: - type: Transform rot: -1.5707963267948966 rad - pos: 54.5,3.5 + pos: 52.5,-12.5 + parent: 31 + - uid: 12981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-1.5 + parent: 31 + - uid: 12986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,-25.5 parent: 31 - - type: DeviceLinkSink - links: - - 9957 - proto: SignalButton entities: + - uid: 1234 + components: + - type: Transform + pos: 50.5,-23.5 + parent: 31 + - type: DeviceLinkSource + linkedPorts: + 7010: [] - uid: 2515 components: - type: Transform @@ -64921,6 +64039,18 @@ entities: - Pressed: Toggle 8770: - Pressed: Toggle + - uid: 10155 + components: + - type: MetaData + name: Light Button + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,1.5 + parent: 31 + - type: DeviceLinkSource + linkedPorts: + 9685: + - Pressed: Toggle - uid: 10325 components: - type: Transform @@ -64954,20 +64084,20 @@ entities: - Pressed: Toggle 2137: - Pressed: Toggle - - uid: 11284 +- proto: SignalButtonDirectional + entities: + - uid: 1178 components: - type: Transform rot: 1.5707963267948966 rad - pos: -8.5,28.5 + pos: -23.5,-7.5 parent: 31 - type: DeviceLinkSource linkedPorts: - 11119: + 3399: - Pressed: Toggle - 11118: + 3791: - Pressed: Toggle -- proto: SignalButtonDirectional - entities: - uid: 11380 components: - type: MetaData @@ -65201,6 +64331,14 @@ entities: - type: Transform pos: 1.5,2.5 parent: 31 +- proto: SignBarbershop + entities: + - uid: 11780 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-13.5 + parent: 31 - proto: SignBiohazardMed entities: - uid: 8895 @@ -65257,15 +64395,17 @@ entities: parent: 31 - proto: SignConference entities: - - uid: 1524 + - uid: 7330 components: - type: Transform - pos: 1.5,26.5 + pos: 1.5,23.5 parent: 31 - - uid: 8704 +- proto: SignConspiracyBoard + entities: + - uid: 7561 components: - type: Transform - pos: -33.5,-25.5 + pos: -2.5,15.5 parent: 31 - proto: SignCryogenicsMed entities: @@ -65276,6 +64416,12 @@ entities: parent: 31 - proto: SignDanger entities: + - uid: 8071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 61.5,0.5 + parent: 31 - uid: 12070 components: - type: Transform @@ -65286,11 +64432,6 @@ entities: - type: Transform pos: 69.5,1.5 parent: 31 - - uid: 12096 - components: - - type: Transform - pos: 61.5,0.5 - parent: 31 - proto: SignDangerMed entities: - uid: 4797 @@ -65304,6 +64445,14 @@ entities: rot: -1.5707963267948966 rad pos: 55.5,9.5 parent: 31 +- proto: SignDirectionalBar + entities: + - uid: 4953 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.502026,2.7012317 + parent: 31 - proto: SignDirectionalBridge entities: - uid: 157 @@ -65332,12 +64481,6 @@ entities: rot: 3.141592653589793 rad pos: -34.5,11.5 parent: 31 - - uid: 8917 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -26.499413,2.2858148 - parent: 31 - proto: SignDirectionalCryo entities: - uid: 9326 @@ -65348,10 +64491,10 @@ entities: parent: 31 - proto: SignDirectionalDorms entities: - - uid: 8915 + - uid: 2471 components: - type: Transform - pos: -26.5,2.5 + pos: -29.5,2.5 parent: 31 - proto: SignDirectionalEng entities: @@ -65389,21 +64532,6 @@ entities: rot: 1.5707963267948966 rad pos: -20.5,2.5 parent: 31 -- proto: SignDirectionalHydro - entities: - - uid: 8916 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.495642,2.7233148 - parent: 31 -- proto: SignDirectionalJanitor - entities: - - uid: 120 - components: - - type: Transform - pos: -22.49935,1.7157228 - parent: 31 - proto: SignDirectionalMed entities: - uid: 7491 @@ -65431,16 +64559,17 @@ entities: - type: Transform pos: 1.4985528,6.263013 parent: 31 - - uid: 10552 + - uid: 2681 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,-17.5 + rot: 1.5707963267948966 rad + pos: -29.50485,2.310225 parent: 31 - - uid: 10553 + - uid: 10552 components: - type: Transform - pos: -22.5,1.5 + rot: -1.5707963267948966 rad + pos: 0.5,-17.5 parent: 31 - proto: SignDirectionalSec entities: @@ -65456,12 +64585,6 @@ entities: rot: 1.5707963267948966 rad pos: -21.50213,6.729406 parent: 31 - - uid: 10272 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,15.5 - parent: 31 - uid: 10554 components: - type: Transform @@ -65524,13 +64647,6 @@ entities: - type: Transform pos: 8.5,-9.5 parent: 31 -- proto: SignGravity - entities: - - uid: 8148 - components: - - type: Transform - pos: 50.5,-1.5 - parent: 31 - proto: SignHydro1 entities: - uid: 10545 @@ -65540,11 +64656,11 @@ entities: parent: 31 - proto: SignJanitor entities: - - uid: 2749 + - uid: 2402 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,-13.5 + rot: -1.5707963267948966 rad + pos: -23.5,-8.5 parent: 31 - proto: SignLaserMed entities: @@ -65581,28 +64697,29 @@ entities: - type: Transform pos: 16.5,-14.5 parent: 31 -- proto: SignRadiation +- proto: SignNosmoking entities: - - uid: 9980 + - uid: 13063 components: - type: Transform - pos: 65.5,-5.5 - parent: 31 - - uid: 12068 - components: - - type: Transform - pos: 66.5,-5.5 + pos: -18.5,6.5 parent: 31 - - uid: 12069 +- proto: SignOpenOn2 + entities: + - uid: 13062 components: - type: Transform - pos: 78.5,3.5 + pos: -12.5,-13.5 parent: 31 - - uid: 12071 +- proto: SignPrivateProperty + entities: + - uid: 13047 components: - type: Transform - pos: 78.5,9.5 + pos: -36.5,16.5 parent: 31 +- proto: SignRadiation + entities: - uid: 12072 components: - type: Transform @@ -65635,45 +64752,54 @@ entities: - type: Transform pos: 54.5,0.5 parent: 31 - - uid: 9560 + - uid: 8032 components: - type: Transform - pos: 62.5,11.5 + rot: -1.5707963267948966 rad + pos: 58.5,0.5 parent: 31 - - uid: 9565 + - uid: 8036 components: - type: Transform - pos: 61.5,-5.5 + rot: 3.141592653589793 rad + pos: 58.5,3.5 parent: 31 - - uid: 9567 + - uid: 8037 components: - type: Transform - pos: 61.5,10.5 + rot: -1.5707963267948966 rad + pos: 61.5,1.5 parent: 31 - - uid: 12062 + - uid: 8835 components: - type: Transform + rot: 3.141592653589793 rad pos: 58.5,2.5 parent: 31 - - uid: 12063 + - uid: 8837 components: - type: Transform - pos: 58.5,0.5 + pos: 58.5,6.5 parent: 31 - - uid: 12064 + - uid: 8838 components: - type: Transform - pos: 58.5,3.5 + pos: 61.5,6.5 parent: 31 - - uid: 12066 + - uid: 9560 components: - type: Transform - pos: 58.5,6.5 + pos: 62.5,11.5 parent: 31 - - uid: 12067 + - uid: 9565 components: - type: Transform - pos: 61.5,6.5 + pos: 61.5,-5.5 + parent: 31 + - uid: 9567 + components: + - type: Transform + pos: 61.5,10.5 parent: 31 - proto: SignRobo entities: @@ -65762,11 +64888,11 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,26.5 parent: 31 - - uid: 2451 + - uid: 4612 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-6.5 + rot: -1.5707963267948966 rad + pos: -20.5,-6.5 parent: 31 - uid: 8411 components: @@ -65780,6 +64906,13 @@ entities: rot: 1.5707963267948966 rad pos: 21.5,-5.5 parent: 31 +- proto: SinkStemlessWater + entities: + - uid: 6974 + components: + - type: Transform + pos: -6.5,-11.5 + parent: 31 - proto: SinkWide entities: - uid: 4225 @@ -65865,6 +64998,11 @@ entities: - type: Transform pos: 42.5,5.5 parent: 31 + - uid: 7012 + components: + - type: Transform + pos: 43.5,-25.5 + parent: 31 - uid: 8327 components: - type: MetaData @@ -65899,19 +65037,19 @@ entities: - type: Transform pos: 39.5,5.5 parent: 31 -- proto: SoapNT +- proto: SMESMachineCircuitboard entities: - - uid: 1045 + - uid: 7019 components: - type: Transform - pos: 12.820141,26.438648 + pos: 51.57734,-29.484472 parent: 31 -- proto: SoapOmega +- proto: SoapNT entities: - - uid: 10584 + - uid: 1045 components: - type: Transform - pos: -6.517076,-41.294003 + pos: 12.820141,26.438648 parent: 31 - proto: soda_dispenser entities: @@ -66682,13 +65820,6 @@ entities: - type: Transform pos: 35.784645,-15.468033 parent: 31 -- proto: SpaceCash500 - entities: - - uid: 6892 - components: - - type: Transform - pos: -6.962518,29.44575 - parent: 31 - proto: SpacemenFigureSpawner entities: - uid: 10822 @@ -66696,40 +65827,13 @@ entities: - type: Transform pos: 12.5,-31.5 parent: 31 -- proto: SpawnMobAlexander - entities: - - uid: 9917 - components: - - type: Transform - pos: -13.5,0.5 - parent: 31 -- proto: SpawnMobBandito - entities: - - uid: 2192 - components: - - type: Transform - pos: -2.5,-28.5 - parent: 31 -- proto: SpawnMobCat - entities: - - uid: 6860 - components: - - type: Transform - pos: 21.5,-9.5 - parent: 31 -- proto: SpawnMobCatFloppa - entities: - - uid: 3678 - components: - - type: Transform - pos: 49.5,-27.5 - parent: 31 -- proto: SpawnMobCatSpace +- proto: SpareIdCabinetFilled entities: - - uid: 11689 + - uid: 10707 components: - type: Transform - pos: -0.5,-35.5 + rot: -1.5707963267948966 rad + pos: 9.5,23.5 parent: 31 - proto: SpawnMobCorgi entities: @@ -66738,13 +65842,6 @@ entities: - type: Transform pos: 9.5,20.5 parent: 31 -- proto: SpawnMobCrabAtmos - entities: - - uid: 11418 - components: - - type: Transform - pos: 33.5,12.5 - parent: 31 - proto: SpawnMobFoxRenault entities: - uid: 4294 @@ -66752,13 +65849,6 @@ entities: - type: Transform pos: 8.5,26.5 parent: 31 -- proto: SpawnMobMcGriff - entities: - - uid: 37 - components: - - type: Transform - pos: -1.5,8.5 - parent: 31 - proto: SpawnMobMonkeyPunpun entities: - uid: 10044 @@ -66766,56 +65856,20 @@ entities: - type: Transform pos: -5.5,-5.5 parent: 31 -- proto: SpawnMobMouse - entities: - - uid: 7899 - components: - - type: Transform - pos: -8.5,-11.5 - parent: 31 - - uid: 7900 - components: - - type: Transform - pos: -20.5,13.5 - parent: 31 - - uid: 7901 - components: - - type: Transform - pos: -2.5,20.5 - parent: 31 - - uid: 7902 - components: - - type: Transform - pos: -7.5,-6.5 - parent: 31 -- proto: SpawnMobPossumMorty - entities: - - uid: 7114 - components: - - type: Transform - pos: 12.5,-15.5 - parent: 31 -- proto: SpawnMobRaccoonMorticia +- proto: SpawnMobParrot entities: - - uid: 11385 + - uid: 12673 components: - type: Transform - pos: 28.5,8.5 + pos: 49.5,4.5 parent: 31 - proto: SpawnMobShiva entities: - - uid: 8304 + - uid: 9010 components: - type: Transform pos: -9.5,19.5 parent: 31 -- proto: SpawnMobSlothPaperwork - entities: - - uid: 8863 - components: - - type: Transform - pos: 8.5,-29.5 - parent: 31 - proto: SpawnMobSmile entities: - uid: 6 @@ -66863,22 +65917,15 @@ entities: parent: 31 - proto: SpawnPointBotanist entities: - - uid: 1103 - components: - - type: Transform - pos: -16.5,-0.5 - parent: 31 - - uid: 10827 + - uid: 8710 components: - type: Transform pos: -20.5,-0.5 parent: 31 -- proto: SpawnPointBrigmedic - entities: - - uid: 11049 + - uid: 10577 components: - type: Transform - pos: 0.5,13.5 + pos: -21.5,-0.5 parent: 31 - proto: SpawnPointCaptain entities: @@ -66941,10 +65988,20 @@ entities: parent: 31 - proto: SpawnPointClown entities: - - uid: 7354 + - uid: 8728 components: - type: Transform - pos: -18.5,-7.5 + pos: -19.5,-12.5 + parent: 31 + - uid: 12231 + components: + - type: Transform + pos: -19.5,-11.5 + parent: 31 + - uid: 13058 + components: + - type: Transform + pos: -18.5,-12.5 parent: 31 - proto: SpawnPointDetective entities: @@ -66976,10 +66033,10 @@ entities: parent: 31 - proto: SpawnPointJanitor entities: - - uid: 1320 + - uid: 8277 components: - type: Transform - pos: -18.5,-11.5 + pos: -21.5,-6.5 parent: 31 - proto: SpawnPointLatejoin entities: @@ -67031,17 +66088,17 @@ entities: parent: 31 - proto: SpawnPointMime entities: - - uid: 7832 + - uid: 12463 components: - type: Transform - pos: -18.5,-5.5 + pos: -18.5,-11.5 parent: 31 - proto: SpawnPointMusician entities: - - uid: 1603 + - uid: 12429 components: - type: Transform - pos: -18.5,-6.5 + pos: -11.5,-10.5 parent: 31 - proto: SpawnPointObserver entities: @@ -67069,22 +66126,10 @@ entities: - type: Transform pos: -27.5,9.5 parent: 31 - - uid: 7166 - components: - - type: Transform - pos: -25.5,-7.5 - parent: 31 - - uid: 10141 - components: - - type: Transform - pos: -22.5,-5.5 - parent: 31 -- proto: SpawnPointPrisoner - entities: - - uid: 1631 + - uid: 10156 components: - type: Transform - pos: -17.5,9.5 + pos: -29.5,-6.5 parent: 31 - proto: SpawnPointQuartermaster entities: @@ -67163,11 +66208,13 @@ entities: - uid: 501 components: - type: Transform + anchored: False pos: -13.5,14.5 parent: 31 - uid: 4202 components: - type: Transform + anchored: False pos: -12.5,14.5 parent: 31 - uid: 7905 @@ -67262,23 +66309,68 @@ entities: rot: 1.5707963267948966 rad pos: -10.458265,1.7780888 parent: 31 +- proto: SprayBottle + entities: + - uid: 7461 + components: + - type: Transform + pos: -6.7915807,-11.4037075 + parent: 31 - proto: SprayBottleSpaceCleaner entities: - - uid: 626 + - uid: 1103 components: - type: Transform - pos: -18.66321,-10.23793 + pos: -20.597425,-4.7052503 parent: 31 - - uid: 3115 + - uid: 8281 components: - type: Transform - pos: -18.66321,-10.355925 + pos: -20.534925,-4.486348 parent: 31 - uid: 9134 components: - type: Transform pos: 13.175127,-15.438009 parent: 31 +- proto: StairDark + entities: + - uid: 1381 + components: + - type: Transform + pos: 1.5,30.5 + parent: 31 + - uid: 4186 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,29.5 + parent: 31 + - uid: 8757 + components: + - type: Transform + pos: 2.5,30.5 + parent: 31 + - uid: 10711 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,28.5 + parent: 31 +- proto: StairStageDark + entities: + - uid: 8926 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,-12.5 + parent: 31 + - uid: 8933 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,-12.5 + parent: 31 - proto: StasisBed entities: - uid: 7269 @@ -67305,32 +66397,57 @@ entities: rot: -1.5707963267948966 rad pos: -34.5,-9.5 parent: 31 - - uid: 10535 + - uid: 9021 components: - type: Transform - pos: -14.5,-13.5 + rot: 3.141592653589793 rad + pos: -10.5,-17.5 parent: 31 - proto: SteelBench entities: - - uid: 12047 + - uid: 1151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,6.5 + parent: 31 + - uid: 8914 components: - type: Transform rot: -1.5707963267948966 rad - pos: 60.5,6.5 + pos: -12.5,13.5 parent: 31 -- proto: Stool - entities: - - uid: 1355 + - uid: 8915 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,13.5 + parent: 31 + - uid: 11592 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,-6.5 + pos: -16.5,-8.5 parent: 31 - - uid: 1958 + - uid: 11595 components: - type: Transform rot: 1.5707963267948966 rad - pos: -24.5,-2.5 + pos: -16.5,-8.5 + parent: 31 + - uid: 12047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,6.5 + parent: 31 +- proto: Stool + entities: + - uid: 2714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.689534,-10.08596 parent: 31 - uid: 9580 components: @@ -67338,11 +66455,22 @@ entities: rot: -1.5707963267948966 rad pos: -18.5,10.5 parent: 31 - - uid: 11227 + - uid: 12223 + components: + - type: Transform + pos: -18.124092,-4.663729 + parent: 31 + - uid: 12224 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.32737,-6.538729 + parent: 31 + - uid: 12226 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-9.5 + pos: -16.715189,-6.273104 parent: 31 - proto: StoolBar entities: @@ -67418,6 +66546,11 @@ entities: - type: Transform pos: 36.5,8.5 parent: 31 + - uid: 1229 + components: + - type: Transform + pos: 52.5,17.5 + parent: 31 - uid: 1536 components: - type: Transform @@ -67457,6 +66590,13 @@ entities: - type: Transform pos: 0.5,-8.5 parent: 31 + - uid: 2675 + components: + - type: MetaData + name: dorms substation + - type: Transform + pos: -28.5,-9.5 + parent: 31 - uid: 3587 components: - type: MetaData @@ -67485,12 +66625,17 @@ entities: - type: Transform pos: 55.5,5.5 parent: 31 - - uid: 7689 + - uid: 7004 + components: + - type: Transform + pos: 44.5,-26.5 + parent: 31 + - uid: 7484 components: - type: MetaData name: security substation - type: Transform - pos: -16.5,16.5 + pos: -19.5,12.5 parent: 31 - uid: 8667 components: @@ -67520,13 +66665,6 @@ entities: - type: Transform pos: 53.5,-0.5 parent: 31 - - uid: 10358 - components: - - type: MetaData - name: dorms substation - - type: Transform - pos: -26.5,-11.5 - parent: 31 - uid: 11206 components: - type: MetaData @@ -67560,6 +66698,16 @@ entities: - type: Transform pos: 29.5,-3.5 parent: 31 + - uid: 404 + components: + - type: Transform + pos: -36.5,-27.5 + parent: 31 + - uid: 1122 + components: + - type: Transform + pos: -20.5,25.5 + parent: 31 - uid: 8218 components: - type: Transform @@ -67587,6 +66735,18 @@ entities: - type: Transform pos: 8.5,9.5 parent: 31 + - uid: 7646 + components: + - type: Transform + pos: -6.5,29.5 + parent: 31 +- proto: SuitStorageEVAEmergency + entities: + - uid: 7773 + components: + - type: Transform + pos: 51.5,-19.5 + parent: 31 - proto: SuitStorageEVAPrisoner entities: - uid: 8889 @@ -67680,28 +66840,11 @@ entities: - SurveillanceCameraCommand nameSet: True id: Captain's Room - - uid: 4256 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,32.5 - parent: 31 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraCommand - nameSet: True - id: Bridge East - - uid: 4707 + - uid: 4285 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,28.5 + pos: 0.5,31.5 parent: 31 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraCommand - nameSet: True - id: Bridge West - uid: 4891 components: - type: Transform @@ -67857,17 +67000,6 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Arrivals - - uid: 4346 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,-1.5 - parent: 31 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraGeneral - nameSet: True - id: Upper Dorms - uid: 4361 components: - type: Transform @@ -67934,6 +67066,12 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Tool Hall + - uid: 8217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-2.5 + parent: 31 - uid: 8320 components: - type: Transform @@ -68267,14 +67405,6 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Magnet -- proto: SynthesizerInstrument - entities: - - uid: 7966 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.464506,-6.545539 - parent: 31 - proto: Syringe entities: - uid: 10806 @@ -68370,11 +67500,6 @@ entities: - type: Transform pos: -29.5,8.5 parent: 31 - - uid: 1247 - components: - - type: Transform - pos: 45.5,-20.5 - parent: 31 - uid: 1304 components: - type: Transform @@ -68396,27 +67521,32 @@ entities: - type: Transform pos: 29.5,1.5 parent: 31 - - uid: 1877 + - uid: 1767 components: - type: Transform - pos: -10.5,7.5 + pos: 51.5,-29.5 parent: 31 - - uid: 2002 + - uid: 2175 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,14.5 + pos: 12.5,-4.5 parent: 31 - - uid: 2175 + - uid: 2181 components: - type: Transform - pos: 12.5,-4.5 + rot: -1.5707963267948966 rad + pos: -20.5,18.5 parent: 31 - uid: 2261 components: - type: Transform pos: -17.5,-23.5 parent: 31 + - uid: 2301 + components: + - type: Transform + pos: -5.5,13.5 + parent: 31 - uid: 2317 components: - type: Transform @@ -68443,17 +67573,17 @@ entities: - type: Transform pos: -2.5,18.5 parent: 31 - - uid: 2428 + - uid: 2420 components: - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,-22.5 + rot: -1.5707963267948966 rad + pos: 47.5,-19.5 parent: 31 - - uid: 2434 + - uid: 2428 components: - type: Transform rot: 3.141592653589793 rad - pos: -30.5,-9.5 + pos: -11.5,-22.5 parent: 31 - uid: 2455 components: @@ -68492,11 +67622,15 @@ entities: - type: Transform pos: -12.5,11.5 parent: 31 - - uid: 3138 + - uid: 3426 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,12.5 + pos: -36.5,-25.5 + parent: 31 + - uid: 3453 + components: + - type: Transform + pos: -36.5,-23.5 parent: 31 - uid: 3733 components: @@ -68504,15 +67638,30 @@ entities: rot: -1.5707963267948966 rad pos: -6.5,-14.5 parent: 31 - - uid: 4112 + - uid: 3971 components: - type: Transform - pos: 26.5,0.5 + pos: 47.5,-29.5 parent: 31 - - uid: 4128 + - uid: 3981 components: - type: Transform - pos: -19.5,-2.5 + pos: 50.5,-30.5 + parent: 31 + - uid: 3986 + components: + - type: Transform + pos: 48.5,-30.5 + parent: 31 + - uid: 4076 + components: + - type: Transform + pos: -6.5,27.5 + parent: 31 + - uid: 4112 + components: + - type: Transform + pos: 26.5,0.5 parent: 31 - uid: 4190 components: @@ -68534,21 +67683,26 @@ entities: - type: Transform pos: 19.5,7.5 parent: 31 + - uid: 4346 + components: + - type: Transform + pos: -36.5,-24.5 + parent: 31 - uid: 4466 components: - type: Transform pos: 18.5,7.5 parent: 31 - - uid: 4826 + - uid: 4648 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-18.5 + pos: 55.5,-24.5 parent: 31 - - uid: 4860 + - uid: 4826 components: - type: Transform - pos: -10.5,-6.5 + rot: -1.5707963267948966 rad + pos: 17.5,-18.5 parent: 31 - uid: 4904 components: @@ -68577,16 +67731,15 @@ entities: - type: Transform pos: 28.5,0.5 parent: 31 - - uid: 5727 + - uid: 5754 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,13.5 + pos: -11.5,11.5 parent: 31 - - uid: 5754 + - uid: 5994 components: - type: Transform - pos: -11.5,11.5 + pos: -5.5,15.5 parent: 31 - uid: 6019 components: @@ -68618,6 +67771,16 @@ entities: - type: Transform pos: 6.5,10.5 parent: 31 + - uid: 6962 + components: + - type: Transform + pos: -12.5,1.5 + parent: 31 + - uid: 6984 + components: + - type: Transform + pos: -5.5,14.5 + parent: 31 - uid: 7093 components: - type: Transform @@ -68628,6 +67791,12 @@ entities: - type: Transform pos: -9.5,-18.5 parent: 31 + - uid: 7108 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,17.5 + parent: 31 - uid: 7123 components: - type: Transform @@ -68653,22 +67822,6 @@ entities: - type: Transform pos: 22.5,-4.5 parent: 31 - - uid: 7353 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,-6.5 - parent: 31 - - uid: 7564 - components: - - type: Transform - pos: -15.5,-11.5 - parent: 31 - - uid: 7565 - components: - - type: Transform - pos: -15.5,-10.5 - parent: 31 - uid: 7573 components: - type: Transform @@ -68742,12 +67895,6 @@ entities: - type: Transform pos: -5.5,-6.5 parent: 31 - - uid: 8496 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,12.5 - parent: 31 - uid: 8559 components: - type: Transform @@ -68758,11 +67905,6 @@ entities: - type: Transform pos: 14.5,12.5 parent: 31 - - uid: 8807 - components: - - type: Transform - pos: -2.5,30.5 - parent: 31 - uid: 8853 components: - type: Transform @@ -68773,11 +67915,6 @@ entities: - type: Transform pos: 40.5,4.5 parent: 31 - - uid: 9003 - components: - - type: Transform - pos: -20.5,-2.5 - parent: 31 - uid: 9006 components: - type: Transform @@ -68793,23 +67930,6 @@ entities: - type: Transform pos: 18.5,17.5 parent: 31 - - uid: 9165 - components: - - type: Transform - pos: -6.5,26.5 - parent: 31 - - uid: 9198 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,-7.5 - parent: 31 - - uid: 9507 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,-5.5 - parent: 31 - uid: 9510 components: - type: Transform @@ -68830,11 +67950,27 @@ entities: - type: Transform pos: -3.5,-39.5 parent: 31 + - uid: 9959 + components: + - type: Transform + pos: -30.5,-5.5 + parent: 31 + - uid: 9986 + components: + - type: Transform + pos: -30.5,-6.5 + parent: 31 - uid: 10140 components: - type: Transform pos: 49.5,-5.5 parent: 31 + - uid: 10148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,1.5 + parent: 31 - uid: 10223 components: - type: Transform @@ -68855,26 +67991,31 @@ entities: - type: Transform pos: -16.5,-14.5 parent: 31 - - uid: 10418 + - uid: 10398 components: - type: Transform - pos: 0.5,-27.5 + rot: 1.5707963267948966 rad + pos: -16.5,-1.5 parent: 31 - - uid: 10421 + - uid: 10399 components: - type: Transform - pos: -0.5,-27.5 + pos: -22.5,-0.5 parent: 31 - - uid: 10542 + - uid: 10400 components: - type: Transform - pos: -7.5,26.5 + pos: -17.5,1.5 parent: 31 - - uid: 10582 + - uid: 10418 components: - type: Transform - rot: 3.141592653589793 rad - pos: -29.5,-9.5 + pos: 0.5,-27.5 + parent: 31 + - uid: 10421 + components: + - type: Transform + pos: -0.5,-27.5 parent: 31 - uid: 10642 components: @@ -68901,30 +68042,48 @@ entities: - type: Transform pos: -47.5,-9.5 parent: 31 - - uid: 10792 + - uid: 10796 components: - type: Transform - pos: 45.5,-21.5 + rot: -1.5707963267948966 rad + pos: -9.5,8.5 + parent: 31 + - uid: 10797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,8.5 parent: 31 - uid: 11078 components: - type: Transform pos: 46.5,-2.5 parent: 31 - - uid: 11120 + - uid: 11295 components: - type: Transform - pos: -7.5,28.5 + pos: -3.5,10.5 parent: 31 - - uid: 11121 + - uid: 11597 components: - type: Transform - pos: -7.5,29.5 + pos: -6.5,10.5 parent: 31 - - uid: 11122 + - uid: 11650 components: - type: Transform - pos: -6.5,29.5 + pos: -3.5,11.5 + parent: 31 + - uid: 11822 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-11.5 + parent: 31 + - uid: 11846 + components: + - type: Transform + pos: -9.5,-7.5 parent: 31 - proto: TableCarpet entities: @@ -68973,10 +68132,25 @@ entities: rot: 3.141592653589793 rad pos: -22.5,9.5 parent: 31 - - uid: 8724 + - uid: 11645 components: - type: Transform - pos: -36.5,-29.5 + rot: 1.5707963267948966 rad + pos: -17.5,-5.5 + parent: 31 + - uid: 11646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-6.5 + parent: 31 +- proto: TableCounterMetal + entities: + - uid: 11823 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-11.5 parent: 31 - proto: TableCounterWood entities: @@ -69022,6 +68196,24 @@ entities: parent: 31 - proto: TableFancyPurple entities: + - uid: 2435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-10.5 + parent: 31 + - uid: 2447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-10.5 + parent: 31 + - uid: 2738 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,-11.5 + parent: 31 - uid: 10697 components: - type: Transform @@ -69097,36 +68289,16 @@ entities: parent: 31 - proto: TableReinforced entities: - - uid: 275 - components: - - type: Transform - pos: 5.5,31.5 - parent: 31 - - uid: 462 - components: - - type: Transform - pos: 4.5,32.5 - parent: 31 - - uid: 532 - components: - - type: Transform - pos: 9.5,30.5 - parent: 31 - - uid: 533 + - uid: 143 components: - type: Transform - pos: -0.5,32.5 + pos: 4.5,31.5 parent: 31 - uid: 597 components: - type: Transform pos: 30.5,5.5 parent: 31 - - uid: 611 - components: - - type: Transform - pos: 9.5,28.5 - parent: 31 - uid: 661 components: - type: Transform @@ -69142,11 +68314,6 @@ entities: - type: Transform pos: 40.5,-0.5 parent: 31 - - uid: 766 - components: - - type: Transform - pos: 1.5,32.5 - parent: 31 - uid: 900 components: - type: Transform @@ -69157,16 +68324,6 @@ entities: - type: Transform pos: -10.5,1.5 parent: 31 - - uid: 940 - components: - - type: Transform - pos: 2.5,32.5 - parent: 31 - - uid: 959 - components: - - type: Transform - pos: 5.5,32.5 - parent: 31 - uid: 987 components: - type: Transform @@ -69192,21 +68349,21 @@ entities: - type: Transform pos: 19.5,-20.5 parent: 31 - - uid: 2297 + - uid: 3801 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,15.5 + pos: -6.5,36.5 parent: 31 - - uid: 2446 + - uid: 4074 components: - type: Transform - pos: 7.5,32.5 + pos: -5.5,36.5 parent: 31 - uid: 4193 components: - type: Transform - pos: 2.5,31.5 + rot: -1.5707963267948966 rad + pos: 4.5,35.5 parent: 31 - uid: 4245 components: @@ -69223,6 +68380,12 @@ entities: - type: Transform pos: 27.5,15.5 parent: 31 + - uid: 4573 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,31.5 + parent: 31 - uid: 4880 components: - type: Transform @@ -69243,6 +68406,12 @@ entities: - type: Transform pos: 37.5,-0.5 parent: 31 + - uid: 7046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,-24.5 + parent: 31 - uid: 8138 components: - type: Transform @@ -69260,15 +68429,16 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,16.5 parent: 31 - - uid: 8798 + - uid: 8751 components: - type: Transform - pos: -13.5,18.5 + rot: 1.5707963267948966 rad + pos: -0.5,35.5 parent: 31 - - uid: 8799 + - uid: 8798 components: - type: Transform - pos: 8.5,31.5 + pos: -13.5,18.5 parent: 31 - uid: 9056 components: @@ -69315,6 +68485,11 @@ entities: - type: Transform pos: -16.5,-18.5 parent: 31 + - uid: 10825 + components: + - type: Transform + pos: -14.5,15.5 + parent: 31 - uid: 10892 components: - type: Transform @@ -69409,11 +68584,6 @@ entities: parent: 31 - proto: TableWood entities: - - uid: 492 - components: - - type: Transform - pos: -30.5,-1.5 - parent: 31 - uid: 936 components: - type: Transform @@ -69459,27 +68629,17 @@ entities: - type: Transform pos: -2.5,-5.5 parent: 31 - - uid: 2844 - components: - - type: Transform - pos: -30.5,-5.5 - parent: 31 - - uid: 3892 + - uid: 2815 components: - type: Transform - pos: -30.5,-2.5 + rot: -1.5707963267948966 rad + pos: -24.5,-0.5 parent: 31 - uid: 3913 components: - type: Transform pos: 28.5,10.5 parent: 31 - - uid: 4005 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,17.5 - parent: 31 - uid: 4016 components: - type: Transform @@ -69495,11 +68655,6 @@ entities: - type: Transform pos: -4.5,-4.5 parent: 31 - - uid: 4093 - components: - - type: Transform - pos: -30.5,1.5 - parent: 31 - uid: 4162 components: - type: Transform @@ -69510,36 +68665,11 @@ entities: - type: Transform pos: 8.5,-28.5 parent: 31 - - uid: 4710 - components: - - type: Transform - pos: -23.5,-6.5 - parent: 31 - - uid: 4711 - components: - - type: Transform - pos: -23.5,-5.5 - parent: 31 - - uid: 4712 - components: - - type: Transform - pos: -24.5,-6.5 - parent: 31 - - uid: 4713 - components: - - type: Transform - pos: -24.5,-5.5 - parent: 31 - uid: 4787 components: - type: Transform pos: 9.5,-28.5 parent: 31 - - uid: 5003 - components: - - type: Transform - pos: -23.5,-2.5 - parent: 31 - uid: 5119 components: - type: Transform @@ -69551,6 +68681,16 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-3.5 parent: 31 + - uid: 6996 + components: + - type: Transform + pos: -1.5,14.5 + parent: 31 + - uid: 7001 + components: + - type: Transform + pos: -2.5,14.5 + parent: 31 - uid: 7146 components: - type: Transform @@ -69586,16 +68726,6 @@ entities: - type: Transform pos: 27.5,-25.5 parent: 31 - - uid: 8708 - components: - - type: Transform - pos: -35.5,-25.5 - parent: 31 - - uid: 8746 - components: - - type: Transform - pos: -35.5,-24.5 - parent: 31 - uid: 9043 components: - type: Transform @@ -69884,18 +69014,6 @@ entities: parent: 31 - proto: TintedWindow entities: - - uid: 1444 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,2.5 - parent: 31 - - uid: 1445 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,2.5 - parent: 31 - uid: 4662 components: - type: Transform @@ -69925,29 +69043,29 @@ entities: rot: -1.5707963267948966 rad pos: 13.5,26.5 parent: 31 -- proto: ToolboxArtistic +- proto: ToolboxElectrical entities: - - uid: 10816 + - uid: 8802 components: - type: Transform - pos: -31.033598,-32.18022 + pos: -17.560137,20.77425 parent: 31 -- proto: ToolboxElectricalFilled - entities: - - uid: 12 + - uid: 9516 components: - type: Transform - pos: -29.499815,8.100836 + pos: -30.309246,-9.267263 parent: 31 - - uid: 3947 +- proto: ToolboxElectricalFilled + entities: + - uid: 4290 components: - type: Transform - pos: 9.510484,28.980497 + pos: 32.484333,-2.403047 parent: 31 - - uid: 4290 + - uid: 5864 components: - type: Transform - pos: 32.484333,-2.403047 + pos: -29.436642,8.485578 parent: 31 - uid: 8892 components: @@ -69956,15 +69074,10 @@ entities: parent: 31 - proto: ToolboxEmergencyFilled entities: - - uid: 1054 - components: - - type: Transform - pos: 9.510484,28.589872 - parent: 31 - - uid: 11129 + - uid: 3483 components: - type: Transform - pos: -5.51474,29.649992 + pos: 4.4022307,35.456944 parent: 31 - proto: ToolboxGoldFilled entities: @@ -69992,38 +69105,15 @@ entities: parent: 31 - proto: ToyAi entities: - - uid: 10982 - components: - - type: Transform - pos: 60.558807,-5.3215933 - parent: 31 -- proto: ToyAmongPequeno - entities: - - uid: 9685 - components: - - type: Transform - pos: 29.13865,-15.849083 - parent: 31 -- proto: ToyDeathRipley - entities: - - uid: 2030 - components: - - type: Transform - pos: -24.569178,-5.0530295 - parent: 31 -- proto: ToyFigurineDetective - entities: - - uid: 6636 + - uid: 8292 components: - type: Transform - pos: -21.273363,17.582897 + pos: 49.509567,-24.29748 parent: 31 -- proto: ToyFireRipley - entities: - - uid: 2029 + - uid: 10982 components: - type: Transform - pos: -23.412928,-6.0686545 + pos: 60.558807,-5.3215933 parent: 31 - proto: ToyRubberDuck entities: @@ -70034,15 +69124,15 @@ entities: parent: 31 - proto: ToySpawner entities: - - uid: 148 + - uid: 521 components: - type: Transform - pos: -30.5,-2.5 + pos: -31.5,16.5 parent: 31 - - uid: 521 + - uid: 867 components: - type: Transform - pos: -31.5,16.5 + pos: -20.5,20.5 parent: 31 - uid: 7790 components: @@ -70058,23 +69148,11 @@ entities: parent: 31 - proto: TrashBag entities: - - uid: 8951 + - uid: 8923 components: - type: Transform rot: -1.5707963267948966 rad - pos: -18.528688,-10.596653 - parent: 31 -- proto: TrashBananaPeel - entities: - - uid: 7351 - components: - - type: Transform - pos: -19.590536,-8.611897 - parent: 31 - - uid: 8267 - components: - - type: Transform - pos: 38.48186,-17.514906 + pos: -20.24326,-4.6844025 parent: 31 - proto: trayScanner entities: @@ -70083,13 +69161,6 @@ entities: - type: Transform pos: 48.60447,5.4525433 parent: 31 -- proto: TritiumCanister - entities: - - uid: 7315 - components: - - type: Transform - pos: 60.5,9.5 - parent: 31 - proto: UniformPrinter entities: - uid: 8408 @@ -70101,6 +69172,38 @@ entities: materialWhiteList: - Cloth - Durathread +- proto: UraniumReinforcedWindowDirectional + entities: + - uid: 534 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,0.5 + parent: 31 + - uid: 6950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,1.5 + parent: 31 + - uid: 6952 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,2.5 + parent: 31 + - uid: 6966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,3.5 + parent: 31 + - uid: 7028 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,4.5 + parent: 31 - proto: Urn entities: - uid: 3882 @@ -70138,10 +69241,10 @@ entities: parent: 31 - proto: VendingBarDrobe entities: - - uid: 2420 + - uid: 2814 components: - type: Transform - pos: -12.5,-6.5 + pos: -15.5,-8.5 parent: 31 - proto: VendingMachineAtmosDrobe entities: @@ -70173,7 +69276,7 @@ entities: parent: 31 - proto: VendingMachineChang entities: - - uid: 792 + - uid: 4710 components: - type: Transform pos: -34.5,10.5 @@ -70193,10 +69296,10 @@ entities: parent: 31 - proto: VendingMachineChefDrobe entities: - - uid: 3986 + - uid: 11843 components: - type: Transform - pos: -13.5,-3.5 + pos: -17.5,-8.5 parent: 31 - proto: VendingMachineChefvend entities: @@ -70221,19 +69324,15 @@ entities: parent: 31 - proto: VendingMachineCigs entities: - - uid: 473 + - uid: 9793 components: - - type: MetaData - name: cigarette machine - type: Transform - pos: 14.5,21.5 + pos: -2.5,31.5 parent: 31 - - uid: 8705 + - uid: 10171 components: - - type: MetaData - name: cigarette machine - type: Transform - pos: -32.5,-29.5 + pos: 14.5,19.5 parent: 31 - uid: 10835 components: @@ -70255,19 +69354,17 @@ entities: parent: 31 - proto: VendingMachineClothing entities: - - uid: 7647 + - uid: 9905 components: - type: Transform - pos: -29.5,-7.5 + pos: -28.5,-6.5 parent: 31 - proto: VendingMachineCoffee entities: - - uid: 983 + - uid: 6921 components: - - type: MetaData - name: Hot drinks machine - type: Transform - pos: 0.5,23.5 + pos: 0.5,26.5 parent: 31 - uid: 7303 components: @@ -70275,13 +69372,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-30.5 parent: 31 - - uid: 8738 - components: - - type: MetaData - name: Hot drinks machine - - type: Transform - pos: -36.5,-23.5 - parent: 31 - uid: 9039 components: - type: MetaData @@ -70289,11 +69379,10 @@ entities: - type: Transform pos: 35.5,6.5 parent: 31 - - uid: 9328 + - uid: 9739 components: - - type: MetaData - name: Hot drinks machine - type: Transform + rot: 1.5707963267948966 rad pos: -38.5,-5.5 parent: 31 - uid: 10840 @@ -70304,20 +69393,21 @@ entities: parent: 31 - proto: VendingMachineCola entities: - - uid: 984 + - uid: 7958 components: - type: Transform - pos: 1.5,21.5 + pos: 25.5,6.5 parent: 31 - - uid: 1229 + - uid: 9740 components: - type: Transform - pos: -34.5,2.5 + pos: 1.5,21.5 parent: 31 - - uid: 7958 + - uid: 9746 components: - type: Transform - pos: 25.5,6.5 + rot: -1.5707963267948966 rad + pos: -34.5,2.5 parent: 31 - proto: VendingMachineCuraDrobe entities: @@ -70342,6 +69432,13 @@ entities: - type: Transform pos: -13.5,1.5 parent: 31 +- proto: VendingMachineDrGibb + entities: + - uid: 12531 + components: + - type: Transform + pos: -25.5,-13.5 + parent: 31 - proto: VendingMachineEngiDrobe entities: - uid: 3283 @@ -70371,13 +69468,6 @@ entities: - type: Transform pos: 8.5,-13.5 parent: 31 -- proto: VendingMachineHappyHonk - entities: - - uid: 7121 - components: - - type: Transform - pos: -17.5,-8.5 - parent: 31 - proto: VendingMachineHotfood entities: - uid: 11301 @@ -70385,25 +69475,19 @@ entities: - type: Transform pos: -3.5,1.5 parent: 31 -- proto: VendingMachineHydrobe - entities: - - uid: 4126 - components: - - type: Transform - pos: -14.5,-6.5 - parent: 31 - proto: VendingMachineJaniDrobe entities: - - uid: 2007 + - uid: 1017 components: - type: Transform - pos: -19.5,-10.5 + pos: -22.5,-4.5 parent: 31 - proto: VendingMachineMedical entities: - - uid: 1148 + - uid: 9752 components: - type: Transform + rot: 3.141592653589793 rad pos: 14.5,-11.5 parent: 31 - uid: 11108 @@ -70421,10 +69505,10 @@ entities: parent: 31 - proto: VendingMachineNutri entities: - - uid: 7436 + - uid: 10723 components: - type: Transform - pos: -15.5,-8.5 + pos: -18.5,-2.5 parent: 31 - proto: VendingMachineRestockBooze entities: @@ -70485,10 +69569,10 @@ entities: parent: 31 - proto: VendingMachineSeeds entities: - - uid: 4127 + - uid: 10392 components: - type: Transform - pos: -17.5,-2.5 + pos: -21.5,1.5 parent: 31 - proto: VendingMachineSeedsUnlocked entities: @@ -70499,11 +69583,6 @@ entities: parent: 31 - proto: VendingMachineSnack entities: - - uid: 133 - components: - - type: Transform - pos: -22.5,0.5 - parent: 31 - uid: 7959 components: - type: Transform @@ -70511,6 +69590,11 @@ entities: parent: 31 - proto: VendingMachineSolsnack entities: + - uid: 113 + components: + - type: Transform + pos: -24.5,1.5 + parent: 31 - uid: 12233 components: - type: Transform @@ -70518,11 +69602,6 @@ entities: parent: 31 - proto: VendingMachineSovietSoda entities: - - uid: 7561 - components: - - type: Transform - pos: -11.5,-9.5 - parent: 31 - uid: 9574 components: - type: Transform @@ -70544,6 +69623,11 @@ entities: parent: 31 - proto: VendingMachineTankDispenserEVA entities: + - uid: 7647 + components: + - type: Transform + pos: -4.5,31.5 + parent: 31 - uid: 9080 components: - type: Transform @@ -70565,10 +69649,10 @@ entities: parent: 31 - proto: VendingMachineTheater entities: - - uid: 5712 + - uid: 2355 components: - type: Transform - pos: -19.5,-4.5 + pos: -17.5,-11.5 parent: 31 - proto: VendingMachineVendomat entities: @@ -70591,12 +69675,6 @@ entities: parent: 31 - proto: VendingMachineWallMedical entities: - - uid: 6599 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,11.5 - parent: 31 - uid: 11679 components: - type: Transform @@ -70608,11 +69686,6 @@ entities: - type: Transform pos: 6.5,-9.5 parent: 31 - - uid: 12103 - components: - - type: Transform - pos: -0.5,11.5 - parent: 31 - proto: VendingMachineWeeb entities: - uid: 10834 @@ -70621,13 +69694,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-16.5 parent: 31 -- proto: VendingMachineWinter - entities: - - uid: 8281 - components: - - type: Transform - pos: -30.5,-7.5 - parent: 31 - proto: VendingMachineYouTool entities: - uid: 194 @@ -70640,6 +69706,24 @@ entities: - type: Transform pos: 31.5,0.5 parent: 31 + - uid: 2780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-29.5 + parent: 31 + - uid: 4675 + components: + - type: Transform + pos: 54.5,-26.5 + parent: 31 +- proto: WallDecorExitsign + entities: + - uid: 2330 + components: + - type: Transform + pos: -16.5,-11.5 + parent: 31 - proto: WallmountTelescreen entities: - uid: 8846 @@ -70663,6 +69747,13 @@ entities: rot: 1.5707963267948966 rad pos: -16.5,-38.5 parent: 31 +- proto: WallmountTelevision + entities: + - uid: 7747 + components: + - type: Transform + pos: -5.5,-10.5 + parent: 31 - proto: WallReinforced entities: - uid: 34 @@ -70741,6 +69832,18 @@ entities: - type: Transform pos: -16.5,-28.5 parent: 31 + - uid: 209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-25.5 + parent: 31 + - uid: 217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-23.5 + parent: 31 - uid: 219 components: - type: Transform @@ -70769,13 +69872,25 @@ entities: - uid: 305 components: - type: Transform - pos: -1.5,11.5 + pos: 3.5,15.5 parent: 31 - uid: 306 components: - type: Transform pos: 40.5,1.5 parent: 31 + - uid: 379 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,-28.5 + parent: 31 + - uid: 401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-19.5 + parent: 31 - uid: 447 components: - type: Transform @@ -70808,11 +69923,22 @@ entities: - type: Transform pos: -6.5,20.5 parent: 31 + - uid: 500 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-28.5 + parent: 31 - uid: 556 components: - type: Transform pos: 14.5,27.5 parent: 31 + - uid: 563 + components: + - type: Transform + pos: -7.5,33.5 + parent: 31 - uid: 623 components: - type: Transform @@ -70874,11 +70000,6 @@ entities: - type: Transform pos: 17.5,-26.5 parent: 31 - - uid: 723 - components: - - type: Transform - pos: -29.5,-20.5 - parent: 31 - uid: 730 components: - type: Transform @@ -71021,6 +70142,17 @@ entities: - type: Transform pos: 31.5,-11.5 parent: 31 + - uid: 1038 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,9.5 + parent: 31 + - uid: 1055 + components: + - type: Transform + pos: -34.5,-29.5 + parent: 31 - uid: 1072 components: - type: Transform @@ -71102,6 +70234,11 @@ entities: - type: Transform pos: 20.5,0.5 parent: 31 + - uid: 1171 + components: + - type: Transform + pos: 0.5,30.5 + parent: 31 - uid: 1182 components: - type: Transform @@ -71127,10 +70264,11 @@ entities: - type: Transform pos: 25.5,2.5 parent: 31 - - uid: 1269 + - uid: 1266 components: - type: Transform - pos: -0.5,11.5 + rot: 3.141592653589793 rad + pos: 70.5,-4.5 parent: 31 - uid: 1270 components: @@ -71167,15 +70305,11 @@ entities: - type: Transform pos: 61.5,5.5 parent: 31 - - uid: 1393 - components: - - type: Transform - pos: 9.5,32.5 - parent: 31 - - uid: 1408 + - uid: 1392 components: - type: Transform - pos: 8.5,33.5 + rot: -1.5707963267948966 rad + pos: -16.5,16.5 parent: 31 - uid: 1413 components: @@ -71187,6 +70321,12 @@ entities: - type: Transform pos: -11.5,9.5 parent: 31 + - uid: 1492 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-28.5 + parent: 31 - uid: 1502 components: - type: Transform @@ -71692,31 +70832,11 @@ entities: - type: Transform pos: 10.5,27.5 parent: 31 - - uid: 1840 - components: - - type: Transform - pos: 10.5,28.5 - parent: 31 - - uid: 1841 - components: - - type: Transform - pos: 10.5,30.5 - parent: 31 - uid: 1842 components: - type: Transform pos: -1.5,32.5 parent: 31 - - uid: 1843 - components: - - type: Transform - pos: -2.5,32.5 - parent: 31 - - uid: 1845 - components: - - type: Transform - pos: -3.5,28.5 - parent: 31 - uid: 1846 components: - type: Transform @@ -71822,16 +70942,6 @@ entities: - type: Transform pos: 5.5,24.5 parent: 31 - - uid: 1876 - components: - - type: Transform - pos: -1.5,33.5 - parent: 31 - - uid: 1890 - components: - - type: Transform - pos: 8.5,32.5 - parent: 31 - uid: 1892 components: - type: Transform @@ -71957,11 +71067,6 @@ entities: - type: Transform pos: -16.5,22.5 parent: 31 - - uid: 1926 - components: - - type: Transform - pos: -16.5,23.5 - parent: 31 - uid: 1927 components: - type: Transform @@ -72097,11 +71202,6 @@ entities: - type: Transform pos: -15.5,12.5 parent: 31 - - uid: 1964 - components: - - type: Transform - pos: -15.5,15.5 - parent: 31 - uid: 1966 components: - type: Transform @@ -72247,6 +71347,30 @@ entities: - type: Transform pos: 42.5,0.5 parent: 31 + - uid: 2060 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -35.5,-33.5 + parent: 31 + - uid: 2062 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-33.5 + parent: 31 + - uid: 2092 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-30.5 + parent: 31 + - uid: 2093 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-21.5 + parent: 31 - uid: 2101 components: - type: Transform @@ -72327,12 +71451,42 @@ entities: - type: Transform pos: 25.5,-12.5 parent: 31 + - uid: 2190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-22.5 + parent: 31 - uid: 2215 components: - type: Transform rot: 1.5707963267948966 rad pos: 69.5,1.5 parent: 31 + - uid: 2217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-26.5 + parent: 31 + - uid: 2219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-23.5 + parent: 31 + - uid: 2222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-27.5 + parent: 31 + - uid: 2223 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-29.5 + parent: 31 - uid: 2229 components: - type: Transform @@ -72393,6 +71547,24 @@ entities: - type: Transform pos: 28.5,-0.5 parent: 31 + - uid: 2264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-27.5 + parent: 31 + - uid: 2273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-29.5 + parent: 31 + - uid: 2274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-30.5 + parent: 31 - uid: 2284 components: - type: Transform @@ -72413,6 +71585,12 @@ entities: - type: Transform pos: -6.5,-24.5 parent: 31 + - uid: 2308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-17.5 + parent: 31 - uid: 2310 components: - type: Transform @@ -72428,16 +71606,25 @@ entities: - type: Transform pos: 29.5,14.5 parent: 31 + - uid: 2341 + components: + - type: Transform + pos: -27.5,-9.5 + parent: 31 - uid: 2348 components: - type: Transform pos: -33.5,-13.5 parent: 31 - - uid: 2406 + - uid: 2357 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,-1.5 + pos: -30.5,-10.5 + parent: 31 + - uid: 2374 + components: + - type: Transform + pos: -30.5,-8.5 parent: 31 - uid: 2415 components: @@ -72495,31 +71682,15 @@ entities: - type: Transform pos: 14.5,25.5 parent: 31 - - uid: 2490 - components: - - type: Transform - pos: 13.5,21.5 - parent: 31 - - uid: 2533 - components: - - type: Transform - pos: -16.5,15.5 - parent: 31 - - uid: 2535 - components: - - type: Transform - pos: -17.5,17.5 - parent: 31 - uid: 2671 components: - type: Transform pos: -17.5,12.5 parent: 31 - - uid: 2877 + - uid: 2776 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,-3.5 + pos: 39.5,-19.5 parent: 31 - uid: 2878 components: @@ -72531,12 +71702,6 @@ entities: - type: Transform pos: 32.5,23.5 parent: 31 - - uid: 3107 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,-2.5 - parent: 31 - uid: 3130 components: - type: Transform @@ -72547,6 +71712,11 @@ entities: - type: Transform pos: 22.5,-15.5 parent: 31 + - uid: 3157 + components: + - type: Transform + pos: 12.5,20.5 + parent: 31 - uid: 3280 components: - type: Transform @@ -72562,15 +71732,11 @@ entities: - type: Transform pos: 11.5,11.5 parent: 31 - - uid: 3480 - components: - - type: Transform - pos: -17.5,15.5 - parent: 31 - - uid: 3535 + - uid: 3479 components: - type: Transform - pos: 13.5,20.5 + rot: 3.141592653589793 rad + pos: 5.5,28.5 parent: 31 - uid: 3537 components: @@ -72597,6 +71763,17 @@ entities: - type: Transform pos: 59.5,8.5 parent: 31 + - uid: 3743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -29.5,-28.5 + parent: 31 + - uid: 3802 + components: + - type: Transform + pos: -34.5,-28.5 + parent: 31 - uid: 3833 components: - type: Transform @@ -72617,11 +71794,28 @@ entities: - type: Transform pos: 15.5,22.5 parent: 31 + - uid: 3934 + components: + - type: Transform + pos: -37.5,-33.5 + parent: 31 + - uid: 4047 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,36.5 + parent: 31 - uid: 4079 components: - type: Transform pos: 45.5,20.5 parent: 31 + - uid: 4107 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,28.5 + parent: 31 - uid: 4148 components: - type: Transform @@ -72653,6 +71847,23 @@ entities: - type: Transform pos: -3.5,-24.5 parent: 31 + - uid: 4232 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,9.5 + parent: 31 + - uid: 4237 + components: + - type: Transform + pos: -3.5,9.5 + parent: 31 + - uid: 4241 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,30.5 + parent: 31 - uid: 4250 components: - type: Transform @@ -72685,6 +71896,11 @@ entities: - type: Transform pos: 51.5,8.5 parent: 31 + - uid: 4275 + components: + - type: Transform + pos: -7.5,37.5 + parent: 31 - uid: 4277 components: - type: Transform @@ -72700,6 +71916,12 @@ entities: - type: Transform pos: 17.5,19.5 parent: 31 + - uid: 4313 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-20.5 + parent: 31 - uid: 4330 components: - type: Transform @@ -72716,16 +71938,6 @@ entities: - type: Transform pos: -20.5,10.5 parent: 31 - - uid: 4384 - components: - - type: Transform - pos: 36.5,-18.5 - parent: 31 - - uid: 4385 - components: - - type: Transform - pos: 38.5,-22.5 - parent: 31 - uid: 4395 components: - type: Transform @@ -72807,16 +72019,6 @@ entities: - type: Transform pos: 55.5,12.5 parent: 31 - - uid: 4494 - components: - - type: Transform - pos: 34.5,-19.5 - parent: 31 - - uid: 4499 - components: - - type: Transform - pos: 34.5,-21.5 - parent: 31 - uid: 4502 components: - type: Transform @@ -72825,17 +72027,20 @@ entities: - uid: 4509 components: - type: Transform - pos: 31.5,-21.5 + rot: 3.141592653589793 rad + pos: 56.5,-24.5 parent: 31 - - uid: 4517 + - uid: 4510 components: - type: Transform - pos: 38.5,-26.5 + rot: 3.141592653589793 rad + pos: 55.5,-22.5 parent: 31 - - uid: 4518 + - uid: 4511 components: - type: Transform - pos: 39.5,-26.5 + rot: 3.141592653589793 rad + pos: 56.5,-23.5 parent: 31 - uid: 4523 components: @@ -72883,11 +72088,6 @@ entities: - type: Transform pos: -32.5,-19.5 parent: 31 - - uid: 4573 - components: - - type: Transform - pos: -31.5,-20.5 - parent: 31 - uid: 4574 components: - type: Transform @@ -72898,45 +72098,45 @@ entities: - type: Transform pos: 39.5,-16.5 parent: 31 - - uid: 4580 - components: - - type: Transform - pos: 38.5,-18.5 - parent: 31 - uid: 4581 components: - type: Transform - pos: 37.5,-18.5 + rot: 3.141592653589793 rad + pos: 46.5,-18.5 parent: 31 - uid: 4582 components: - type: Transform pos: 39.5,-18.5 parent: 31 - - uid: 4584 + - uid: 4589 components: - type: Transform - pos: 39.5,-22.5 + pos: 60.5,-6.5 parent: 31 - - uid: 4587 + - uid: 4594 components: - type: Transform - pos: 32.5,-26.5 + rot: 3.141592653589793 rad + pos: 47.5,-18.5 parent: 31 - - uid: 4588 + - uid: 4600 components: - type: Transform - pos: 34.5,-26.5 + rot: 3.141592653589793 rad + pos: 47.5,-17.5 parent: 31 - - uid: 4589 + - uid: 4627 components: - type: Transform - pos: 60.5,-6.5 + rot: 3.141592653589793 rad + pos: 43.5,-26.5 parent: 31 - - uid: 4594 + - uid: 4628 components: - type: Transform - pos: 34.5,-20.5 + rot: 3.141592653589793 rad + pos: 44.5,-28.5 parent: 31 - uid: 4636 components: @@ -72948,40 +72148,64 @@ entities: - type: Transform pos: 39.5,-17.5 parent: 31 - - uid: 4648 + - uid: 4665 components: - type: Transform - pos: 34.5,-22.5 + rot: 3.141592653589793 rad + pos: 43.5,-21.5 parent: 31 - - uid: 4661 + - uid: 4676 components: - type: Transform - pos: 31.5,-22.5 + rot: 1.5707963267948966 rad + pos: 46.5,-20.5 parent: 31 - - uid: 4674 + - uid: 4677 components: - type: Transform - pos: 55.5,-21.5 + rot: 1.5707963267948966 rad + pos: 49.5,-20.5 parent: 31 - - uid: 4675 + - uid: 4678 components: - type: Transform - pos: 52.5,-18.5 + rot: 1.5707963267948966 rad + pos: 52.5,-20.5 parent: 31 - - uid: 4678 + - uid: 4679 components: - type: Transform - pos: 46.5,-18.5 + rot: 1.5707963267948966 rad + pos: 47.5,-20.5 parent: 31 - - uid: 4716 + - uid: 4680 components: - type: Transform - pos: -33.5,-17.5 + rot: 3.141592653589793 rad + pos: 42.5,-25.5 parent: 31 - - uid: 4717 + - uid: 4681 components: - type: Transform - pos: -30.5,-20.5 + rot: 3.141592653589793 rad + pos: 43.5,-22.5 + parent: 31 + - uid: 4683 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-24.5 + parent: 31 + - uid: 4714 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-35.5 + parent: 31 + - uid: 4716 + components: + - type: Transform + pos: -33.5,-17.5 parent: 31 - uid: 4724 components: @@ -72989,6 +72213,12 @@ entities: rot: 3.141592653589793 rad pos: 69.5,4.5 parent: 31 + - uid: 4735 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,-22.5 + parent: 31 - uid: 4740 components: - type: Transform @@ -73046,6 +72276,12 @@ entities: - type: Transform pos: 13.5,-31.5 parent: 31 + - uid: 4836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-29.5 + parent: 31 - uid: 4837 components: - type: Transform @@ -73081,6 +72317,27 @@ entities: - type: Transform pos: 33.5,24.5 parent: 31 + - uid: 4859 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-20.5 + parent: 31 + - uid: 4861 + components: + - type: Transform + pos: 35.5,-19.5 + parent: 31 + - uid: 4862 + components: + - type: Transform + pos: 36.5,-19.5 + parent: 31 + - uid: 4864 + components: + - type: Transform + pos: 37.5,-19.5 + parent: 31 - uid: 4867 components: - type: Transform @@ -73207,11 +72464,6 @@ entities: - type: Transform pos: 14.5,26.5 parent: 31 - - uid: 5061 - components: - - type: Transform - pos: 13.5,27.5 - parent: 31 - uid: 5062 components: - type: Transform @@ -73343,6 +72595,12 @@ entities: - type: Transform pos: 14.5,-30.5 parent: 31 + - uid: 5291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,7.5 + parent: 31 - uid: 5294 components: - type: Transform @@ -73393,6 +72651,58 @@ entities: - type: Transform pos: 41.5,24.5 parent: 31 + - uid: 5527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,6.5 + parent: 31 + - uid: 5532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -32.5,6.5 + parent: 31 + - uid: 5533 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,6.5 + parent: 31 + - uid: 5534 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,6.5 + parent: 31 + - uid: 5535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,7.5 + parent: 31 + - uid: 5536 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,8.5 + parent: 31 + - uid: 5538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,8.5 + parent: 31 + - uid: 5539 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 31 + - uid: 5552 + components: + - type: Transform + pos: -27.5,-10.5 + parent: 31 - uid: 5610 components: - type: Transform @@ -73418,15 +72728,21 @@ entities: - type: Transform pos: -33.5,-20.5 parent: 31 + - uid: 5772 + components: + - type: Transform + pos: -32.5,-30.5 + parent: 31 - uid: 5784 components: - type: Transform pos: 56.5,12.5 parent: 31 - - uid: 5882 + - uid: 5871 components: - type: Transform - pos: -53.5,-11.5 + rot: 3.141592653589793 rad + pos: -33.5,8.5 parent: 31 - uid: 5894 components: @@ -73439,12 +72755,34 @@ entities: - type: Transform pos: 19.5,18.5 parent: 31 + - uid: 5976 + components: + - type: Transform + pos: -29.5,-8.5 + parent: 31 - uid: 5983 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,-8.5 parent: 31 + - uid: 5995 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-20.5 + parent: 31 + - uid: 6007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,4.5 + parent: 31 + - uid: 6082 + components: + - type: Transform + pos: -28.5,-8.5 + parent: 31 - uid: 6181 components: - type: Transform @@ -73662,6 +73000,11 @@ entities: - type: Transform pos: 33.5,23.5 parent: 31 + - uid: 6505 + components: + - type: Transform + pos: -54.5,-12.5 + parent: 31 - uid: 6537 components: - type: Transform @@ -73687,6 +73030,12 @@ entities: - type: Transform pos: 58.5,-10.5 parent: 31 + - uid: 6599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-26.5 + parent: 31 - uid: 6601 components: - type: Transform @@ -73722,6 +73071,12 @@ entities: - type: Transform pos: 41.5,10.5 parent: 31 + - uid: 6708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,33.5 + parent: 31 - uid: 6751 components: - type: Transform @@ -73779,11 +73134,6 @@ entities: - type: Transform pos: 30.5,15.5 parent: 31 - - uid: 6883 - components: - - type: Transform - pos: -4.5,30.5 - parent: 31 - uid: 6889 components: - type: Transform @@ -73795,6 +73145,12 @@ entities: rot: 1.5707963267948966 rad pos: 47.5,20.5 parent: 31 + - uid: 6904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,-23.5 + parent: 31 - uid: 6905 components: - type: Transform @@ -73842,40 +73198,77 @@ entities: - type: Transform pos: 75.5,11.5 parent: 31 - - uid: 6983 + - uid: 6997 components: - type: Transform - pos: 43.5,-22.5 + rot: 1.5707963267948966 rad + pos: 53.5,-28.5 parent: 31 - - uid: 6984 + - uid: 6998 components: - type: Transform - pos: 43.5,-26.5 + rot: 1.5707963267948966 rad + pos: 53.5,-27.5 parent: 31 - - uid: 6985 + - uid: 7005 components: - type: Transform - pos: 43.5,-21.5 + rot: 3.141592653589793 rad + pos: 51.5,-31.5 parent: 31 - - uid: 6986 + - uid: 7006 components: - type: Transform - pos: 43.5,-27.5 + rot: 3.141592653589793 rad + pos: 56.5,-26.5 parent: 31 - - uid: 6987 + - uid: 7007 components: - type: Transform - pos: 46.5,-30.5 + rot: 3.141592653589793 rad + pos: 47.5,-31.5 parent: 31 - - uid: 6990 + - uid: 7008 components: - type: Transform - pos: 52.5,-30.5 + rot: 3.141592653589793 rad + pos: 50.5,-23.5 parent: 31 - - uid: 6992 + - uid: 7014 components: - type: Transform - pos: 55.5,-27.5 + rot: 3.141592653589793 rad + pos: 52.5,-29.5 + parent: 31 + - uid: 7018 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-28.5 + parent: 31 + - uid: 7020 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-20.5 + parent: 31 + - uid: 7021 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-21.5 + parent: 31 + - uid: 7022 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-28.5 + parent: 31 + - uid: 7024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,21.5 parent: 31 - uid: 7034 components: @@ -73900,7 +73293,8 @@ entities: - uid: 7049 components: - type: Transform - pos: 35.5,-18.5 + rot: 3.141592653589793 rad + pos: 45.5,-25.5 parent: 31 - uid: 7053 components: @@ -73913,20 +73307,16 @@ entities: - type: Transform pos: 30.5,17.5 parent: 31 - - uid: 7060 - components: - - type: Transform - pos: 31.5,-26.5 - parent: 31 - - uid: 7061 + - uid: 7062 components: - type: Transform - pos: 33.5,-26.5 + pos: 31.5,-20.5 parent: 31 - - uid: 7062 + - uid: 7069 components: - type: Transform - pos: 31.5,-20.5 + rot: 1.5707963267948966 rad + pos: 45.5,-27.5 parent: 31 - uid: 7081 components: @@ -73943,6 +73333,12 @@ entities: - type: Transform pos: 35.5,24.5 parent: 31 + - uid: 7087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-28.5 + parent: 31 - uid: 7094 components: - type: Transform @@ -73958,6 +73354,18 @@ entities: - type: Transform pos: -7.5,-42.5 parent: 31 + - uid: 7102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-26.5 + parent: 31 + - uid: 7109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,36.5 + parent: 31 - uid: 7157 components: - type: Transform @@ -74002,21 +73410,45 @@ entities: pos: 76.5,10.5 parent: 31 - uid: 7190 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,32.5 + parent: 31 + - uid: 7223 + components: + - type: Transform + pos: 28.5,2.5 + parent: 31 + - uid: 7235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,-22.5 + parent: 31 + - uid: 7238 components: - type: Transform rot: 1.5707963267948966 rad - pos: 75.5,12.5 + pos: 51.5,-28.5 parent: 31 - - uid: 7191 + - uid: 7240 components: - type: Transform rot: 1.5707963267948966 rad - pos: 76.5,12.5 + pos: 47.5,-28.5 parent: 31 - - uid: 7223 + - uid: 7315 components: - type: Transform - pos: 28.5,2.5 + rot: 3.141592653589793 rad + pos: 49.5,-31.5 + parent: 31 + - uid: 7317 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,-22.5 parent: 31 - uid: 7333 components: @@ -74028,6 +73460,18 @@ entities: - type: Transform pos: -20.5,9.5 parent: 31 + - uid: 7365 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-30.5 + parent: 31 + - uid: 7374 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-27.5 + parent: 31 - uid: 7441 components: - type: Transform @@ -74194,46 +73638,16 @@ entities: - type: Transform pos: -39.5,13.5 parent: 31 - - uid: 7685 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,29.5 - parent: 31 - uid: 7698 components: - type: Transform pos: 48.5,-12.5 parent: 31 - - uid: 7699 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,30.5 - parent: 31 - - uid: 7701 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,-28.5 - parent: 31 - uid: 7712 components: - type: Transform pos: -54.5,-11.5 parent: 31 - - uid: 7724 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-28.5 - parent: 31 - - uid: 7725 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-27.5 - parent: 31 - uid: 7751 components: - type: Transform @@ -74269,6 +73683,12 @@ entities: - type: Transform pos: 33.5,20.5 parent: 31 + - uid: 7859 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,27.5 + parent: 31 - uid: 7942 components: - type: Transform @@ -74396,6 +73816,24 @@ entities: - type: Transform pos: -30.5,18.5 parent: 31 + - uid: 8233 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-17.5 + parent: 31 + - uid: 8247 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-23.5 + parent: 31 + - uid: 8250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 33.5,-19.5 + parent: 31 - uid: 8287 components: - type: Transform @@ -74406,6 +73844,12 @@ entities: - type: Transform pos: -51.5,-8.5 parent: 31 + - uid: 8290 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,20.5 + parent: 31 - uid: 8311 components: - type: Transform @@ -74417,6 +73861,36 @@ entities: rot: 1.5707963267948966 rad pos: 69.5,3.5 parent: 31 + - uid: 8325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-29.5 + parent: 31 + - uid: 8326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-26.5 + parent: 31 + - uid: 8332 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-31.5 + parent: 31 + - uid: 8333 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-31.5 + parent: 31 + - uid: 8334 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-29.5 + parent: 31 - uid: 8368 components: - type: Transform @@ -74427,6 +73901,18 @@ entities: - type: Transform pos: -2.5,-23.5 parent: 31 + - uid: 8384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,-25.5 + parent: 31 + - uid: 8391 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-27.5 + parent: 31 - uid: 8400 components: - type: Transform @@ -74449,11 +73935,6 @@ entities: - type: Transform pos: -21.5,-30.5 parent: 31 - - uid: 8466 - components: - - type: Transform - pos: -21.5,-28.5 - parent: 31 - uid: 8489 components: - type: Transform @@ -74465,33 +73946,11 @@ entities: - type: Transform pos: 64.5,5.5 parent: 31 - - uid: 8511 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,-28.5 - parent: 31 - - uid: 8512 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-28.5 - parent: 31 - uid: 8518 components: - type: Transform pos: -31.5,-27.5 parent: 31 - - uid: 8519 - components: - - type: Transform - pos: -31.5,-25.5 - parent: 31 - - uid: 8522 - components: - - type: Transform - pos: -30.5,-27.5 - parent: 31 - uid: 8528 components: - type: Transform @@ -74507,11 +73966,6 @@ entities: - type: Transform pos: -20.5,-33.5 parent: 31 - - uid: 8532 - components: - - type: Transform - pos: -37.5,-29.5 - parent: 31 - uid: 8534 components: - type: Transform @@ -74532,11 +73986,6 @@ entities: - type: Transform pos: -30.5,-33.5 parent: 31 - - uid: 8538 - components: - - type: Transform - pos: -34.5,-32.5 - parent: 31 - uid: 8539 components: - type: Transform @@ -74617,11 +74066,6 @@ entities: - type: Transform pos: -37.5,-22.5 parent: 31 - - uid: 8561 - components: - - type: Transform - pos: -32.5,-25.5 - parent: 31 - uid: 8562 components: - type: Transform @@ -74632,11 +74076,46 @@ entities: - type: Transform pos: -33.5,-22.5 parent: 31 - - uid: 8753 + - uid: 8615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-23.5 + parent: 31 + - uid: 8695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-30.5 + parent: 31 + - uid: 8701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 55.5,-21.5 + parent: 31 + - uid: 8741 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-27.5 + pos: 14.5,20.5 + parent: 31 + - uid: 8743 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-19.5 + parent: 31 + - uid: 8744 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-20.5 + parent: 31 + - uid: 8745 + components: + - type: Transform + pos: 34.5,-19.5 parent: 31 - uid: 8756 components: @@ -74658,31 +74137,159 @@ entities: - type: Transform pos: -15.5,6.5 parent: 31 + - uid: 8775 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-21.5 + parent: 31 + - uid: 8785 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-21.5 + parent: 31 + - uid: 8786 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-19.5 + parent: 31 + - uid: 8799 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,32.5 + parent: 31 + - uid: 8800 + components: + - type: Transform + pos: 5.5,31.5 + parent: 31 + - uid: 8805 + components: + - type: Transform + pos: -3.5,6.5 + parent: 31 - uid: 8806 components: - type: Transform pos: -38.5,20.5 parent: 31 + - uid: 8811 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-19.5 + parent: 31 + - uid: 8812 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-19.5 + parent: 31 + - uid: 8814 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,36.5 + parent: 31 + - uid: 8815 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,32.5 + parent: 31 + - uid: 8818 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,32.5 + parent: 31 + - uid: 8820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,37.5 + parent: 31 + - uid: 8830 + components: + - type: Transform + pos: 38.5,-19.5 + parent: 31 + - uid: 8831 + components: + - type: Transform + pos: -15.5,15.5 + parent: 31 + - uid: 8839 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-19.5 + parent: 31 - uid: 8844 components: - type: Transform pos: -15.5,16.5 parent: 31 + - uid: 8858 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-18.5 + parent: 31 + - uid: 8863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,37.5 + parent: 31 + - uid: 8917 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-19.5 + parent: 31 + - uid: 8919 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-17.5 + parent: 31 + - uid: 8920 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-18.5 + parent: 31 - uid: 8936 components: - type: Transform pos: -12.5,-31.5 parent: 31 + - uid: 8951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-9.5 + parent: 31 + - uid: 8995 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-20.5 + parent: 31 - uid: 9005 components: - type: Transform pos: -12.5,-33.5 parent: 31 - - uid: 9008 + - uid: 9022 components: - type: Transform rot: -1.5707963267948966 rad - pos: -29.5,-25.5 + pos: -31.5,-10.5 parent: 31 - uid: 9106 components: @@ -74755,35 +74362,17 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,-30.5 parent: 31 - - uid: 9254 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-26.5 - parent: 31 - uid: 9258 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,-31.5 parent: 31 - - uid: 9270 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,-28.5 - parent: 31 - - uid: 9271 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-28.5 - parent: 31 - uid: 9272 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,-25.5 + pos: -6.5,26.5 parent: 31 - uid: 9274 components: @@ -74901,6 +74490,12 @@ entities: - type: Transform pos: 3.5,-37.5 parent: 31 + - uid: 9323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,26.5 + parent: 31 - uid: 9327 components: - type: Transform @@ -75012,6 +74607,11 @@ entities: - type: Transform pos: -24.5,-30.5 parent: 31 + - uid: 9447 + components: + - type: Transform + pos: -0.5,30.5 + parent: 31 - uid: 9450 components: - type: Transform @@ -75093,16 +74693,15 @@ entities: - type: Transform pos: 61.5,9.5 parent: 31 - - uid: 9542 + - uid: 9545 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 74.5,12.5 + pos: 65.5,11.5 parent: 31 - - uid: 9545 + - uid: 9555 components: - type: Transform - pos: 65.5,11.5 + pos: -4.5,33.5 parent: 31 - uid: 9564 components: @@ -75110,6 +74709,11 @@ entities: rot: 3.141592653589793 rad pos: 65.5,0.5 parent: 31 + - uid: 9572 + components: + - type: Transform + pos: -1.5,31.5 + parent: 31 - uid: 9584 components: - type: Transform @@ -75228,6 +74832,11 @@ entities: - type: Transform pos: -39.5,20.5 parent: 31 + - uid: 9792 + components: + - type: Transform + pos: -18.5,-17.5 + parent: 31 - uid: 9803 components: - type: Transform @@ -75275,6 +74884,18 @@ entities: - type: Transform pos: 24.5,-15.5 parent: 31 + - uid: 10035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-8.5 + parent: 31 + - uid: 10037 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-10.5 + parent: 31 - uid: 10081 components: - type: Transform @@ -75311,12 +74932,6 @@ entities: rot: -1.5707963267948966 rad pos: 24.5,28.5 parent: 31 - - uid: 10115 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 69.5,-5.5 - parent: 31 - uid: 10116 components: - type: Transform @@ -75335,12 +74950,6 @@ entities: rot: 3.141592653589793 rad pos: 41.5,-14.5 parent: 31 - - uid: 10119 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,-4.5 - parent: 31 - uid: 10128 components: - type: Transform @@ -75407,6 +75016,12 @@ entities: - type: Transform pos: 20.5,-8.5 parent: 31 + - uid: 10389 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 53.5,-25.5 + parent: 31 - uid: 10411 components: - type: Transform @@ -75456,6 +75071,12 @@ entities: - type: Transform pos: -0.5,-22.5 parent: 31 + - uid: 10804 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 71.5,-4.5 + parent: 31 - uid: 10986 components: - type: Transform @@ -75473,31 +75094,60 @@ entities: rot: 1.5707963267948966 rad pos: 47.5,21.5 parent: 31 + - uid: 11051 + components: + - type: Transform + pos: -16.5,15.5 + parent: 31 - uid: 11061 components: - type: Transform rot: 3.141592653589793 rad pos: 54.5,18.5 parent: 31 - - uid: 11114 + - uid: 11082 components: - type: Transform - pos: -8.5,30.5 + rot: 3.141592653589793 rad + pos: 72.5,-3.5 parent: 31 - - uid: 11115 + - uid: 11093 components: - type: Transform - pos: -8.5,29.5 + rot: 3.141592653589793 rad + pos: 72.5,-4.5 + parent: 31 + - uid: 11111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,31.5 parent: 31 - uid: 11116 components: - type: Transform - pos: -8.5,28.5 + pos: 5.5,30.5 parent: 31 - - uid: 11117 + - uid: 11123 components: - type: Transform - pos: -8.5,27.5 + pos: -26.5,-17.5 + parent: 31 + - uid: 11124 + components: + - type: Transform + pos: -29.5,-20.5 + parent: 31 + - uid: 11132 + components: + - type: Transform + pos: 5.5,29.5 + parent: 31 + - uid: 11141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,26.5 parent: 31 - uid: 11142 components: @@ -75509,17 +75159,15 @@ entities: - type: Transform pos: -0.5,-18.5 parent: 31 - - uid: 11148 + - uid: 11146 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,-5.5 + pos: -5.5,-36.5 parent: 31 - - uid: 11150 + - uid: 11148 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,-3.5 + pos: -3.5,-33.5 parent: 31 - uid: 11151 components: @@ -75533,12 +75181,6 @@ entities: rot: 1.5707963267948966 rad pos: 69.5,-3.5 parent: 31 - - uid: 11153 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,-3.5 - parent: 31 - uid: 11154 components: - type: Transform @@ -75551,35 +75193,11 @@ entities: rot: 1.5707963267948966 rad pos: 73.5,-1.5 parent: 31 - - uid: 11157 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,1.5 - parent: 31 - - uid: 11158 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 75.5,-0.5 - parent: 31 - - uid: 11160 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 74.5,-1.5 - parent: 31 - uid: 11165 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,2.5 - parent: 31 - - uid: 11169 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 65.5,-5.5 + rot: 3.141592653589793 rad + pos: -30.5,-28.5 parent: 31 - uid: 11170 components: @@ -75611,53 +75229,23 @@ entities: rot: 1.5707963267948966 rad pos: 75.5,0.5 parent: 31 - - uid: 11178 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 76.5,0.5 - parent: 31 - uid: 11180 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,-4.5 parent: 31 - - uid: 11181 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,-3.5 - parent: 31 - uid: 11182 components: - type: Transform rot: 1.5707963267948966 rad pos: 69.5,-2.5 parent: 31 - - uid: 11183 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,-4.5 - parent: 31 - - uid: 11184 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 73.5,-2.5 - parent: 31 - uid: 11185 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,-5.5 - parent: 31 - - uid: 11186 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,3.5 + rot: 3.141592653589793 rad + pos: -29.5,-29.5 parent: 31 - uid: 11187 components: @@ -75718,12 +75306,6 @@ entities: rot: 1.5707963267948966 rad pos: 74.5,9.5 parent: 31 - - uid: 11813 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,10.5 - parent: 31 - uid: 11814 components: - type: Transform @@ -75772,95 +75354,18 @@ entities: rot: 1.5707963267948966 rad pos: 75.5,1.5 parent: 31 - - uid: 11822 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 74.5,1.5 - parent: 31 - - uid: 11823 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 75.5,2.5 - parent: 31 - - uid: 11824 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 73.5,0.5 - parent: 31 - uid: 11825 components: - type: Transform rot: 1.5707963267948966 rad pos: 73.5,-0.5 parent: 31 - - uid: 11826 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,-0.5 - parent: 31 - uid: 11827 components: - type: Transform rot: 1.5707963267948966 rad pos: 72.5,-1.5 parent: 31 - - uid: 11828 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,-1.5 - parent: 31 - - uid: 11829 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,-2.5 - parent: 31 - - uid: 11830 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 70.5,-2.5 - parent: 31 - - uid: 11842 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 71.5,12.5 - parent: 31 - - uid: 11843 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 72.5,12.5 - parent: 31 - - uid: 11844 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 73.5,12.5 - parent: 31 - - uid: 11846 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 78.5,9.5 - parent: 31 - - uid: 11847 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 77.5,11.5 - parent: 31 - - uid: 12097 - components: - - type: Transform - pos: 59.5,-1.5 - parent: 31 - uid: 12323 components: - type: Transform @@ -75912,6 +75417,11 @@ entities: - type: Transform pos: 15.5,-18.5 parent: 31 + - uid: 54 + components: + - type: Transform + pos: -28.5,1.5 + parent: 31 - uid: 112 components: - type: Transform @@ -75948,21 +75458,11 @@ entities: rot: 3.141592653589793 rad pos: -31.5,1.5 parent: 31 - - uid: 217 - components: - - type: Transform - pos: 14.5,-18.5 - parent: 31 - uid: 251 components: - type: Transform pos: -33.5,16.5 parent: 31 - - uid: 268 - components: - - type: Transform - pos: -13.5,-13.5 - parent: 31 - uid: 343 components: - type: Transform @@ -75975,11 +75475,6 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,-12.5 parent: 31 - - uid: 404 - components: - - type: Transform - pos: -26.5,-7.5 - parent: 31 - uid: 416 components: - type: Transform @@ -75995,35 +75490,39 @@ entities: - type: Transform pos: 19.5,-23.5 parent: 31 - - uid: 477 + - uid: 484 components: - type: Transform - pos: -20.5,-6.5 + pos: 20.5,-23.5 parent: 31 - - uid: 484 + - uid: 492 components: - type: Transform - pos: 20.5,-23.5 + rot: 3.141592653589793 rad + pos: -28.5,2.5 parent: 31 - - uid: 527 + - uid: 502 components: - type: Transform - pos: -14.5,-3.5 + rot: 1.5707963267948966 rad + pos: -7.5,-10.5 parent: 31 - - uid: 528 + - uid: 527 components: - type: Transform - pos: -21.5,-1.5 + rot: -1.5707963267948966 rad + pos: -35.5,-2.5 parent: 31 - uid: 551 components: - type: Transform pos: 8.5,-6.5 parent: 31 - - uid: 582 + - uid: 584 components: - type: Transform - pos: -29.5,-3.5 + rot: 3.141592653589793 rad + pos: -15.5,-5.5 parent: 31 - uid: 587 components: @@ -76102,15 +75601,15 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,-24.5 parent: 31 - - uid: 777 + - uid: 759 components: - type: Transform - pos: -26.5,-14.5 + pos: -19.5,16.5 parent: 31 - - uid: 784 + - uid: 777 components: - type: Transform - pos: -5.5,-13.5 + pos: -26.5,-14.5 parent: 31 - uid: 796 components: @@ -76132,11 +75631,6 @@ entities: - type: Transform pos: -13.5,-6.5 parent: 31 - - uid: 906 - components: - - type: Transform - pos: -14.5,-5.5 - parent: 31 - uid: 907 components: - type: Transform @@ -76197,21 +75691,6 @@ entities: - type: Transform pos: -15.5,2.5 parent: 31 - - uid: 929 - components: - - type: Transform - pos: -20.5,-10.5 - parent: 31 - - uid: 930 - components: - - type: Transform - pos: -20.5,-9.5 - parent: 31 - - uid: 935 - components: - - type: Transform - pos: -16.5,-6.5 - parent: 31 - uid: 960 components: - type: Transform @@ -76237,6 +75716,26 @@ entities: - type: Transform pos: -14.5,-23.5 parent: 31 + - uid: 1050 + components: + - type: Transform + pos: -22.5,-3.5 + parent: 31 + - uid: 1060 + components: + - type: Transform + pos: -28.5,-1.5 + parent: 31 + - uid: 1065 + components: + - type: Transform + pos: -22.5,2.5 + parent: 31 + - uid: 1069 + components: + - type: Transform + pos: -23.5,0.5 + parent: 31 - uid: 1088 components: - type: Transform @@ -76247,11 +75746,6 @@ entities: - type: Transform pos: -34.5,-10.5 parent: 31 - - uid: 1115 - components: - - type: Transform - pos: -21.5,15.5 - parent: 31 - uid: 1124 components: - type: Transform @@ -76262,10 +75756,20 @@ entities: - type: Transform pos: -34.5,-8.5 parent: 31 - - uid: 1170 + - uid: 1189 components: - type: Transform - pos: -23.5,18.5 + pos: -24.5,-2.5 + parent: 31 + - uid: 1209 + components: + - type: Transform + pos: -23.5,-0.5 + parent: 31 + - uid: 1218 + components: + - type: Transform + pos: -23.5,-2.5 parent: 31 - uid: 1245 components: @@ -76292,6 +75796,11 @@ entities: - type: Transform pos: -34.5,-0.5 parent: 31 + - uid: 1293 + components: + - type: Transform + pos: -23.5,-1.5 + parent: 31 - uid: 1294 components: - type: Transform @@ -76312,10 +75821,15 @@ entities: - type: Transform pos: -34.5,-4.5 parent: 31 + - uid: 1314 + components: + - type: Transform + pos: -23.5,2.5 + parent: 31 - uid: 1318 components: - type: Transform - pos: -34.5,-5.5 + pos: -23.5,1.5 parent: 31 - uid: 1321 components: @@ -76327,6 +75841,11 @@ entities: - type: Transform pos: -31.5,-1.5 parent: 31 + - uid: 1338 + components: + - type: Transform + pos: -18.5,13.5 + parent: 31 - uid: 1339 components: - type: Transform @@ -76357,35 +75876,26 @@ entities: - type: Transform pos: 10.5,-21.5 parent: 31 - - uid: 1363 - components: - - type: Transform - pos: -27.5,2.5 - parent: 31 - - uid: 1364 - components: - - type: Transform - pos: -26.5,2.5 - parent: 31 - uid: 1365 components: - type: Transform pos: -1.5,-9.5 parent: 31 - - uid: 1378 + - uid: 1409 components: - type: Transform - pos: -26.5,1.5 + pos: -3.5,-10.5 parent: 31 - uid: 1420 components: - type: Transform pos: 12.5,-18.5 parent: 31 - - uid: 1426 + - uid: 1437 components: - type: Transform - pos: -25.5,1.5 + rot: 1.5707963267948966 rad + pos: -7.5,-11.5 parent: 31 - uid: 1441 components: @@ -76414,11 +75924,6 @@ entities: - type: Transform pos: -1.5,-7.5 parent: 31 - - uid: 1579 - components: - - type: Transform - pos: -22.5,1.5 - parent: 31 - uid: 1587 components: - type: Transform @@ -76429,11 +75934,6 @@ entities: - type: Transform pos: -26.5,15.5 parent: 31 - - uid: 1606 - components: - - type: Transform - pos: -21.5,-0.5 - parent: 31 - uid: 1612 components: - type: Transform @@ -76494,36 +75994,11 @@ entities: - type: Transform pos: -19.5,25.5 parent: 31 - - uid: 1669 - components: - - type: Transform - pos: -20.5,15.5 - parent: 31 - uid: 1670 components: - type: Transform pos: -19.5,24.5 parent: 31 - - uid: 1671 - components: - - type: Transform - pos: -22.5,15.5 - parent: 31 - - uid: 1672 - components: - - type: Transform - pos: -23.5,15.5 - parent: 31 - - uid: 1673 - components: - - type: Transform - pos: -24.5,15.5 - parent: 31 - - uid: 1674 - components: - - type: Transform - pos: -20.5,17.5 - parent: 31 - uid: 1677 components: - type: Transform @@ -76584,11 +76059,6 @@ entities: - type: Transform pos: -21.5,2.5 parent: 31 - - uid: 1823 - components: - - type: Transform - pos: -21.5,0.5 - parent: 31 - uid: 1825 components: - type: Transform @@ -76605,6 +76075,11 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,26.5 parent: 31 + - uid: 1998 + components: + - type: Transform + pos: -21.5,13.5 + parent: 31 - uid: 2008 components: - type: Transform @@ -76655,11 +76130,6 @@ entities: - type: Transform pos: 13.5,-25.5 parent: 31 - - uid: 2028 - components: - - type: Transform - pos: -25.5,-11.5 - parent: 31 - uid: 2034 components: - type: Transform @@ -76680,36 +76150,6 @@ entities: - type: Transform pos: -33.5,10.5 parent: 31 - - uid: 2058 - components: - - type: Transform - pos: -21.5,1.5 - parent: 31 - - uid: 2059 - components: - - type: Transform - pos: -33.5,7.5 - parent: 31 - - uid: 2060 - components: - - type: Transform - pos: -33.5,6.5 - parent: 31 - - uid: 2061 - components: - - type: Transform - pos: -32.5,6.5 - parent: 31 - - uid: 2062 - components: - - type: Transform - pos: -31.5,6.5 - parent: 31 - - uid: 2063 - components: - - type: Transform - pos: -30.5,6.5 - parent: 31 - uid: 2067 components: - type: Transform @@ -76720,16 +76160,6 @@ entities: - type: Transform pos: -26.5,7.5 parent: 31 - - uid: 2070 - components: - - type: Transform - pos: -30.5,7.5 - parent: 31 - - uid: 2071 - components: - - type: Transform - pos: -30.5,8.5 - parent: 31 - uid: 2072 components: - type: Transform @@ -76915,11 +76345,27 @@ entities: - type: Transform pos: 20.5,-4.5 parent: 31 + - uid: 2189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,17.5 + parent: 31 - uid: 2214 components: - type: Transform pos: 6.5,-6.5 parent: 31 + - uid: 2220 + components: + - type: Transform + pos: -28.5,-5.5 + parent: 31 + - uid: 2221 + components: + - type: Transform + pos: -27.5,-5.5 + parent: 31 - uid: 2224 components: - type: Transform @@ -77012,11 +76458,6 @@ entities: - type: Transform pos: -21.5,-11.5 parent: 31 - - uid: 2268 - components: - - type: Transform - pos: -26.5,-10.5 - parent: 31 - uid: 2270 components: - type: Transform @@ -77027,26 +76468,6 @@ entities: - type: Transform pos: -3.5,-11.5 parent: 31 - - uid: 2273 - components: - - type: Transform - pos: -5.5,-11.5 - parent: 31 - - uid: 2274 - components: - - type: Transform - pos: -6.5,-11.5 - parent: 31 - - uid: 2275 - components: - - type: Transform - pos: -6.5,-12.5 - parent: 31 - - uid: 2285 - components: - - type: Transform - pos: -26.5,-17.5 - parent: 31 - uid: 2289 components: - type: Transform @@ -77059,21 +76480,11 @@ entities: rot: 3.141592653589793 rad pos: -29.5,-17.5 parent: 31 - - uid: 2320 - components: - - type: Transform - pos: -8.5,-13.5 - parent: 31 - uid: 2327 components: - type: Transform pos: 23.5,14.5 parent: 31 - - uid: 2346 - components: - - type: Transform - pos: -18.5,-17.5 - parent: 31 - uid: 2347 components: - type: Transform @@ -77111,11 +76522,6 @@ entities: - type: Transform pos: -14.5,-13.5 parent: 31 - - uid: 2368 - components: - - type: Transform - pos: -11.5,-13.5 - parent: 31 - uid: 2369 components: - type: Transform @@ -77162,16 +76568,6 @@ entities: - type: Transform pos: -10.5,-8.5 parent: 31 - - uid: 2379 - components: - - type: Transform - pos: -16.5,-8.5 - parent: 31 - - uid: 2380 - components: - - type: Transform - pos: -16.5,-9.5 - parent: 31 - uid: 2381 components: - type: Transform @@ -77243,37 +76639,11 @@ entities: rot: 3.141592653589793 rad pos: -11.5,-23.5 parent: 31 - - uid: 2430 - components: - - type: Transform - pos: -26.5,-9.5 - parent: 31 - - uid: 2431 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -31.5,8.5 - parent: 31 - - uid: 2435 - components: - - type: Transform - pos: -31.5,-9.5 - parent: 31 - - uid: 2436 - components: - - type: Transform - pos: -30.5,-3.5 - parent: 31 - uid: 2441 components: - type: Transform pos: -34.5,-7.5 parent: 31 - - uid: 2442 - components: - - type: Transform - pos: -31.5,-5.5 - parent: 31 - uid: 2443 components: - type: Transform @@ -77284,6 +76654,12 @@ entities: - type: Transform pos: -31.5,-3.5 parent: 31 + - uid: 2446 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-0.5 + parent: 31 - uid: 2449 components: - type: Transform @@ -77306,56 +76682,11 @@ entities: - type: Transform pos: 13.5,13.5 parent: 31 - - uid: 2461 - components: - - type: Transform - pos: -17.5,-6.5 - parent: 31 - uid: 2463 components: - type: Transform pos: 14.5,13.5 parent: 31 - - uid: 2466 - components: - - type: Transform - pos: -17.5,-4.5 - parent: 31 - - uid: 2467 - components: - - type: Transform - pos: -17.5,-5.5 - parent: 31 - - uid: 2468 - components: - - type: Transform - pos: -17.5,-3.5 - parent: 31 - - uid: 2469 - components: - - type: Transform - pos: -18.5,-3.5 - parent: 31 - - uid: 2470 - components: - - type: Transform - pos: -19.5,-3.5 - parent: 31 - - uid: 2471 - components: - - type: Transform - pos: -20.5,-3.5 - parent: 31 - - uid: 2472 - components: - - type: Transform - pos: -21.5,-3.5 - parent: 31 - - uid: 2473 - components: - - type: Transform - pos: -21.5,-2.5 - parent: 31 - uid: 2503 components: - type: Transform @@ -77392,22 +76723,48 @@ entities: - type: Transform pos: 13.5,-12.5 parent: 31 - - uid: 3376 + - uid: 2772 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,2.5 + parent: 31 + - uid: 2777 + components: + - type: Transform + pos: -27.5,-11.5 + parent: 31 + - uid: 2944 components: - type: Transform - pos: -22.5,18.5 + pos: -29.5,-3.5 parent: 31 - uid: 3405 components: - type: Transform pos: -1.5,-8.5 parent: 31 + - uid: 3408 + components: + - type: Transform + pos: -30.5,-3.5 + parent: 31 + - uid: 3413 + components: + - type: Transform + pos: -14.5,-9.5 + parent: 31 - uid: 3416 components: - type: Transform rot: 1.5707963267948966 rad pos: 17.5,-19.5 parent: 31 + - uid: 3482 + components: + - type: Transform + pos: -22.5,13.5 + parent: 31 - uid: 3592 components: - type: Transform @@ -77419,11 +76776,26 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,-23.5 parent: 31 + - uid: 3617 + components: + - type: Transform + pos: -28.5,-0.5 + parent: 31 - uid: 3623 components: - type: Transform pos: 9.5,24.5 parent: 31 + - uid: 3768 + components: + - type: Transform + pos: -34.5,-6.5 + parent: 31 + - uid: 3771 + components: + - type: Transform + pos: -23.5,-3.5 + parent: 31 - uid: 3875 components: - type: Transform @@ -77435,11 +76807,6 @@ entities: - type: Transform pos: -9.5,-8.5 parent: 31 - - uid: 3916 - components: - - type: Transform - pos: -13.5,-7.5 - parent: 31 - uid: 3925 components: - type: Transform @@ -77497,98 +76864,40 @@ entities: - type: Transform pos: -8.5,-8.5 parent: 31 - - uid: 4064 - components: - - type: Transform - pos: -26.5,-0.5 - parent: 31 - - uid: 4065 - components: - - type: Transform - pos: -27.5,-0.5 - parent: 31 - - uid: 4066 + - uid: 4088 components: - type: Transform - pos: -28.5,-0.5 + pos: -20.5,-3.5 parent: 31 - - uid: 4067 + - uid: 4091 components: - type: Transform - pos: -29.5,-0.5 + rot: -1.5707963267948966 rad + pos: -12.5,-22.5 parent: 31 - - uid: 4068 + - uid: 4094 components: - type: Transform - pos: -30.5,-0.5 + rot: -1.5707963267948966 rad + pos: -12.5,-21.5 parent: 31 - - uid: 4069 + - uid: 4103 components: - type: Transform - pos: -26.5,-3.5 + rot: 3.141592653589793 rad + pos: -24.5,2.5 parent: 31 - - uid: 4070 + - uid: 4105 components: - type: Transform - pos: -27.5,-3.5 + pos: -21.5,-3.5 parent: 31 - - uid: 4071 + - uid: 4108 components: - type: Transform + rot: 3.141592653589793 rad pos: -28.5,-3.5 parent: 31 - - uid: 4072 - components: - - type: Transform - pos: -31.5,-6.5 - parent: 31 - - uid: 4073 - components: - - type: Transform - pos: -26.5,-6.5 - parent: 31 - - uid: 4074 - components: - - type: Transform - pos: -27.5,-6.5 - parent: 31 - - uid: 4075 - components: - - type: Transform - pos: -28.5,-6.5 - parent: 31 - - uid: 4076 - components: - - type: Transform - pos: -29.5,-6.5 - parent: 31 - - uid: 4077 - components: - - type: Transform - pos: -30.5,-6.5 - parent: 31 - - uid: 4080 - components: - - type: Transform - pos: -26.5,-1.5 - parent: 31 - - uid: 4081 - components: - - type: Transform - pos: -26.5,-4.5 - parent: 31 - - uid: 4091 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-22.5 - parent: 31 - - uid: 4094 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,-21.5 - parent: 31 - uid: 4221 components: - type: Transform @@ -77615,11 +76924,6 @@ entities: - type: Transform pos: 0.5,-9.5 parent: 31 - - uid: 4313 - components: - - type: Transform - pos: -3.5,-13.5 - parent: 31 - uid: 4331 components: - type: Transform @@ -77641,16 +76945,6 @@ entities: - type: Transform pos: 34.5,-10.5 parent: 31 - - uid: 4511 - components: - - type: Transform - pos: 29.5,-18.5 - parent: 31 - - uid: 4520 - components: - - type: Transform - pos: 31.5,-18.5 - parent: 31 - uid: 4558 components: - type: Transform @@ -77662,10 +76956,11 @@ entities: - type: Transform pos: 36.5,-16.5 parent: 31 - - uid: 4657 + - uid: 4621 components: - type: Transform - pos: 30.5,-18.5 + rot: 1.5707963267948966 rad + pos: -4.5,-10.5 parent: 31 - uid: 4725 components: @@ -77714,11 +77009,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-24.5 parent: 31 - - uid: 4836 - components: - - type: Transform - pos: -6.5,-13.5 - parent: 31 - uid: 4857 components: - type: Transform @@ -77756,31 +77046,6 @@ entities: - type: Transform pos: 25.5,-22.5 parent: 31 - - uid: 4981 - components: - - type: Transform - pos: -20.5,18.5 - parent: 31 - - uid: 4984 - components: - - type: Transform - pos: -21.5,18.5 - parent: 31 - - uid: 4985 - components: - - type: Transform - pos: -24.5,18.5 - parent: 31 - - uid: 4986 - components: - - type: Transform - pos: -24.5,17.5 - parent: 31 - - uid: 4987 - components: - - type: Transform - pos: -24.5,16.5 - parent: 31 - uid: 5011 components: - type: Transform @@ -77821,11 +77086,6 @@ entities: - type: Transform pos: -18.5,-13.5 parent: 31 - - uid: 5211 - components: - - type: Transform - pos: -25.5,-10.5 - parent: 31 - uid: 5218 components: - type: Transform @@ -77847,6 +77107,11 @@ entities: - type: Transform pos: 13.5,-7.5 parent: 31 + - uid: 5545 + components: + - type: Transform + pos: -31.5,-5.5 + parent: 31 - uid: 5609 components: - type: Transform @@ -77873,6 +77138,12 @@ entities: - type: Transform pos: 13.5,-18.5 parent: 31 + - uid: 6407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,17.5 + parent: 31 - uid: 6524 components: - type: Transform @@ -77883,11 +77154,6 @@ entities: - type: Transform pos: 21.5,-17.5 parent: 31 - - uid: 6697 - components: - - type: Transform - pos: -31.5,-7.5 - parent: 31 - uid: 6965 components: - type: Transform @@ -77903,10 +77169,15 @@ entities: - type: Transform pos: 37.5,-16.5 parent: 31 - - uid: 7046 + - uid: 6979 components: - type: Transform - pos: 31.5,-19.5 + pos: 9.5,-18.5 + parent: 31 + - uid: 6988 + components: + - type: Transform + pos: 11.5,-15.5 parent: 31 - uid: 7089 components: @@ -77928,11 +77199,6 @@ entities: - type: Transform pos: 6.5,-9.5 parent: 31 - - uid: 7330 - components: - - type: Transform - pos: -20.5,-7.5 - parent: 31 - uid: 7357 components: - type: Transform @@ -77979,17 +77245,10 @@ entities: - type: Transform pos: 13.5,-8.5 parent: 31 - - uid: 7598 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-10.5 - parent: 31 - - uid: 7607 + - uid: 7594 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-10.5 + pos: -17.5,-18.5 parent: 31 - uid: 7675 components: @@ -78011,6 +77270,18 @@ entities: - type: Transform pos: 21.5,-16.5 parent: 31 + - uid: 8264 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,-4.5 + parent: 31 + - uid: 8265 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-8.5 + parent: 31 - uid: 8301 components: - type: Transform @@ -78090,41 +77361,47 @@ entities: - type: Transform pos: -12.5,-17.5 parent: 31 - - uid: 8718 + - uid: 8864 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -32.5,-30.5 + pos: -10.5,-17.5 parent: 31 - - uid: 8817 + - uid: 8896 components: - type: Transform - pos: 1.5,29.5 + pos: -11.5,-17.5 parent: 31 - - uid: 8818 + - uid: 8918 components: - type: Transform - pos: 5.5,29.5 + pos: -9.5,-17.5 parent: 31 - - uid: 8864 + - uid: 8922 components: - type: Transform - pos: -10.5,-17.5 + rot: 1.5707963267948966 rad + pos: -12.5,-13.5 parent: 31 - - uid: 8896 + - uid: 8927 components: - type: Transform - pos: -11.5,-17.5 + pos: -28.5,-2.5 parent: 31 - - uid: 8918 + - uid: 8930 components: - type: Transform - pos: -9.5,-17.5 + pos: -8.5,-17.5 parent: 31 - - uid: 8930 + - uid: 8931 components: - type: Transform - pos: -8.5,-17.5 + rot: 1.5707963267948966 rad + pos: -6.5,-10.5 + parent: 31 + - uid: 8932 + components: + - type: Transform + pos: -8.5,-12.5 parent: 31 - uid: 8934 components: @@ -78178,6 +77455,12 @@ entities: - type: Transform pos: 17.5,8.5 parent: 31 + - uid: 9165 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,20.5 + parent: 31 - uid: 9169 components: - type: Transform @@ -78204,11 +77487,15 @@ entities: - type: Transform pos: -30.5,16.5 parent: 31 + - uid: 9252 + components: + - type: Transform + pos: -19.5,13.5 + parent: 31 - uid: 9255 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-13.5 + pos: 11.5,-17.5 parent: 31 - uid: 9256 components: @@ -78278,10 +77565,10 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-26.5 parent: 31 - - uid: 9376 + - uid: 9374 components: - type: Transform - pos: -21.5,-24.5 + pos: -21.5,-9.5 parent: 31 - uid: 9389 components: @@ -78293,6 +77580,11 @@ entities: - type: Transform pos: 5.5,-42.5 parent: 31 + - uid: 9465 + components: + - type: Transform + pos: -21.5,-8.5 + parent: 31 - uid: 9517 components: - type: Transform @@ -78405,6 +77697,11 @@ entities: - type: Transform pos: 25.5,14.5 parent: 31 + - uid: 9707 + components: + - type: Transform + pos: -23.5,-8.5 + parent: 31 - uid: 9713 components: - type: Transform @@ -78435,6 +77732,11 @@ entities: - type: Transform pos: 17.5,16.5 parent: 31 + - uid: 9790 + components: + - type: Transform + pos: -17.5,-9.5 + parent: 31 - uid: 9818 components: - type: Transform @@ -78455,6 +77757,11 @@ entities: - type: Transform pos: 1.5,-24.5 parent: 31 + - uid: 9836 + components: + - type: Transform + pos: -23.5,-7.5 + parent: 31 - uid: 9839 components: - type: Transform @@ -78476,11 +77783,10 @@ entities: - type: Transform pos: 17.5,17.5 parent: 31 - - uid: 9866 + - uid: 9863 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -33.5,8.5 + pos: -23.5,-4.5 parent: 31 - uid: 9880 components: @@ -78497,10 +77803,10 @@ entities: - type: Transform pos: 13.5,-6.5 parent: 31 - - uid: 9919 + - uid: 9980 components: - type: Transform - pos: -5.5,26.5 + pos: -31.5,-20.5 parent: 31 - uid: 9987 components: @@ -78508,6 +77814,11 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,-13.5 parent: 31 + - uid: 10001 + components: + - type: Transform + pos: -30.5,-20.5 + parent: 31 - uid: 10013 components: - type: Transform @@ -78519,25 +77830,30 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-18.5 parent: 31 - - uid: 10035 + - uid: 10038 components: - type: Transform - pos: -17.5,-9.5 + pos: 25.5,18.5 parent: 31 - - uid: 10036 + - uid: 10119 components: - type: Transform - pos: -18.5,-9.5 + pos: -19.5,-28.5 parent: 31 - - uid: 10037 + - uid: 10123 components: - type: Transform - pos: -19.5,-9.5 + pos: -25.5,-28.5 parent: 31 - - uid: 10038 + - uid: 10124 components: - type: Transform - pos: 25.5,18.5 + pos: -26.5,-27.5 + parent: 31 + - uid: 10126 + components: + - type: Transform + pos: -21.5,-28.5 parent: 31 - uid: 10129 components: @@ -78545,6 +77861,36 @@ entities: rot: 3.141592653589793 rad pos: 39.5,-11.5 parent: 31 + - uid: 10132 + components: + - type: Transform + pos: -26.5,-28.5 + parent: 31 + - uid: 10139 + components: + - type: Transform + pos: -24.5,-28.5 + parent: 31 + - uid: 10165 + components: + - type: Transform + pos: -10.5,-10.5 + parent: 31 + - uid: 10178 + components: + - type: Transform + pos: -19.5,-9.5 + parent: 31 + - uid: 10179 + components: + - type: Transform + pos: -17.5,-3.5 + parent: 31 + - uid: 10180 + components: + - type: Transform + pos: -18.5,-3.5 + parent: 31 - uid: 10219 components: - type: Transform @@ -78555,17 +77901,56 @@ entities: - type: Transform pos: -19.5,6.5 parent: 31 + - uid: 10221 + components: + - type: Transform + pos: -31.5,-25.5 + parent: 31 + - uid: 10240 + components: + - type: Transform + pos: -19.5,-4.5 + parent: 31 + - uid: 10241 + components: + - type: Transform + pos: -19.5,-6.5 + parent: 31 + - uid: 10242 + components: + - type: Transform + pos: -19.5,-3.5 + parent: 31 + - uid: 10272 + components: + - type: Transform + pos: -32.5,-25.5 + parent: 31 + - uid: 10317 + components: + - type: Transform + pos: -19.5,-8.5 + parent: 31 + - uid: 10321 + components: + - type: Transform + pos: -19.5,-7.5 + parent: 31 + - uid: 10322 + components: + - type: Transform + pos: -20.5,-9.5 + parent: 31 - uid: 10353 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,-19.5 parent: 31 - - uid: 10359 + - uid: 10358 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-10.5 + pos: -16.5,-9.5 parent: 31 - uid: 10435 components: @@ -78587,23 +77972,30 @@ entities: - type: Transform pos: -34.5,18.5 parent: 31 - - uid: 10474 + - uid: 10477 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,-4.5 + pos: -27.5,-27.5 parent: 31 - - uid: 10476 + - uid: 10535 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,-5.5 + pos: -16.5,-0.5 parent: 31 - - uid: 10581 + - uid: 10542 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-10.5 + pos: -29.5,-25.5 + parent: 31 + - uid: 10558 + components: + - type: Transform + pos: -27.5,-26.5 + parent: 31 + - uid: 10584 + components: + - type: Transform + pos: -22.5,-28.5 parent: 31 - uid: 10597 components: @@ -78641,12 +78033,46 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-10.5 parent: 31 + - uid: 10645 + components: + - type: Transform + pos: -23.5,-28.5 + parent: 31 + - uid: 10646 + components: + - type: Transform + pos: -27.5,-25.5 + parent: 31 + - uid: 11158 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,18.5 + parent: 31 + - uid: 11163 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,18.5 + parent: 31 - uid: 11188 components: - type: Transform rot: -1.5707963267948966 rad pos: -27.5,-24.5 parent: 31 + - uid: 11199 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,-26.5 + parent: 31 + - uid: 11298 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,-12.5 + parent: 31 - uid: 11311 components: - type: Transform @@ -78663,19 +78089,16 @@ entities: - type: Transform pos: -39.5,-5.5 parent: 31 -- proto: WallSolidDiagonal - entities: - - uid: 11189 + - uid: 11647 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-36.5 + rot: 1.5707963267948966 rad + pos: -5.5,-10.5 parent: 31 - - uid: 11194 + - uid: 11856 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-33.5 + pos: 11.5,-16.5 parent: 31 - proto: WallSolidRust entities: @@ -78694,6 +78117,12 @@ entities: - type: Transform pos: 28.5,-18.5 parent: 31 + - uid: 1148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,17.5 + parent: 31 - uid: 1326 components: - type: Transform @@ -78749,11 +78178,6 @@ entities: - type: Transform pos: -27.5,15.5 parent: 31 - - uid: 4006 - components: - - type: Transform - pos: -20.5,20.5 - parent: 31 - uid: 5005 components: - type: Transform @@ -78779,10 +78203,10 @@ entities: - type: Transform pos: 28.5,-19.5 parent: 31 - - uid: 5214 + - uid: 5712 components: - type: Transform - pos: -31.5,-10.5 + pos: -31.5,-6.5 parent: 31 - uid: 8854 components: @@ -78866,36 +78290,6 @@ entities: - type: Transform pos: -25.5,-27.5 parent: 31 -- proto: WardrobePrisonFilled - entities: - - uid: 1161 - components: - - type: Transform - pos: -13.5,7.5 - parent: 31 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14963 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - uid: 1957 - components: - - type: Transform - pos: -7.5,8.5 - parent: 31 - proto: WardrobeRoboticsFilled entities: - uid: 9616 @@ -78903,33 +78297,6 @@ entities: - type: Transform pos: -2.5,-25.5 parent: 31 -- proto: WardrobeWhite - entities: - - uid: 7110 - components: - - type: MetaData - desc: Smells of formaldehyde, smoke and menthol. - name: mortician's wardrobe - - type: Transform - pos: 15.536513,-13.5 - parent: 31 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 4231 - - 7101 - - 7107 - - 7102 - - 7109 - - 7098 - - 7108 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null - proto: WarningCO2 entities: - uid: 11013 @@ -79004,6 +78371,11 @@ entities: parent: 31 - type: WarpPoint location: hop's office + - uid: 4707 + components: + - type: Transform + pos: 2.5,33.5 + parent: 31 - uid: 4910 components: - type: Transform @@ -79046,13 +78418,6 @@ entities: parent: 31 - type: WarpPoint location: captain's quarters - - uid: 11308 - components: - - type: Transform - pos: 3.5,30.5 - parent: 31 - - type: WarpPoint - location: bridge - uid: 11309 components: - type: Transform @@ -79095,25 +78460,20 @@ entities: - type: Transform pos: 1.5,16.5 parent: 31 - - uid: 2217 + - uid: 2379 components: - type: Transform - pos: -5.5,15.5 + pos: -5.5,27.5 parent: 31 - uid: 2500 components: - type: Transform pos: -10.5,-18.5 parent: 31 - - uid: 5314 - components: - - type: Transform - pos: -2.5,31.5 - parent: 31 - - uid: 7533 + - uid: 5708 components: - type: Transform - pos: 49.5,-18.5 + pos: -7.5,10.5 parent: 31 - uid: 9098 components: @@ -79127,6 +78487,11 @@ entities: - type: Transform pos: 27.5,-2.5 parent: 31 + - uid: 1879 + components: + - type: Transform + pos: -24.5,18.5 + parent: 31 - uid: 7986 components: - type: Transform @@ -79147,17 +78512,17 @@ entities: - type: Transform pos: 39.5,-13.5 parent: 31 -- proto: WaterTankHighCapacity - entities: - - uid: 4897 + - uid: 10724 components: - type: Transform - pos: -20.5,1.5 + pos: -21.5,-2.5 parent: 31 - - uid: 7896 +- proto: WaterTankHighCapacity + entities: + - uid: 10355 components: - type: Transform - pos: -17.5,-11.5 + pos: -20.5,-8.5 parent: 31 - proto: WaterVaporCanister entities: @@ -79178,18 +78543,10 @@ entities: - type: Transform pos: -2.5,7.5 parent: 31 - - uid: 8809 - components: - - type: Transform - pos: 2.5,31.5 - parent: 31 - - type: Physics - canCollide: False - - uid: 10477 + - uid: 11117 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,15.5 + pos: -0.5,31.5 parent: 31 - proto: WeaponDisabler entities: @@ -79210,22 +78567,37 @@ entities: parent: 31 - proto: WeaponShotgunKammerer entities: + - uid: 1051 + components: + - type: Transform + pos: -13.448327,18.775608 + parent: 31 - uid: 8072 components: - type: Transform pos: -13.420591,18.645054 parent: 31 - - uid: 8996 +- proto: WeaponTurretSyndicateBroken + entities: + - uid: 7016 components: - type: Transform - pos: -13.373716,18.332554 + pos: 46.5,-27.5 parent: 31 -- proto: WeaponWaterBlaster - entities: - - uid: 8127 + - uid: 7114 components: - type: Transform - pos: -35.20547,-23.785456 + pos: 52.5,-21.5 + parent: 31 + - uid: 7241 + components: + - type: Transform + pos: 52.5,-27.5 + parent: 31 + - uid: 8077 + components: + - type: Transform + pos: 46.5,-21.5 parent: 31 - proto: Welder entities: @@ -79261,11 +78633,6 @@ entities: - type: Transform pos: 40.5,11.5 parent: 31 - - uid: 1368 - components: - - type: Transform - pos: -9.5,-9.5 - parent: 31 - uid: 2418 components: - type: Transform @@ -79301,6 +78668,11 @@ entities: - type: Transform pos: 2.5,-40.5 parent: 31 + - uid: 12527 + components: + - type: Transform + pos: -8.5,-11.5 + parent: 31 - proto: WheatSeeds entities: - uid: 9677 @@ -79308,6 +78680,14 @@ entities: - type: Transform pos: -1.6659715,-42.461594 parent: 31 +- proto: WhoopieCushion + entities: + - uid: 5548 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.799765,-10.132835 + parent: 31 - proto: Windoor entities: - uid: 1030 @@ -79355,12 +78735,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-32.5 parent: 31 - - uid: 8717 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -35.5,-27.5 - parent: 31 - uid: 8852 components: - type: Transform @@ -79383,6 +78757,14 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,0.5 parent: 31 +- proto: WindoorKitchenLocked + entities: + - uid: 7232 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,0.5 + parent: 31 - proto: WindoorSecureArmoryLocked entities: - uid: 5151 @@ -79418,6 +78800,44 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-0.5 parent: 31 +- proto: WindoorSecureCommandLocked + entities: + - uid: 615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-16.5 + parent: 31 + - uid: 4671 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-16.5 + parent: 31 + - uid: 7010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-24.5 + parent: 31 + - uid: 8689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-24.5 + parent: 31 + - uid: 10793 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-16.5 + parent: 31 + - uid: 12535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-16.5 + parent: 31 - proto: WindoorSecureEngineeringLocked entities: - uid: 8851 @@ -79484,22 +78904,40 @@ entities: parent: 31 - proto: Window entities: + - uid: 261 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-12.5 + parent: 31 - uid: 264 components: - type: Transform rot: -1.5707963267948966 rad pos: 8.5,-7.5 parent: 31 - - uid: 836 + - uid: 268 components: - type: Transform - pos: 54.5,-2.5 + rot: -1.5707963267948966 rad + pos: -19.5,2.5 parent: 31 - - uid: 920 + - uid: 370 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,-0.5 + rot: -1.5707963267948966 rad + pos: -5.5,-13.5 + parent: 31 + - uid: 413 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-15.5 + parent: 31 + - uid: 836 + components: + - type: Transform + pos: 54.5,-2.5 parent: 31 - uid: 997 components: @@ -79518,11 +78956,6 @@ entities: - type: Transform pos: -18.5,2.5 parent: 31 - - uid: 1191 - components: - - type: Transform - pos: -19.5,2.5 - parent: 31 - uid: 1332 components: - type: Transform @@ -79609,6 +79042,16 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-14.5 parent: 31 + - uid: 4069 + components: + - type: Transform + pos: -27.5,-6.5 + parent: 31 + - uid: 4075 + components: + - type: Transform + pos: -27.5,-7.5 + parent: 31 - uid: 4262 components: - type: Transform @@ -79624,25 +79067,27 @@ entities: - type: Transform pos: -8.5,-24.5 parent: 31 - - uid: 5036 + - uid: 5547 components: - type: Transform - pos: -17.5,-18.5 + rot: 3.141592653589793 rad + pos: -13.5,-13.5 parent: 31 - - uid: 5222 + - uid: 5996 components: - type: Transform - pos: 11.5,-16.5 + pos: -25.5,-8.5 parent: 31 - - uid: 6286 + - uid: 6076 components: - type: Transform - pos: 49.5,-6.5 + rot: -1.5707963267948966 rad + pos: -21.5,4.5 parent: 31 - - uid: 7437 + - uid: 6286 components: - type: Transform - pos: 11.5,-17.5 + pos: 49.5,-6.5 parent: 31 - uid: 7438 components: @@ -79659,11 +79104,6 @@ entities: - type: Transform pos: 22.5,14.5 parent: 31 - - uid: 7461 - components: - - type: Transform - pos: 11.5,-15.5 - parent: 31 - uid: 7548 components: - type: Transform @@ -79748,6 +79188,11 @@ entities: rot: 3.141592653589793 rad pos: -18.5,-19.5 parent: 31 + - uid: 11852 + components: + - type: Transform + pos: -6.5,-13.5 + parent: 31 - proto: WindowDirectional entities: - uid: 197 @@ -79755,53 +79200,23 @@ entities: - type: Transform pos: -6.5,-28.5 parent: 31 - - uid: 1343 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,-8.5 - parent: 31 - uid: 2311 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-24.5 parent: 31 - - uid: 7321 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-8.5 - parent: 31 - uid: 8207 components: - type: Transform pos: -5.5,-28.5 parent: 31 - - uid: 8710 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -33.5,-26.5 - parent: 31 - uid: 8713 components: - type: Transform rot: 1.5707963267948966 rad pos: -32.5,-31.5 parent: 31 - - uid: 8714 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-27.5 - parent: 31 - - uid: 8716 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -36.5,-27.5 - parent: 31 - uid: 10273 components: - type: Transform @@ -79814,17 +79229,28 @@ entities: parent: 31 - proto: WindowReinforcedDirectional entities: - - uid: 2044 + - uid: 477 components: - type: Transform rot: 1.5707963267948966 rad - pos: -30.5,-29.5 + pos: -8.5,30.5 parent: 31 - - uid: 2118 + - uid: 524 components: - type: Transform rot: 1.5707963267948966 rad - pos: -30.5,-28.5 + pos: -8.5,29.5 + parent: 31 + - uid: 525 + components: + - type: Transform + pos: -8.5,38.5 + parent: 31 + - uid: 1368 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-15.5 parent: 31 - uid: 2227 components: @@ -79850,17 +79276,44 @@ entities: rot: 3.141592653589793 rad pos: 66.5,0.5 parent: 31 - - uid: 3743 + - uid: 2472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,32.5 + parent: 31 + - uid: 2558 + components: + - type: Transform + pos: -12.5,27.5 + parent: 31 + - uid: 2726 + components: + - type: Transform + pos: 47.5,-15.5 + parent: 31 + - uid: 2782 components: - type: Transform rot: -1.5707963267948966 rad - pos: -29.5,-29.5 + pos: -3.5,35.5 parent: 31 - - uid: 3780 + - uid: 3784 components: - type: Transform rot: -1.5707963267948966 rad - pos: -29.5,-28.5 + pos: -3.5,34.5 + parent: 31 + - uid: 3785 + components: + - type: Transform + pos: -5.5,38.5 + parent: 31 + - uid: 4125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,28.5 parent: 31 - uid: 4155 components: @@ -79873,6 +79326,16 @@ entities: rot: 3.141592653589793 rad pos: 67.5,0.5 parent: 31 + - uid: 4256 + components: + - type: Transform + pos: -21.5,27.5 + parent: 31 + - uid: 4292 + components: + - type: Transform + pos: -9.5,27.5 + parent: 31 - uid: 4392 components: - type: Transform @@ -79993,6 +79456,12 @@ entities: - type: Transform pos: 66.5,4.5 parent: 31 + - uid: 6089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,32.5 + parent: 31 - uid: 6752 components: - type: Transform @@ -80037,58 +79506,122 @@ entities: - type: Transform pos: 67.5,4.5 parent: 31 - - uid: 8887 + - uid: 6982 components: - type: Transform rot: -1.5707963267948966 rad - pos: 32.5,5.5 + pos: 48.5,-15.5 parent: 31 - - uid: 8902 + - uid: 7003 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,6.5 + rot: 3.141592653589793 rad + pos: 50.5,-15.5 parent: 31 - - uid: 8942 + - uid: 7156 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,1.5 + pos: -9.5,38.5 parent: 31 - - uid: 8943 + - uid: 7229 components: - type: Transform - pos: 19.5,0.5 + rot: -1.5707963267948966 rad + pos: 6.5,34.5 parent: 31 - - uid: 11143 + - uid: 7230 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-20.5 + pos: 6.5,35.5 parent: 31 - - uid: 11368 + - uid: 7271 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-19.5 + pos: 6.5,33.5 parent: 31 - - uid: 11719 + - uid: 7341 + components: + - type: Transform + pos: -6.5,38.5 + parent: 31 + - uid: 7426 + components: + - type: Transform + pos: 3.5,37.5 + parent: 31 + - uid: 7457 + components: + - type: Transform + pos: 4.5,37.5 + parent: 31 + - uid: 7470 + components: + - type: Transform + pos: 0.5,37.5 + parent: 31 + - uid: 7510 + components: + - type: Transform + pos: -0.5,37.5 + parent: 31 + - uid: 7511 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,35.5 + parent: 31 + - uid: 7598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,34.5 + parent: 31 + - uid: 7602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,33.5 + parent: 31 + - uid: 7856 + components: + - type: Transform + pos: -18.5,27.5 + parent: 31 + - uid: 8148 + components: + - type: Transform + pos: 51.5,-15.5 + parent: 31 + - uid: 8291 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,-23.5 + pos: 49.5,-15.5 parent: 31 - - uid: 11720 + - uid: 8293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-15.5 + parent: 31 + - uid: 11143 components: - type: Transform rot: -1.5707963267948966 rad - pos: -19.5,-23.5 + pos: -2.5,-20.5 parent: 31 - - uid: 11721 + - uid: 11184 + components: + - type: Transform + pos: -15.5,27.5 + parent: 31 + - uid: 11368 components: - type: Transform rot: -1.5707963267948966 rad - pos: -19.5,-24.5 + pos: -2.5,-19.5 parent: 31 - uid: 12974 components: @@ -80100,11 +79633,6 @@ entities: - type: Transform pos: -22.5,27.5 parent: 31 - - uid: 12976 - components: - - type: Transform - pos: -21.5,27.5 - parent: 31 - uid: 12977 components: - type: Transform @@ -80118,23 +79646,11 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-33.5 parent: 31 - - uid: 4285 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-27.5 - parent: 31 - - uid: 4557 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-26.5 - parent: 31 - - uid: 4617 + - uid: 7724 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,-24.5 + pos: -21.5,-24.5 parent: 31 - uid: 8101 components: @@ -80142,17 +79658,11 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-34.5 parent: 31 - - uid: 8517 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-25.5 - parent: 31 - - uid: 11490 + - uid: 11133 components: - type: Transform rot: -1.5707963267948966 rad - pos: -24.5,-25.5 + pos: -21.5,-25.5 parent: 31 - uid: 11666 components: @@ -80172,15 +79682,12 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-27.5 parent: 31 - - uid: 11669 +- proto: Wirecutter + entities: + - uid: 9549 components: - type: Transform - pos: 5.5,-27.5 - parent: 31 - - uid: 11670 - components: - - type: Transform - pos: 6.5,-27.5 + pos: -21.39914,17.52145 parent: 31 - proto: WoodDoor entities: @@ -80194,11 +79701,6 @@ entities: - type: Transform pos: -38.5,16.5 parent: 31 - - uid: 4209 - components: - - type: Transform - pos: -21.5,-26.5 - parent: 31 - uid: 11481 components: - type: Transform @@ -80266,6 +79768,18 @@ entities: rot: -1.5707963267948966 rad pos: -4.5729136,-32.437004 parent: 31 + - uid: 7671 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.672195,17.432777 + parent: 31 + - uid: 9994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.371792,-9.595388 + parent: 31 - uid: 10984 components: - type: Transform diff --git a/Resources/Prototypes/Maps/saltern.yml b/Resources/Prototypes/Maps/saltern.yml index 154a35a16dc..9b26bbc3c17 100644 --- a/Resources/Prototypes/Maps/saltern.yml +++ b/Resources/Prototypes/Maps/saltern.yml @@ -53,8 +53,6 @@ Detective: [ 1, 1 ] SecurityOfficer: [ 4, 6 ] SecurityCadet: [ 4, 6 ] - Brigmedic: [ 1, 1 ] - Prisoner: [ 1, 2 ] #supply Quartermaster: [ 1, 1 ] SalvageSpecialist: [ 1, 3 ] From aab36bfe65d82cff13bb6d8b6a55c2b70a031aa2 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 18 Dec 2024 01:33:01 +0000 Subject: [PATCH 162/182] Automatic Changelog Update (#1357) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d2f5743cb09..96e64517caa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8706,3 +8706,10 @@ Entries: id: 6582 time: '2024-12-16T17:55:06.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1342 +- author: SiN Mapping Team + changes: + - type: Add + message: Saltern has been fully reworked! + id: 6583 + time: '2024-12-18T01:32:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1357 From bf1b0d03aede161d62aedfc9166589335a5d7c4c Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:51:33 -0400 Subject: [PATCH 163/182] v237.3.0 (#1354) the robust toolbox updater!! https://github.com/space-wizards/RobustToolbox/blob/v237.3.0/RELEASE-NOTES.md --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 92b0e7f1a85..9c30fdf5fd7 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 92b0e7f1a853979a1361ed24d2fb5ffc11f43f66 +Subproject commit 9c30fdf5fd7261ea424f80478c2746e2001326e8 From 3c1ed56ed3122866b32249006496c37be825c82a Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Thu, 19 Dec 2024 17:52:31 -0500 Subject: [PATCH 164/182] Hotfix Saltern (#1359) # Description Small maintenance to do. Bridge needed FixGridAtmos done, and a single light in dorms needed wiring. # Changelog :cl: - fix: Fixed the Saltern bridge being a hard vacuum at roundstart. --- Resources/Maps/saltern.yml | 2178 +++++++++++++++++++----------------- 1 file changed, 1166 insertions(+), 1012 deletions(-) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index adb89e10095..e88865dc9b1 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -278,23 +278,25 @@ entities: -5,-4: 0: 61695 -4,-3: - 0: 47871 + 0: 14591 -4,-2: - 0: 12731 - 1: 49152 + 0: 703 + 1: 57344 + -5,-3: + 0: 57975 -5,-2: - 0: 47935 - -5,-1: - 0: 65528 + 0: 61422 -4,-1: + 1: 14 0: 61056 - 1: 12 + -5,-1: + 0: 32760 -4,0: 0: 61695 -3,-4: - 0: 54527 + 0: 24063 -3,-3: - 0: 3581 + 0: 3549 -3,-2: 0: 247 1: 28672 @@ -306,9 +308,9 @@ entities: -3,0: 0: 61695 -2,-4: - 0: 53503 + 0: 57599 -2,-3: - 0: 65529 + 0: 65294 -2,-2: 0: 65520 -2,-1: @@ -318,9 +320,9 @@ entities: -2,0: 0: 63487 -1,-4: - 0: 53503 + 0: 53759 -1,-3: - 0: 48124 + 0: 48108 -1,-2: 0: 65520 -1,-1: @@ -330,7 +332,7 @@ entities: -1,0: 0: 61695 0,-4: - 0: 52991 + 0: 20222 0,-3: 0: 56573 0,-2: @@ -350,13 +352,13 @@ entities: -4,3: 0: 61424 -5,3: - 0: 16241 + 0: 32577 -4,4: 0: 61070 -3,1: - 0: 41215 + 0: 53503 -3,2: - 0: 65450 + 0: 65421 -3,3: 0: 64988 -3,4: @@ -372,9 +374,9 @@ entities: -1,1: 0: 58623 -1,2: - 0: 16142 + 0: 65294 -1,3: - 0: 3003 + 0: 4095 -1,4: 0: 4095 0,0: @@ -384,7 +386,7 @@ entities: 0,2: 0: 56797 0,3: - 0: 52701 + 0: 19933 0,-5: 0: 65263 1,-4: @@ -408,7 +410,7 @@ entities: 2,-1: 0: 65535 2,-5: - 0: 30511 + 0: 30479 2,0: 0: 61695 3,-4: @@ -420,7 +422,7 @@ entities: 3,-1: 0: 64985 3,-5: - 0: 65295 + 0: 65359 3,0: 0: 61661 4,-4: @@ -515,43 +517,44 @@ entities: -1,5: 0: 58623 0,6: - 0: 51711 + 0: 36351 -1,6: 0: 3822 0,7: - 0: 65503 + 0: 65279 -1,7: - 0: 61166 + 0: 41967 0,8: - 0: 15 - 2: 3840 + 0: 65535 1,5: 0: 53439 1,6: - 0: 7421 + 0: 3581 1,7: - 0: 65503 + 0: 4369 + 2: 17484 1,8: - 0: 15 - 2: 40704 + 0: 4369 + 2: 17476 2,5: 0: 53367 2,6: 0: 1405 2,7: - 0: 4915 - 2: 34944 - 2,8: - 2: 36 + 2: 7 3,5: - 0: 4181 + 0: 4210 + 2: 32768 3,6: - 0: 4881 + 0: 13073 + 2: 8 + 3,7: + 2: 4 4,5: 0: 273 - 2: 17476 + 2: 29764 -8,0: - 0: 61678 + 0: 61550 -9,0: 0: 64413 -8,1: @@ -569,32 +572,34 @@ entities: -8,4: 0: 477 2: 49152 + -8,-1: + 0: 26208 -7,0: - 0: 64671 + 0: 63487 -7,1: 0: 40191 -7,2: 0: 49087 -7,3: - 0: 20472 - -7,4: - 0: 58983 + 0: 53240 -7,-1: - 0: 52732 + 0: 65407 + -7,4: + 0: 61039 -6,0: - 0: 62363 + 0: 61678 -6,1: - 0: 5119 + 0: 5115 -6,2: 0: 6007 -6,3: - 0: 4092 - -6,-1: - 0: 48051 + 0: 65436 -6,4: - 0: 61567 + 0: 65151 + -6,-1: + 0: 61152 -5,4: - 0: 30527 + 0: 30310 4,-5: 0: 61152 5,-4: @@ -639,7 +644,7 @@ entities: 0: 65524 0,-9: 0: 52416 - 2: 275 + 2: 273 1,-8: 0: 65488 1,-7: @@ -664,91 +669,88 @@ entities: 3,-6: 0: 64733 4,-8: - 0: 39299 + 0: 4483 2: 17484 4,-7: - 0: 65289 - 2: 4 + 0: 65281 + 2: 12 4,-6: 0: 61152 4,-9: - 2: 17476 - 0: 34952 + 2: 16384 + 0: 32768 5,-8: 2: 21855 - 0: 43680 + 0: 160 5,-7: - 2: 5 - 0: 63242 + 2: 15 + 0: 63232 5,-9: - 2: 21845 - 0: 43690 + 2: 20480 + 0: 40960 5,-6: 0: 26214 6,-8: 2: 21855 - 0: 43680 + 0: 160 6,-7: - 2: 5 - 0: 56586 + 2: 15 + 0: 56576 6,-6: 0: 61919 6,-9: - 2: 21845 - 0: 43690 + 2: 20480 + 0: 40960 7,-8: - 2: 4383 - 0: 8736 + 2: 21855 + 0: 160 7,-7: - 2: 8749 - 0: 2 + 2: 8751 7,-5: - 0: 36614 + 0: 36846 7,-9: - 2: 4369 - 0: 8738 + 2: 20767 + 0: 40960 7,-6: - 2: 1570 + 2: 3618 8,-8: - 2: 1 + 2: 21855 + 0: 160 8,-7: 2: 15 - 0: 65280 8,-6: - 0: 13119 - 2: 2048 + 2: 3840 8,-5: - 0: 3891 + 0: 4016 -4,5: 0: 238 -4,6: 0: 255 2: 61440 + -5,5: + 0: 58982 -5,6: 0: 238 2: 61440 - -4,7: - 2: 2289 - -5,7: - 2: 240 -3,5: 0: 3295 -3,6: 0: 255 - 2: 12288 + 2: 61440 -3,7: - 2: 8816 + 2: 51406 -3,8: - 2: 3086 + 2: 14 + 0: 52224 -2,5: 0: 52701 -2,6: - 0: 63743 + 0: 59647 -2,7: - 0: 255 + 0: 61166 -1,8: - 0: 8 - 2: 36640 + 0: 34952 + 2: 13104 -9,4: 0: 7400 -8,5: @@ -764,32 +766,36 @@ entities: 2: 43695 0: 21840 -8,7: - 2: 242 + 2: 2039 -9,7: - 2: 240 + 2: 28671 -7,6: - 2: 62465 + 2: 63249 0: 14 -7,7: 2: 16 -7,5: 0: 1038 + 2: 4352 -6,5: - 0: 65319 + 0: 65327 -6,6: 0: 255 - -6,7: - 2: 240 - -5,5: - 0: 26215 + 2: 61440 + -3,9: + 0: 12 + 2: 3584 -2,8: - 2: 7967 + 0: 30560 + -2,9: + 0: 7 + 2: 3840 -1,9: - 2: 142 + 2: 405 0,9: - 2: 15 + 2: 240 4,6: - 2: 4 + 2: 550 0: 34816 5,5: 0: 30583 @@ -801,32 +807,26 @@ entities: 0: 255 2: 53248 6,6: - 2: 35049 + 2: 35561 7,5: 0: 36063 2: 4096 7,6: 2: 53196 - 7,7: - 2: 12 8,4: 0: 4351 2: 57344 8,5: 0: 272 - 3: 17472 + 4: 17472 8,6: - 2: 65521 - 8,7: - 2: 15 + 2: 4081 1,9: - 2: 15 - 2,9: - 2: 1 + 2: 18 9,0: 0: 65102 9,1: - 0: 3839 + 0: 3838 9,2: 0: 61917 9,3: @@ -855,10 +855,10 @@ entities: 0: 53759 11,2: 0: 4319 - 4: 49152 + 3: 49152 11,3: 0: 61457 - 4: 204 + 3: 204 11,-1: 0: 30583 11,4: @@ -870,9 +870,9 @@ entities: 0: 28791 12,2: 0: 119 - 4: 28672 + 3: 28672 12,3: - 4: 119 + 3: 119 0: 61440 12,-1: 0: 29311 @@ -901,9 +901,9 @@ entities: 14,2: 0: 15235 14,3: - 2: 32760 + 2: 65528 14,4: - 2: 28979 + 2: 62455 15,0: 0: 56797 15,1: @@ -911,14 +911,14 @@ entities: 15,2: 0: 3548 15,3: - 2: 28671 + 2: 32767 15,4: - 2: 8754 + 2: 12850 15,-1: - 0: 52428 + 0: 52701 16,0: 0: 13116 - 4: 52416 + 3: 52416 16,1: 0: 65484 16,2: @@ -936,22 +936,29 @@ entities: 9,-2: 0: 58999 9,-5: - 0: 18176 + 0: 18288 10,-4: 0: 65024 + 2: 8 10,-3: 0: 65520 10,-2: 0: 63743 + 10,-5: + 2: 34956 11,-4: 0: 13056 - 2: 128 + 2: 2184 11,-3: 0: 43946 11,-2: 0: 30250 + 11,-5: + 0: 32776 + 2: 17968 12,-4: - 2: 1265 + 0: 7 + 2: 1272 12,-3: 0: 65535 12,-2: @@ -993,16 +1000,15 @@ entities: -1,-6: 0: 30065 -8,-8: - 0: 52227 - 2: 8712 + 0: 35331 + 2: 8 -8,-9: 0: 12288 - 2: 35056 + 2: 35064 -9,-8: - 0: 65356 - 2: 1 + 0: 56653 -8,-7: - 0: 63740 + 0: 63742 -9,-7: 0: 46079 -8,-6: @@ -1041,7 +1047,7 @@ entities: 0: 61440 2: 34 -6,-7: - 0: 36494 + 0: 52878 -6,-4: 0: 62463 -5,-9: @@ -1051,27 +1057,23 @@ entities: 0: 34952 2: 800 -8,-3: - 0: 65039 + 0: 3663 -9,-3: 0: 56797 -8,-2: - 0: 60942 + 0: 59119 -9,-2: - 0: 56829 + 0: 57309 -9,-1: - 0: 56797 - -8,-1: - 0: 3808 - -7,-3: - 0: 64907 + 0: 56781 -7,-2: - 0: 57293 + 0: 65262 + -7,-3: + 0: 44782 -6,-3: - 0: 63291 + 0: 41915 -6,-2: - 0: 30583 - -5,-3: - 0: 28791 + 0: 61166 -12,0: 0: 3855 -13,0: @@ -1133,16 +1135,15 @@ entities: -10,-5: 2: 32776 12,-5: - 2: 61440 - 0: 127 + 0: 62079 + 13,-4: + 2: 2808 13,-3: 0: 48059 13,-2: 0: 63243 - 13,-4: - 2: 2280 13,-5: - 2: 35304 + 2: 39912 14,-4: 2: 1039 14,-3: @@ -1151,56 +1152,59 @@ entities: 14,-2: 0: 65283 14,-1: - 0: 2047 + 0: 4095 14,-5: - 2: 17476 + 2: 17600 15,-4: 2: 8739 15,-3: 2: 62066 15,-2: - 0: 4352 + 0: 7424 2: 206 15,-5: - 2: 8704 + 2: 8721 16,-3: 2: 61440 16,-2: 2: 255 + 0: 3840 16,-1: 0: 53247 + 8,-9: + 2: 24143 + 0: 41120 + 9,-8: + 2: 15 9,-7: 2: 15 - 0: 65280 9,-6: - 0: 15 2: 3840 + 10,-8: + 2: 55703 10,-7: - 2: 7 - 0: 65280 + 2: 8743 + 0: 34816 10,-6: - 0: 15 - 2: 34560 - 10,-8: - 2: 34816 + 2: 50978 + 0: 8 + 10,-9: + 2: 40847 + 11,-8: + 2: 54 + 0: 2048 11,-7: - 0: 65534 + 0: 64988 11,-6: - 0: 61183 - 10,-5: - 2: 8 - 11,-8: - 2: 52 - 0: 59392 - 11,-5: - 2: 33840 - 0: 8 + 0: 3293 + 11,-9: + 2: 49921 12,-8: - 0: 65392 + 0: 12144 12,-7: - 0: 65535 + 0: 63743 12,-6: - 0: 65535 + 0: 24568 20,-1: 2: 256 19,-1: @@ -1209,36 +1213,48 @@ entities: 2: 16179 19,0: 2: 39118 + 0: 17441 20,1: 2: 14135 19,1: 2: 39321 + 0: 17476 20,2: 2: 29495 19,2: 2: 53179 + 0: 8260 20,3: 2: 35 19,3: 2: 4095 + 12,-9: + 2: 61440 13,-8: - 2: 34913 - 0: 12288 + 2: 35043 13,-7: - 0: 65395 + 0: 64849 13,-6: - 0: 13183 + 0: 349 2: 32768 + 13,-9: + 2: 4096 + 14,-8: + 2: 6144 14,-7: - 2: 26213 + 2: 8739 14,-6: - 2: 17766 - 14,-8: - 2: 17476 - 14,-9: - 2: 17476 + 2: 4898 + 15,-8: + 2: 4352 + 15,-7: + 2: 4369 + 15,-6: + 2: 4369 -11,5: 2: 35916 + -11,7: + 2: 35840 -10,5: 2: 39296 0: 17488 @@ -1247,10 +1263,15 @@ entities: -10,6: 0: 21569 2: 35230 + -10,7: + 2: 4040 + -11,8: + 2: 34952 -10,4: 0: 61152 - -10,7: - 2: 192 + -9,8: + 0: 2827 + 2: 25844 0,-12: 2: 79 0: 12288 @@ -1268,7 +1289,7 @@ entities: 0: 255 2: 36864 -1,-9: - 2: 3513 + 2: 3257 1,-12: 2: 4375 1,-11: @@ -1287,46 +1308,51 @@ entities: 2: 18240 3,-9: 2: 1396 - 4,-10: - 2: 17408 - 0: 34816 - 5,-10: - 2: 22000 - 0: 43520 - 6,-10: - 2: 22000 - 0: 43520 + 7,-12: + 2: 7455 + 7,-11: + 2: 7453 7,-10: - 2: 4592 - 0: 8704 + 2: 4381 + 8,-12: + 2: 20303 + 8,-11: + 2: 20303 8,-10: - 2: 240 + 2: 20047 + 0: 40960 9,5: 5: 4368 - 4: 17472 + 3: 17472 9,6: - 2: 8176 + 2: 12272 10,5: - 4: 4368 + 3: 4368 6: 17472 10,6: 2: 4080 11,5: - 4: 21840 + 3: 21840 11,6: - 2: 4080 + 2: 61424 + 11,7: + 2: 12 12,5: 2: 65535 12,6: - 2: 255 + 2: 65535 + 12,7: + 2: 15 13,5: 2: 55705 13,6: - 2: 127 + 2: 16383 + 13,7: + 2: 1 + 14,5: + 2: 30591 14,6: 2: 7 - 14,5: - 2: 17484 15,5: 2: 35 -4,-10: @@ -1341,7 +1367,6 @@ entities: 0: 34944 -2,-10: 0: 1019 - 2: 16384 -2,-11: 2: 544 0: 2176 @@ -1349,19 +1374,21 @@ entities: 2: 61696 17,-2: 2: 3327 + 0: 768 17,-1: 0: 4369 - 2: 52416 + 2: 52428 17,0: - 0: 17921 + 0: 19969 2: 8 - 4: 4368 + 3: 4368 18,-3: 2: 4096 18,-2: - 2: 63477 + 2: 59381 18,-1: 2: 15358 + 0: 33792 18,0: 2: 65399 19,-2: @@ -1379,30 +1406,89 @@ entities: 2: 2190 18,3: 2: 40959 + 12,-10: + 2: 61440 + 11,-10: + 2: 61440 + 13,-10: + 2: 7936 14,-10: - 2: 17520 + 2: 256 + 9,-12: + 2: 1807 + 9,-11: + 2: 1799 9,-10: - 2: 16 + 2: 7 + 9,-9: + 2: 3855 + 10,-12: + 2: 4369 + 10,-11: + 2: 4369 + 10,-10: + 2: 4369 + -12,-8: + 2: 64170 + -13,-8: + 2: 64170 + -12,-7: + 2: 64170 + -13,-7: + 2: 64170 + -12,-9: + 2: 61440 -11,-8: - 2: 60074 + 2: 64170 -11,-7: - 2: 2730 + 2: 64170 + -11,-9: + 2: 61440 -10,-8: - 2: 12846 - 0: 34816 + 2: 12834 + 0: 34828 -10,-7: - 2: 8738 + 2: 12834 0: 34952 + -10,-9: + 2: 13288 + 0: 32768 -10,-6: 2: 57378 0: 8 -9,-9: - 2: 4600 - 0: 49152 + 0: 61440 + 2: 248 + -13,-9: + 2: 61440 + -11,-10: + 2: 8 + -10,-10: + 2: 63631 + -10,-12: + 2: 59592 + -9,-12: + 2: 63743 + -10,-11: + 2: 34952 + -9,-11: + 2: 63736 -9,-10: - 2: 63728 + 2: 63736 + -9,-13: + 2: 61440 + -8,-12: + 2: 63743 + -8,-11: + 2: 63736 -8,-10: - 2: 28784 + 2: 63736 + -8,-13: + 2: 29696 + -7,-12: + 2: 1808 + -7,-11: + 2: 240 -6,-11: 2: 8192 -6,-10: @@ -1412,9 +1498,53 @@ entities: -14,2: 0: 3598 -14,-3: - 0: 3272 + 0: 3276 -13,-4: 0: 4096 + -11,9: + 2: 35980 + -11,10: + 2: 51336 + -10,8: + 2: 497 + 0: 3084 + -10,9: + 2: 449 + 0: 3084 + -10,10: + 2: 4593 + 0: 3084 + -10,11: + 2: 227 + -9,9: + 0: 2827 + 2: 21748 + -9,10: + 0: 2827 + 2: 58612 + -9,11: + 2: 254 + -8,8: + 0: 1799 + 2: 112 + -8,9: + 0: 1799 + 2: 4208 + -8,10: + 0: 1799 + 2: 112 + -8,11: + 2: 48 + -15,-8: + 2: 34944 + -14,-8: + 2: 64443 + -15,-7: + 2: 136 + -14,-7: + 2: 64443 + -14,-9: + 2: 61440 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -1465,7 +1595,7 @@ entities: temperature: 293.15 moles: - 0 - - 6666.982 + - 0 - 0 - 0 - 0 @@ -1480,7 +1610,7 @@ entities: temperature: 293.15 moles: - 0 - - 0 + - 6666.982 - 0 - 0 - 0 @@ -1534,55 +1664,55 @@ entities: color: '#FFFFFFFF' id: Arrows decals: - 552: -12,-30 + 446: -12,-30 - node: color: '#FFFFFFFF' id: Arrows decals: - 489: 20,17 - 504: 20,17 - 508: 20,27 - 553: -12,-29 + 383: 20,17 + 398: 20,17 + 402: 20,27 + 447: -12,-29 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Arrows decals: - 505: 22,17 - 509: 22,27 + 399: 22,17 + 403: 22,27 - node: color: '#C3C3C3FF' id: Bot decals: - 904: -35,-24 - 909: -32,-32 - 910: -31,-32 + 757: -35,-24 + 762: -32,-32 + 763: -31,-32 - node: color: '#FFFFFFFF' id: Bot decals: - 483: -35,6 - 484: -30,11 - 514: -3,-31 - 760: 31,8 - 761: 31,9 + 377: -35,6 + 378: -30,11 + 408: -3,-31 + 613: 31,8 + 614: 31,9 - node: zIndex: 1 color: '#FFFFFFFF' id: Bot decals: - 607: 20,7 - 608: 21,7 - 609: 22,7 - 681: -7,-26 - 682: -6,-26 + 481: 20,7 + 482: 21,7 + 483: 22,7 + 550: -7,-26 + 551: -6,-26 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Bot decals: - 506: 20,17 - 507: 22,17 + 400: 20,17 + 401: 22,17 - node: color: '#FFFFFFFF' id: BotRight @@ -1593,688 +1723,688 @@ entities: color: '#C3C3C3FF' id: Box decals: - 922: -33,-29 - 923: -33,-28 + 775: -33,-29 + 776: -33,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerNe decals: - 687: -9,-28 + 556: -9,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerNw decals: - 688: -10,-28 + 557: -10,-28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerSe decals: - 686: -9,-30 + 555: -9,-30 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkCornerSw decals: - 685: -10,-30 + 554: -10,-30 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSe decals: - 759: -11,20 + 612: -11,20 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileDarkInnerSe decals: - 619: 6,17 + 488: 6,17 - node: color: '#FFFFFFFF' id: BrickTileDarkLineE decals: - 661: 0,-25 - 883: -1,29 - 884: -1,28 + 530: 0,-25 + 736: -1,29 + 737: -1,28 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineE decals: - 689: -9,-29 + 558: -9,-29 - node: color: '#FFFFFFFF' id: BrickTileDarkLineN decals: - 656: -6,-23 - 657: -5,-23 - 658: -4,-23 - 881: 3,30 - 882: 4,30 + 525: -6,-23 + 526: -5,-23 + 527: -4,-23 + 734: 3,30 + 735: 4,30 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineN decals: - 696: 12,-14 - 697: 13,-14 - 698: 14,-14 - 699: 15,-14 + 565: 12,-14 + 566: 13,-14 + 567: 14,-14 + 568: 15,-14 - node: color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 756: -8,20 - 757: -9,20 - 758: -10,20 + 609: -8,20 + 610: -9,20 + 611: -10,20 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 615: 10,17 - 616: 9,17 - 617: 8,17 - 618: 7,17 + 484: 10,17 + 485: 9,17 + 486: 8,17 + 487: 7,17 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 700: 12,-18 - 701: 13,-18 - 702: 14,-18 - 703: 15,-18 + 569: 12,-18 + 570: 13,-18 + 571: 14,-18 + 572: 15,-18 - node: color: '#FFFFFFFF' id: BrickTileDarkLineW decals: - 662: -2,-25 + 531: -2,-25 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileDarkLineW decals: - 690: -10,-29 + 559: -10,-29 - node: zIndex: 2 color: '#D381C9FF' id: BrickTileSteelCornerNe decals: - 684: -6,-26 + 553: -6,-26 - node: color: '#D381C9FF' id: BrickTileSteelCornerNw decals: - 670: -4,-26 + 539: -4,-26 - node: color: '#D381C9FF' id: BrickTileSteelCornerSe decals: - 676: -8,-24 + 545: -8,-24 - node: color: '#D381C9E5' id: BrickTileSteelCornerSw decals: - 543: -12,-32 + 437: -12,-32 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerSw decals: - 772: 25,19 + 625: 25,19 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelEndE decals: - 594: -36,-11 - 595: -41,-11 - 596: -47,-11 + 468: -36,-11 + 469: -41,-11 + 470: -47,-11 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelEndW decals: - 591: -50,-11 - 592: -43,-11 - 593: -38,-11 + 465: -50,-11 + 466: -43,-11 + 467: -38,-11 - node: color: '#C3C3C3FF' id: BrickTileSteelInnerNe decals: - 898: -34,-32 - 927: -35,-27 + 751: -34,-32 + 780: -35,-27 - node: color: '#D381C9E5' id: BrickTileSteelInnerNe decals: - 547: -10,-26 + 441: -10,-26 - node: color: '#D381C9FF' id: BrickTileSteelInnerNe decals: - 660: -6,-27 - 675: 0,-29 - 680: -13,-19 + 529: -6,-27 + 544: 0,-29 + 549: -13,-19 - node: color: '#D381C9FF' id: BrickTileSteelInnerNw decals: - 669: -4,-27 - 671: -3,-26 + 538: -4,-27 + 540: -3,-26 - node: color: '#C3C3C3FF' id: BrickTileSteelInnerSe decals: - 908: -34,-30 - 918: -36,-28 - 919: -33,-30 + 761: -34,-30 + 771: -36,-28 + 772: -33,-30 - node: color: '#D381C9E5' id: BrickTileSteelInnerSe decals: - 537: -18,-28 - 540: -7,-33 + 431: -18,-28 + 434: -7,-33 - node: color: '#D381C9FF' id: BrickTileSteelInnerSe decals: - 672: 0,-26 - 677: -8,-23 + 541: 0,-26 + 546: -8,-23 - node: color: '#C3C3C3FF' id: BrickTileSteelInnerSw decals: - 885: -34,-28 + 738: -34,-28 - node: color: '#D381C9E5' id: BrickTileSteelInnerSw decals: - 519: -12,-20 - 544: -12,-31 + 413: -12,-20 + 438: -12,-31 - node: color: '#C3C3C3FF' id: BrickTileSteelLineE decals: - 895: -33,-29 - 896: -33,-28 - 897: -34,-31 - 902: -35,-26 - 903: -35,-25 - 906: -33,-30 - 917: -36,-29 - 926: -36,-30 + 748: -33,-29 + 749: -33,-28 + 750: -34,-31 + 755: -35,-26 + 756: -35,-25 + 759: -33,-30 + 770: -36,-29 + 779: -36,-30 - node: color: '#D381C9FF' id: BrickTileSteelLineE decals: - 673: 0,-27 - 674: 0,-28 + 542: 0,-27 + 543: 0,-28 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineE decals: - 605: -36,-9 + 479: -36,-9 - node: color: '#C3C3C3FF' id: BrickTileSteelLineN decals: - 893: -37,-24 - 894: -36,-24 - 899: -33,-32 - 900: -33,-27 - 901: -34,-27 + 746: -37,-24 + 747: -36,-24 + 752: -33,-32 + 753: -33,-27 + 754: -34,-27 - node: color: '#D381C9E5' id: BrickTileSteelLineN decals: - 521: -8,-19 - 522: -9,-19 - 523: -10,-19 - 524: -11,-19 - 546: -9,-26 + 415: -8,-19 + 416: -9,-19 + 417: -10,-19 + 418: -11,-19 + 440: -9,-26 - node: color: '#D381C9FF' id: BrickTileSteelLineN decals: - 659: -8,-26 - 679: -12,-19 + 528: -8,-26 + 548: -12,-19 - node: zIndex: 2 color: '#D381C9FF' id: BrickTileSteelLineN decals: - 683: -7,-26 + 552: -7,-26 - node: color: '#FFFFFFFF' id: BrickTileSteelLineN decals: - 515: -11,-24 + 409: -11,-24 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineN decals: - 597: -49,-11 - 598: -48,-11 - 599: -42,-11 - 600: -37,-11 + 471: -49,-11 + 472: -48,-11 + 473: -42,-11 + 474: -37,-11 - node: color: '#C3C3C3FF' id: BrickTileSteelLineS decals: - 888: -33,-33 - 907: -33,-30 - 911: -34,-33 - 916: -37,-30 - 924: -35,-28 - 925: -36,-30 + 741: -33,-33 + 760: -33,-30 + 764: -34,-33 + 769: -37,-30 + 777: -35,-28 + 778: -36,-30 - node: color: '#D381C9E5' id: BrickTileSteelLineS decals: - 520: -13,-20 - 533: -17,-28 - 534: -16,-28 - 535: -15,-28 - 536: -14,-28 - 538: -5,-33 - 539: -6,-33 - 542: -11,-32 - 545: -13,-31 + 414: -13,-20 + 427: -17,-28 + 428: -16,-28 + 429: -15,-28 + 430: -14,-28 + 432: -5,-33 + 433: -6,-33 + 436: -11,-32 + 439: -13,-31 - node: color: '#D381C9FF' id: BrickTileSteelLineS decals: - 678: -9,-24 + 547: -9,-24 - node: color: '#FFFFFFFF' id: BrickTileSteelLineS decals: - 629: 57,5 - 630: 56,5 - 769: 26,19 - 770: 27,19 - 771: 28,19 + 498: 57,5 + 499: 56,5 + 622: 26,19 + 623: 27,19 + 624: 28,19 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineS decals: - 601: -48,-11 - 602: -49,-11 - 603: -42,-11 - 604: -37,-11 + 475: -48,-11 + 476: -49,-11 + 477: -42,-11 + 478: -37,-11 - node: color: '#C3C3C3FF' id: BrickTileSteelLineW decals: - 886: -34,-29 - 887: -34,-32 - 889: -37,-27 - 890: -37,-26 - 891: -37,-25 - 892: -37,-24 - 905: -34,-30 - 915: -37,-28 + 739: -34,-29 + 740: -34,-32 + 742: -37,-27 + 743: -37,-26 + 744: -37,-25 + 745: -37,-24 + 758: -34,-30 + 768: -37,-28 - node: color: '#D381C9E5' id: BrickTileSteelLineW decals: - 516: -12,-23 - 517: -12,-22 - 518: -12,-21 + 410: -12,-23 + 411: -12,-22 + 412: -12,-21 - node: color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 773: 25,20 - 774: 25,21 + 626: 25,20 + 627: 25,21 - node: zIndex: 1 color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 606: -38,-9 + 480: -38,-9 - node: color: '#689F54FF' id: BrickTileWhiteCornerNe decals: - 957: -21,-5 + 791: -21,-5 - node: color: '#689F54FF' id: BrickTileWhiteCornerNw decals: - 958: -23,-5 + 792: -23,-5 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteCornerSe decals: - 736: -8,7 + 592: -8,7 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteCornerSw decals: - 726: 7,-18 + 588: 7,-18 - node: color: '#A4610696' id: BrickTileWhiteCornerSw decals: - 779: 18,15 + 632: 18,15 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteCornerSw decals: - 737: -14,7 + 593: -14,7 - node: color: '#52B4E996' id: BrickTileWhiteEndE decals: - 643: 49,-12 + 512: 49,-12 - node: color: '#9FED5896' id: BrickTileWhiteEndE decals: - 639: 52,-10 + 508: 52,-10 - node: color: '#A4610696' id: BrickTileWhiteEndE decals: - 646: 52,-8 + 515: 52,-8 - node: color: '#D381C996' id: BrickTileWhiteEndE decals: - 642: 52,-12 + 511: 52,-12 - node: color: '#D4D4D496' id: BrickTileWhiteEndE decals: - 638: 49,-10 + 507: 49,-10 - node: color: '#EFB34196' id: BrickTileWhiteEndE decals: - 631: 49,-8 + 500: 49,-8 - node: color: '#334E6DC8' id: BrickTileWhiteEndN decals: - 633: 57,-8 + 502: 57,-8 - node: color: '#DE3A3A96' id: BrickTileWhiteEndN decals: - 636: 57,-11 + 505: 57,-11 - node: color: '#334E6DC8' id: BrickTileWhiteEndS decals: - 634: 57,-9 + 503: 57,-9 - node: color: '#DE3A3A96' id: BrickTileWhiteEndS decals: - 635: 57,-12 + 504: 57,-12 - node: color: '#52B4E996' id: BrickTileWhiteEndW decals: - 644: 48,-12 + 513: 48,-12 - node: color: '#9FED5896' id: BrickTileWhiteEndW decals: - 640: 51,-10 + 509: 51,-10 - node: color: '#A4610696' id: BrickTileWhiteEndW decals: - 645: 51,-8 + 514: 51,-8 - node: color: '#D381C996' id: BrickTileWhiteEndW decals: - 641: 51,-12 + 510: 51,-12 - node: color: '#D4D4D496' id: BrickTileWhiteEndW decals: - 637: 48,-10 + 506: 48,-10 - node: color: '#EFB34196' id: BrickTileWhiteEndW decals: - 632: 48,-8 + 501: 48,-8 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteInnerSe decals: - 712: 19,-13 + 581: 19,-13 - node: color: '#A4610696' id: BrickTileWhiteInnerSe decals: - 777: 22,15 + 630: 22,15 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteInnerSw decals: - 711: 17,-13 + 580: 17,-13 - node: color: '#A4610696' id: BrickTileWhiteInnerSw decals: - 778: 19,15 + 631: 19,15 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileWhiteInnerSw decals: - 707: 20,-18 + 576: 20,-18 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineE decals: - 709: 19,-14 + 578: 19,-14 - node: color: '#689F54FF' id: BrickTileWhiteLineE decals: - 955: -21,-8 - 956: -21,-7 + 789: -21,-8 + 790: -21,-7 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineE decals: - 738: -8,8 + 594: -8,8 - node: color: '#689F54FF' id: BrickTileWhiteLineN decals: - 959: -22,-5 + 793: -22,-5 - node: color: '#A4610696' id: BrickTileWhiteLineN decals: - 765: 26,10 - 766: 27,10 + 618: 26,10 + 619: 27,10 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineS decals: - 720: 8,-18 - 721: 9,-18 - 727: 10,-18 + 582: 8,-18 + 583: 9,-18 + 589: 10,-18 - node: color: '#A4610696' id: BrickTileWhiteLineS decals: - 767: 26,8 - 768: 27,8 - 775: 24,15 - 776: 23,15 - 782: 26,15 - 783: 27,15 - 784: 28,15 + 620: 26,8 + 621: 27,8 + 628: 24,15 + 629: 23,15 + 635: 26,15 + 636: 27,15 + 637: 28,15 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineS decals: - 734: -9,7 - 735: -13,7 + 590: -9,7 + 591: -13,7 - node: zIndex: 2 color: '#FFFFFFFF' id: BrickTileWhiteLineS decals: - 704: 17,-18 - 705: 18,-18 - 706: 19,-18 + 573: 17,-18 + 574: 18,-18 + 575: 19,-18 - node: zIndex: 2 color: '#52B4E996' id: BrickTileWhiteLineW decals: - 710: 17,-14 - 722: 7,-17 - 723: 7,-16 - 724: 7,-15 - 725: 7,-14 + 579: 17,-14 + 584: 7,-17 + 585: 7,-16 + 586: 7,-15 + 587: 7,-14 - node: color: '#689F54FF' id: BrickTileWhiteLineW decals: - 952: -23,-7 - 953: -23,-6 - 960: -23,-8 + 787: -23,-7 + 788: -23,-6 + 794: -23,-8 - node: color: '#A4610696' id: BrickTileWhiteLineW decals: - 780: 18,16 - 781: 18,17 + 633: 18,16 + 634: 18,17 - node: color: '#EFB34196' id: BrickTileWhiteLineW decals: - 789: 48,-6 - 790: 48,-5 - 791: 48,-4 - 792: 48,-3 + 642: 48,-6 + 643: 48,-5 + 644: 48,-4 + 645: 48,-3 - node: zIndex: 2 color: '#EFB34196' id: BrickTileWhiteLineW decals: - 739: -14,8 + 595: -14,8 - node: color: '#FFFFFFFF' id: Caution decals: - 655: 58,-5 + 524: 58,-5 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Caution decals: - 116: 53,2 + 81: 53,2 - node: color: '#52B4E996' id: CheckerNWSE decals: - 376: 21,-8 - 377: 21,-7 - 378: 21,-6 - 379: 21,-5 - 380: 22,-8 - 381: 22,-7 - 382: 22,-6 - 383: 22,-5 - 384: 23,-8 - 385: 23,-7 - 386: 23,-6 - 387: 23,-5 - 388: 24,-8 - 389: 24,-7 - 390: 24,-6 - 391: 24,-5 + 270: 21,-8 + 271: 21,-7 + 272: 21,-6 + 273: 21,-5 + 274: 22,-8 + 275: 22,-7 + 276: 22,-6 + 277: 22,-5 + 278: 23,-8 + 279: 23,-7 + 280: 23,-6 + 281: 23,-5 + 282: 24,-8 + 283: 24,-7 + 284: 24,-6 + 285: 24,-5 - node: color: '#D381C996' id: CheckerNWSE decals: - 439: -3,-23 + 333: -3,-23 - node: color: '#D4D4D428' id: CheckerNWSE decals: - 448: -40,4 - 449: -40,5 - 450: -40,6 - 451: -36,4 - 452: -36,5 - 453: -36,6 - 464: -37,0 - 465: -37,1 - 466: -37,2 - 467: -37,8 - 468: -37,9 - 469: -37,10 - 485: -37,-8 - 486: -37,-7 - 487: -37,-6 - 488: -37,-5 + 342: -40,4 + 343: -40,5 + 344: -40,6 + 345: -36,4 + 346: -36,5 + 347: -36,6 + 358: -37,0 + 359: -37,1 + 360: -37,2 + 361: -37,8 + 362: -37,9 + 363: -37,10 + 379: -37,-8 + 380: -37,-7 + 381: -37,-6 + 382: -37,-5 - node: color: '#FFFFFFFF' id: Delivery decals: - 541: -8,-33 - 664: -1,-31 + 435: -8,-33 + 533: -1,-31 - node: color: '#FFFFFFFF' id: DirtHeavy decals: - 294: -16,10 - 295: -17,11 + 259: -16,10 + 260: -17,11 - node: cleanable: True color: '#FFFFFFFF' id: DirtHeavy decals: - 499: -24,-25 + 393: -24,-25 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtHeavy decals: - 744: -20,10 - 748: -20,9 - 749: -18,9 + 597: -20,10 + 601: -20,9 + 602: -18,9 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtHeavyMonotile decals: - 747: -20,8 + 600: -20,8 - node: color: '#FFFFFFFF' id: DirtLight decals: - 298: -18,10 - 299: -17,9 + 263: -18,10 + 264: -17,9 - node: cleanable: True color: '#FFFFFFFF' @@ -2306,42 +2436,42 @@ entities: 69: 34,-5 70: 33,0 71: 7,5 - 118: 52,1 - 119: 53,3 - 120: 57,4 - 121: 45,5 - 122: 35,2 - 470: -40,0 - 471: -36,1 - 472: -38,7 - 473: -40,8 - 474: -38,-4 - 475: -36,-8 - 476: -24,-9 - 477: -24,3 - 478: -25,2 - 479: -7,3 - 481: -36,8 - 482: -38,9 - 490: -23,-24 - 491: -25,-23 - 492: -23,-22 - 493: -25,-25 - 494: -24,-24 - 495: -24,-22 + 83: 52,1 + 84: 53,3 + 85: 57,4 + 86: 45,5 + 87: 35,2 + 364: -40,0 + 365: -36,1 + 366: -38,7 + 367: -40,8 + 368: -38,-4 + 369: -36,-8 + 370: -24,-9 + 371: -24,3 + 372: -25,2 + 373: -7,3 + 375: -36,8 + 376: -38,9 + 384: -23,-24 + 385: -25,-23 + 386: -23,-22 + 387: -25,-25 + 388: -24,-24 + 389: -24,-22 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtLight decals: - 745: -19,9 + 598: -19,9 - node: color: '#FFFFFFFF' id: DirtMedium decals: - 296: -17,10 - 297: -18,8 + 261: -17,10 + 262: -18,8 - node: cleanable: True color: '#FFFFFFFF' @@ -2350,68 +2480,68 @@ entities: 43: 26,17 44: 24,17 65: 37,6 - 117: 53,1 - 480: -35,8 - 496: -23,-25 - 497: -25,-22 - 498: -25,-24 + 82: 53,1 + 374: -35,8 + 390: -23,-25 + 391: -25,-22 + 392: -25,-24 - node: cleanable: True zIndex: 2 color: '#FFFFFFFF' id: DirtMedium decals: - 743: -19,10 - 746: -19,8 + 596: -19,10 + 599: -19,8 - node: color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 132: 13,-7 - 407: 10,-7 - 408: 9,-7 - 423: 10,-10 - 424: 10,-9 - 425: 9,-10 - 426: 10,-11 - 427: 11,-10 + 97: 13,-7 + 301: 10,-7 + 302: 9,-7 + 317: 10,-10 + 318: 10,-9 + 319: 9,-10 + 320: 10,-11 + 321: 11,-10 - node: zIndex: 2 color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 691: 9,-3 - 692: 9,-2 - 693: 10,-2 - 694: 8,-2 - 695: 9,-1 + 560: 9,-3 + 561: 9,-2 + 562: 10,-2 + 563: 8,-2 + 564: 9,-1 - node: color: '#EFB34196' id: FullTileOverlayGreyscale decals: - 213: 36,3 - 214: 36,4 - 215: 36,5 - 300: 30,3 + 178: 36,3 + 179: 36,4 + 180: 36,5 + 265: 30,3 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale decals: - 123: 19,-5 - 124: 18,-5 - 125: 17,-5 - 126: 16,-5 - 127: 15,-5 - 128: 14,-5 - 152: 6,1 - 153: 7,1 - 154: 8,1 - 155: 9,1 - 156: 10,1 - 157: 11,1 - 409: 9,-8 - 410: 10,-8 - 411: 11,-8 + 88: 19,-5 + 89: 18,-5 + 90: 17,-5 + 91: 16,-5 + 92: 15,-5 + 93: 14,-5 + 117: 6,1 + 118: 7,1 + 119: 8,1 + 120: 9,1 + 121: 10,1 + 122: 11,1 + 303: 9,-8 + 304: 10,-8 + 305: 11,-8 - node: color: '#A4610696' id: HalfTileOverlayGreyscale @@ -2424,105 +2554,105 @@ entities: color: '#BD575DFF' id: HalfTileOverlayGreyscale decals: - 1016: -9,17 - 1017: -8,17 - 1018: -7,17 - 1045: -11,11 - 1046: -12,11 - 1047: -13,11 + 808: -9,17 + 809: -8,17 + 810: -7,17 + 820: -11,11 + 821: -12,11 + 822: -13,11 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale decals: - 168: 0,5 - 169: -1,5 - 170: -2,5 - 171: -4,5 - 172: -3,5 - 173: -7,5 - 174: -8,5 - 175: -9,5 - 176: -10,5 - 177: -11,5 - 178: -12,5 - 179: -13,5 - 180: -14,5 - 181: -15,5 - 182: -16,5 - 183: -17,5 - 184: -18,5 + 133: 0,5 + 134: -1,5 + 135: -2,5 + 136: -4,5 + 137: -3,5 + 138: -7,5 + 139: -8,5 + 140: -9,5 + 141: -10,5 + 142: -11,5 + 143: -12,5 + 144: -13,5 + 145: -14,5 + 146: -15,5 + 147: -16,5 + 148: -17,5 + 149: -18,5 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale decals: 27: 30,-2 - 223: 49,5 - 224: 48,5 - 225: 47,5 - 226: 46,5 - 227: 45,5 - 232: 43,9 - 234: 42,9 - 239: 41,6 - 240: 40,6 - 241: 39,6 - 242: 38,6 + 188: 49,5 + 189: 48,5 + 190: 47,5 + 191: 46,5 + 192: 45,5 + 197: 43,9 + 199: 42,9 + 204: 41,6 + 205: 40,6 + 206: 39,6 + 207: 38,6 - node: color: '#FFD886FF' id: HalfTileOverlayGreyscale decals: - 141: 19,1 - 142: 18,1 - 143: 17,1 - 144: 16,1 - 145: 15,1 - 146: 14,1 + 106: 19,1 + 107: 18,1 + 108: 17,1 + 109: 16,1 + 110: 15,1 + 111: 14,1 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale180 decals: - 166: 5,30 + 131: 5,30 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale180 decals: - 401: 11,-6 - 402: 10,-6 - 403: 9,-6 - 404: 8,-6 - 405: 7,-6 - 406: 6,-6 - 416: 11,-12 - 417: 10,-12 - 418: 9,-12 - 433: 15,-12 - 434: 16,-12 + 295: 11,-6 + 296: 10,-6 + 297: 9,-6 + 298: 8,-6 + 299: 7,-6 + 300: 6,-6 + 310: 11,-12 + 311: 10,-12 + 312: 9,-12 + 327: 15,-12 + 328: 16,-12 - node: color: '#BD575DFF' id: HalfTileOverlayGreyscale180 decals: - 1004: -7,10 - 1005: -8,10 - 1006: -9,10 - 1042: -11,10 - 1043: -12,10 - 1044: -13,10 + 798: -7,10 + 799: -8,10 + 800: -9,10 + 817: -11,10 + 818: -12,10 + 819: -13,10 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale180 decals: - 203: -13,13 - 204: -14,13 - 205: -15,13 + 168: -13,13 + 169: -14,13 + 170: -15,13 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale180 decals: - 161: 34,-5 - 162: 33,-5 - 163: 32,-5 - 164: 31,-5 - 165: 30,-5 + 126: 34,-5 + 127: 33,-5 + 128: 32,-5 + 129: 31,-5 + 130: 30,-5 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -2531,31 +2661,31 @@ entities: 6: 0,24 7: 0,25 8: 0,26 - 270: 1,16 - 271: 1,17 - 272: 1,18 - 273: 1,19 - 274: 1,20 - 275: 1,21 - 276: 6,7 - 277: 6,8 - 278: 6,9 - 279: 6,10 - 280: 6,11 + 235: 1,16 + 236: 1,17 + 237: 1,18 + 238: 1,19 + 239: 1,20 + 240: 1,21 + 241: 6,7 + 242: 6,8 + 243: 6,9 + 244: 6,10 + 245: 6,11 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale270 decals: - 130: 14,-6 - 131: 14,-7 - 419: 6,-12 - 420: 6,-11 - 421: 6,-9 - 422: 6,-8 - 428: 14,-8 - 429: 14,-9 - 430: 14,-10 - 431: 14,-11 + 95: 14,-6 + 96: 14,-7 + 313: 6,-12 + 314: 6,-11 + 315: 6,-9 + 316: 6,-8 + 322: 14,-8 + 323: 14,-9 + 324: 14,-10 + 325: 14,-11 - node: color: '#A4610696' id: HalfTileOverlayGreyscale270 @@ -2564,18 +2694,18 @@ entities: 10: 12,10 11: 12,11 12: 12,12 - 189: 12,6 - 190: 12,7 + 154: 12,6 + 155: 12,7 - node: color: '#BD575DFF' id: HalfTileOverlayGreyscale270 decals: - 1010: -10,11 - 1011: -10,12 - 1012: -10,13 - 1013: -10,14 - 1014: -10,15 - 1015: -10,16 + 802: -10,11 + 803: -10,12 + 804: -10,13 + 805: -10,14 + 806: -10,15 + 807: -10,16 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale270 @@ -2598,53 +2728,53 @@ entities: 25: 29,-2 29: 31,-1 30: 31,0 - 207: 31,6 - 216: 37,2 - 217: 37,3 - 218: 37,4 - 219: 37,5 - 220: 37,6 - 236: 42,8 - 237: 42,7 - 628: 55,2 + 172: 31,6 + 181: 37,2 + 182: 37,3 + 183: 37,4 + 184: 37,5 + 185: 37,6 + 201: 42,8 + 202: 42,7 + 497: 55,2 - node: color: '#FFD886FF' id: HalfTileOverlayGreyscale270 decals: - 148: 14,0 - 149: 14,-1 - 150: 14,-2 - 151: 14,-3 + 113: 14,0 + 114: 14,-1 + 115: 14,-2 + 116: 14,-3 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 decals: - 264: 5,16 - 265: 5,17 - 266: 5,18 - 267: 5,19 - 268: 5,20 - 269: 5,21 - 281: 10,7 - 282: 10,8 - 283: 10,9 - 284: 10,10 - 285: 10,11 + 229: 5,16 + 230: 5,17 + 231: 5,18 + 232: 5,19 + 233: 5,20 + 234: 5,21 + 246: 10,7 + 247: 10,8 + 248: 10,9 + 249: 10,10 + 250: 10,11 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale90 decals: - 133: 12,-6 - 134: 12,-5 - 135: 12,-4 - 136: 12,-3 - 137: 12,-2 - 138: 12,-1 - 139: 12,0 - 140: 12,1 - 413: 12,-9 - 414: 12,-10 - 801: 12,-11 + 98: 12,-6 + 99: 12,-5 + 100: 12,-4 + 101: 12,-3 + 102: 12,-2 + 103: 12,-1 + 104: 12,0 + 105: 12,1 + 307: 12,-9 + 308: 12,-10 + 654: 12,-11 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 @@ -2652,39 +2782,39 @@ entities: 38: 16,11 39: 16,10 40: 16,9 - 191: 16,7 - 192: 16,6 - 193: 24,13 - 194: 24,12 - 195: 24,11 - 196: 24,10 - 197: 24,9 - 198: 24,8 + 156: 16,7 + 157: 16,6 + 158: 24,13 + 159: 24,12 + 160: 24,11 + 161: 24,10 + 162: 24,9 + 163: 24,8 - node: color: '#BD575DFF' id: HalfTileOverlayGreyscale90 decals: - 964: -5,8 - 1019: -6,16 - 1020: -6,15 - 1026: -5,12 + 797: -5,8 + 811: -6,16 + 812: -6,15 + 816: -5,12 - node: color: '#C05B60FF' id: HalfTileOverlayGreyscale90 decals: - 1096: -5,13 - 1097: -5,11 - 1109: -5,10 + 845: -5,13 + 846: -5,11 + 858: -5,10 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale90 decals: 76: -5,6 77: -5,7 - 199: -12,13 - 200: -12,14 - 201: -12,15 - 202: -12,16 + 164: -12,13 + 165: -12,14 + 166: -12,15 + 167: -12,16 - node: color: '#EFB34196' id: HalfTileOverlayGreyscale90 @@ -2695,91 +2825,91 @@ entities: 34: 35,-2 35: 35,-1 36: 35,0 - 208: 35,2 - 209: 35,3 - 210: 35,4 - 211: 35,5 - 212: 35,6 - 221: 50,5 - 229: 44,6 - 245: 29,3 - 246: 29,4 - 247: 29,5 - 248: 29,6 + 173: 35,2 + 174: 35,3 + 175: 35,4 + 176: 35,5 + 177: 35,6 + 186: 50,5 + 194: 44,6 + 210: 29,3 + 211: 29,4 + 212: 29,5 + 213: 29,6 - node: color: '#FFFFFFFF' id: MiniTileDarkLineN decals: - 513: -16,-25 + 407: -16,-25 - node: color: '#D381C9E5' id: MiniTileSteelCornerSe decals: - 525: -14,-23 + 419: -14,-23 - node: color: '#D381C9E5' id: MiniTileSteelCornerSw decals: - 531: -18,-24 + 425: -18,-24 - node: color: '#D381C9E5' id: MiniTileSteelInnerSe decals: - 526: -15,-23 + 420: -15,-23 - node: color: '#D381C9E5' id: MiniTileSteelInnerSw decals: - 532: -17,-24 + 426: -17,-24 - node: color: '#D381C9E5' id: MiniTileSteelLineE decals: - 527: -14,-22 + 421: -14,-22 - node: color: '#D381C9E5' id: MiniTileSteelLineW decals: - 528: -18,-21 - 529: -18,-22 - 530: -18,-23 + 422: -18,-21 + 423: -18,-22 + 424: -18,-23 - node: color: '#FFFFFFFF' id: MiniTileSteelLineW decals: - 1069: -5,-13 - 1070: -5,-12 + 825: -5,-13 + 826: -5,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteInnerSe decals: - 583: -51,-12 - 584: -44,-12 + 457: -51,-12 + 458: -44,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteInnerSw decals: - 582: -46,-12 - 585: -53,-12 - 588: -39,-12 + 456: -46,-12 + 459: -53,-12 + 462: -39,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteLineS decals: - 574: -50,-12 - 575: -49,-12 - 576: -48,-12 - 577: -47,-12 - 578: -43,-12 - 579: -42,-12 - 580: -41,-12 - 581: -40,-12 + 448: -50,-12 + 449: -49,-12 + 450: -48,-12 + 451: -47,-12 + 452: -43,-12 + 453: -42,-12 + 454: -41,-12 + 455: -40,-12 - node: color: '#3AB3DA99' id: MiniTileWhiteLineW decals: - 586: -54,-11 - 587: -54,-10 + 460: -54,-11 + 461: -54,-10 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale @@ -2791,39 +2921,39 @@ entities: color: '#52B4E996' id: QuarterTileOverlayGreyscale decals: - 158: 12,1 + 123: 12,1 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale decals: - 459: -36,3 - 460: -37,3 - 461: -38,3 - 462: -39,3 - 463: -40,3 + 353: -36,3 + 354: -37,3 + 355: -38,3 + 356: -39,3 + 357: -40,3 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale decals: - 186: 1,5 - 187: -6,5 + 151: 1,5 + 152: -6,5 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale decals: 28: 31,-2 - 222: 50,5 - 233: 44,9 - 238: 42,6 - 627: 55,1 + 187: 50,5 + 198: 44,9 + 203: 42,6 + 496: 55,1 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale180 decals: - 435: 19,-11 - 436: 19,-10 - 437: 19,-9 - 438: 19,-8 + 329: 19,-11 + 330: 19,-10 + 331: 19,-9 + 332: 19,-8 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale180 @@ -2833,551 +2963,551 @@ entities: color: '#D4D4D428' id: QuarterTileOverlayGreyscale180 decals: - 454: -37,7 - 455: -38,7 - 456: -39,7 - 457: -40,7 - 458: -36,7 + 348: -37,7 + 349: -38,7 + 350: -39,7 + 351: -40,7 + 352: -36,7 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale180 decals: - 159: 29,-5 - 230: 44,7 + 124: 29,-5 + 195: 44,7 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale270 decals: - 129: 14,-5 - 400: 12,-6 + 94: 14,-5 + 294: 12,-6 - node: color: '#C05B60FF' id: QuarterTileOverlayGreyscale270 decals: - 1108: -6,10 + 857: -6,10 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale270 decals: - 206: -12,13 + 171: -12,13 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale270 decals: - 160: 35,-5 - 235: 42,9 - 626: 55,3 + 125: 35,-5 + 200: 42,9 + 495: 55,3 - node: color: '#FFD886FF' id: QuarterTileOverlayGreyscale270 decals: - 147: 14,1 + 112: 14,1 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 decals: 3: 4,24 4: 4,25 - 167: 4,23 + 132: 4,23 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale90 decals: 13: 12,12 - 392: 16,5 - 393: 17,5 - 394: 18,5 - 395: 19,5 - 396: 20,5 - 397: 21,5 - 398: 22,5 - 399: 23,5 + 286: 16,5 + 287: 17,5 + 288: 18,5 + 289: 19,5 + 290: 20,5 + 291: 21,5 + 292: 22,5 + 293: 23,5 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale90 decals: - 185: -19,5 - 188: -5,5 + 150: -19,5 + 153: -5,5 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale90 decals: 26: 29,-2 - 228: 44,5 - 231: 44,9 - 243: 37,6 - 244: 50,4 - 249: 28,6 - 250: 27,6 - 251: 26,6 - 252: 25,6 + 193: 44,5 + 196: 44,9 + 208: 37,6 + 209: 50,4 + 214: 28,6 + 215: 27,6 + 216: 26,6 + 217: 25,6 - node: color: '#8F6CFFAD' id: Rust decals: - 934: -31,-3 - 935: -30,-3 - 936: -30,0 - 937: -31,0 - 938: -31,1 - 939: -30,1 + 781: -31,-3 + 782: -30,-3 + 783: -30,0 + 784: -31,0 + 785: -31,1 + 786: -30,1 - node: color: '#FFFFFFFF' id: StandClear decals: - 502: 21,24 - 589: -52,-12 - 590: -45,-12 - 663: 1,-30 + 396: 21,24 + 463: -52,-12 + 464: -45,-12 + 532: 1,-30 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: StandClear decals: - 263: 60,2 + 228: 60,2 - node: color: '#BD575DFF' id: ThreeQuarterTileOverlayGreyscale decals: - 1023: -10,17 - 1049: -14,11 + 815: -10,17 + 824: -14,11 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 415: 12,-12 + 309: 12,-12 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale270 decals: - 432: 14,-12 + 326: 14,-12 - node: color: '#BD575DFF' id: ThreeQuarterTileOverlayGreyscale270 decals: - 1009: -10,10 - 1048: -14,10 + 801: -10,10 + 823: -14,10 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale90 decals: - 412: 12,-8 + 306: 12,-8 - node: color: '#BD575DFF' id: ThreeQuarterTileOverlayGreyscale90 decals: - 1021: -5,14 - 1022: -6,17 + 813: -5,14 + 814: -6,17 - node: color: '#FF0000FF' id: WarnBox decals: - 842: 69,2 + 695: 69,2 - node: color: '#FFFFFFFF' id: WarnBox decals: - 375: -26,24 + 269: -26,24 - node: color: '#FF0000FF' id: WarnCornerNE decals: - 845: 68,3 + 698: 68,3 - node: color: '#FFFFFFFF' id: WarnCornerNE decals: - 793: -41,-6 + 646: -41,-6 - node: color: '#FF0000FF' id: WarnCornerNW decals: - 846: 66,3 + 699: 66,3 - node: color: '#FFFFFFFF' id: WarnCornerNW decals: - 794: -43,-6 + 647: -43,-6 - node: color: '#FF0000FF' id: WarnCornerSE decals: - 844: 68,1 + 697: 68,1 - node: color: '#FFFFFFFF' id: WarnCornerSE decals: - 795: -41,-4 + 648: -41,-4 - node: color: '#FF0000FF' id: WarnCornerSW decals: - 843: 66,1 + 696: 66,1 - node: color: '#FFFFFFFF' id: WarnCornerSW decals: - 796: -43,-4 + 649: -43,-4 - node: color: '#FFFFFFFF' id: WarnEndE decals: - 800: 12,-12 + 653: 12,-12 - node: color: '#FF0000FF' id: WarnEndN decals: - 841: 70,3 + 694: 70,3 - node: color: '#FF0000FF' id: WarnEndS decals: - 840: 70,2 + 693: 70,2 - node: color: '#FFFFFFFF' id: WarnEndW decals: - 799: 11,-12 + 652: 11,-12 - node: color: '#C3C3C3FF' id: WarnLineE decals: - 914: -36,-33 + 767: -36,-33 - node: color: '#FF0000FF' id: WarnLineE decals: - 814: 60,7 - 815: 60,6 - 847: 68,2 + 667: 60,7 + 668: 60,6 + 700: 68,2 - node: color: '#FFFFFFFF' id: WarnLineE decals: - 548: -15,-30 - 549: -15,-31 - 647: 54,-4 - 648: 54,-5 - 649: 54,-6 - 803: 57,7 - 804: 57,6 - 805: 57,8 - 806: 57,5 - 807: 57,4 - 808: 57,3 - 809: 57,2 - 810: 57,1 - 811: 57,0 - 961: -21,-6 + 442: -15,-30 + 443: -15,-31 + 516: 54,-4 + 517: 54,-5 + 518: 54,-6 + 656: 57,7 + 657: 57,6 + 658: 57,8 + 659: 57,5 + 660: 57,4 + 661: 57,3 + 662: 57,2 + 663: 57,1 + 664: 57,0 + 795: -21,-6 - node: color: '#FF0000FF' id: WarnLineN decals: - 835: 62,0 - 836: 63,0 - 837: 63,5 - 838: 62,5 - 839: 67,1 + 688: 62,0 + 689: 63,0 + 690: 63,5 + 691: 62,5 + 692: 67,1 - node: color: '#FFFFFFFF' id: WarnLineN decals: - 510: 20,26 - 511: 21,26 - 512: 22,26 - 650: 56,-4 - 651: 57,-4 - 652: 58,-4 - 653: 59,-4 - 654: 60,-4 - 665: -3,-29 - 666: -2,-29 - 667: -1,-29 - 668: 0,-29 - 797: -42,-4 - 850: 70,5 + 404: 20,26 + 405: 21,26 + 406: 22,26 + 519: 56,-4 + 520: 57,-4 + 521: 58,-4 + 522: 59,-4 + 523: 60,-4 + 534: -3,-29 + 535: -2,-29 + 536: -1,-29 + 537: 0,-29 + 650: -42,-4 + 703: 70,5 - node: color: '#C3C3C3FF' id: WarnLineS decals: - 912: -34,-33 - 913: -36,-33 - 920: -37,-30 - 921: -37,-29 + 765: -34,-33 + 766: -36,-33 + 773: -37,-30 + 774: -37,-29 - node: color: '#FF0000FF' id: WarnLineS decals: - 816: 62,10 - 817: 62,8 - 818: 62,9 - 819: 62,7 - 820: 62,6 - 821: 62,5 - 822: 62,4 - 823: 62,3 - 824: 62,2 - 825: 62,1 - 826: 62,0 - 827: 62,-1 - 828: 62,-2 - 829: 62,-3 - 830: 62,-4 - 848: 66,2 + 669: 62,10 + 670: 62,8 + 671: 62,9 + 672: 62,7 + 673: 62,6 + 674: 62,5 + 675: 62,4 + 676: 62,3 + 677: 62,2 + 678: 62,1 + 679: 62,0 + 680: 62,-1 + 681: 62,-2 + 682: 62,-3 + 683: 62,-4 + 701: 66,2 - node: color: '#FFFFFFFF' id: WarnLineS decals: - 550: -17,-31 - 551: -17,-30 - 752: -15,18 - 753: -15,19 - 754: -15,20 - 755: -15,21 - 812: 59,7 - 813: 59,6 - 962: -19,-6 + 444: -17,-31 + 445: -17,-30 + 605: -15,18 + 606: -15,19 + 607: -15,20 + 608: -15,21 + 665: 59,7 + 666: 59,6 + 796: -19,-6 - node: color: '#FF0000FF' id: WarnLineW decals: - 831: 62,4 - 832: 63,4 - 833: 63,-1 - 834: 62,-1 - 849: 67,3 + 684: 62,4 + 685: 63,4 + 686: 63,-1 + 687: 62,-1 + 702: 67,3 - node: color: '#FFFFFFFF' id: WarnLineW decals: - 500: 21,24 - 501: 22,24 - 503: 20,24 - 798: -42,-6 + 394: 21,24 + 395: 22,24 + 397: 20,24 + 651: -42,-6 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 440: -40,0 - 441: -40,1 - 442: -40,2 - 443: -40,8 - 444: -40,9 - 445: -40,10 + 334: -40,0 + 335: -40,1 + 336: -40,2 + 337: -40,8 + 338: -40,9 + 339: -40,10 - node: color: '#FFFFFFFF' id: WarningLine decals: - 253: 46,7 - 254: 47,7 - 255: 48,7 - 256: 49,7 - 257: 50,7 - 286: 8,7 - 290: 7,7 - 291: 9,7 + 218: 46,7 + 219: 47,7 + 220: 48,7 + 221: 49,7 + 222: 50,7 + 251: 8,7 + 255: 7,7 + 256: 9,7 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 113: 53,1 - 114: 53,2 - 115: 53,3 - 258: 60,0 - 259: 60,1 - 260: 60,2 - 261: 60,3 - 262: 60,4 - 372: -1,16 - 373: -1,17 - 374: -1,18 + 78: 53,1 + 79: 53,2 + 80: 53,3 + 223: 60,0 + 224: 60,1 + 225: 60,2 + 226: 60,3 + 227: 60,4 + 266: -1,16 + 267: -1,17 + 268: -1,18 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLine decals: - 287: 8,11 + 252: 8,11 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCorner decals: - 446: -40,3 + 340: -40,3 - node: color: '#FFFFFFFF' id: WarningLineCorner decals: - 293: 6,7 + 258: 6,7 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLineCorner decals: - 288: 9,11 + 253: 9,11 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 447: -40,7 + 341: -40,7 - node: color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 292: 10,7 + 257: 10,7 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 289: 7,11 + 254: 7,11 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNe decals: - 852: 0,1 - 1081: -18,-11 - 1095: 0,14 + 705: 0,1 + 830: -18,-11 + 844: 0,14 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinCornerNe decals: - 625: -4,-6 + 494: -4,-6 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNw decals: - 851: -10,1 - 1080: -21,-11 - 1094: -4,14 + 704: -10,1 + 829: -21,-11 + 843: -4,14 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSe decals: - 853: 0,-7 - 1082: -18,-13 - 1098: 0,10 + 706: 0,-7 + 831: -18,-13 + 847: 0,10 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSw decals: - 855: -10,-2 - 1083: -21,-13 - 1093: -4,10 + 708: -10,-2 + 832: -21,-13 + 842: -4,10 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinCornerSw decals: - 750: -37,19 + 603: -37,19 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSw decals: - 854: -8,-2 + 707: -8,-2 - node: color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 867: 0,0 - 868: 0,-1 - 869: 0,-2 - 870: 0,-3 - 871: 0,-5 - 872: 0,-4 - 873: 0,-6 - 1084: -18,-12 - 1101: 0,11 - 1102: 0,12 - 1103: 0,13 + 720: 0,0 + 721: 0,-1 + 722: 0,-2 + 723: 0,-3 + 724: 0,-5 + 725: 0,-4 + 726: 0,-6 + 833: -18,-12 + 850: 0,11 + 851: 0,12 + 852: 0,13 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 624: -4,-7 - 762: 27,10 - 763: 27,9 - 764: 27,8 + 493: -4,-7 + 615: 27,10 + 616: 27,9 + 617: 27,8 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 708: 20,-12 + 577: 20,-12 - node: color: '#FFFFFFFF' id: WoodTrimThinLineN decals: - 858: -8,1 - 859: -9,1 - 860: -7,1 - 861: -6,1 - 862: -5,1 - 863: -4,1 - 864: -3,1 - 865: -2,1 - 866: -1,1 - 1085: -19,-11 - 1086: -20,-11 - 1104: -1,14 - 1105: -2,14 - 1106: -3,14 + 711: -8,1 + 712: -9,1 + 713: -7,1 + 714: -6,1 + 715: -5,1 + 716: -4,1 + 717: -3,1 + 718: -2,1 + 719: -1,1 + 834: -19,-11 + 835: -20,-11 + 853: -1,14 + 854: -2,14 + 855: -3,14 - node: zIndex: 1 color: '#FFFFFFFF' id: WoodTrimThinLineN decals: - 620: -8,-6 - 621: -7,-6 - 622: -6,-6 - 623: -5,-6 + 489: -8,-6 + 490: -7,-6 + 491: -6,-6 + 492: -5,-6 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS decals: - 785: 37,0 - 786: 38,0 - 787: 39,0 - 788: 40,0 - 874: -1,-7 - 875: -2,-7 - 876: -3,-7 - 880: -9,-2 - 1088: -20,-13 - 1089: -19,-13 - 1099: -1,10 - 1100: -2,10 - 1107: -3,10 + 638: 37,0 + 639: 38,0 + 640: 39,0 + 641: 40,0 + 727: -1,-7 + 728: -2,-7 + 729: -3,-7 + 733: -9,-2 + 837: -20,-13 + 838: -19,-13 + 848: -1,10 + 849: -2,10 + 856: -3,10 - node: zIndex: 2 color: '#FFFFFFFF' id: WoodTrimThinLineS decals: - 751: -36,19 + 604: -36,19 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW decals: - 856: -10,-1 - 857: -10,0 - 877: -8,-5 - 878: -8,-4 - 879: -8,-3 - 1078: -14,-12 - 1079: -14,-11 - 1087: -21,-12 - 1090: -4,13 - 1091: -4,12 - 1092: -4,11 + 709: -10,-1 + 710: -10,0 + 730: -8,-5 + 731: -8,-4 + 732: -8,-3 + 827: -14,-12 + 828: -14,-11 + 836: -21,-12 + 839: -4,13 + 840: -4,12 + 841: -4,11 - node: color: '#FFFF00FF' id: radiation decals: - 802: 59,7 + 655: 59,7 - type: OccluderTree - type: SpreaderGrid - type: Shuttle @@ -3390,6 +3520,7 @@ entities: - type: MetaData - type: Transform - type: Map + mapPaused: True - type: PhysicsMap - type: GridTree - type: MovedGrids @@ -4121,7 +4252,7 @@ entities: pos: 3.5,22.5 parent: 31 - type: Door - secondsUntilStateChange: -17127.416 + secondsUntilStateChange: -17204.738 state: Opening - type: DeviceLinkSource lastSignals: @@ -7743,6 +7874,26 @@ entities: - type: Transform pos: -23.5,-13.5 parent: 31 + - uid: 420 + components: + - type: Transform + pos: -30.5,0.5 + parent: 31 + - uid: 421 + components: + - type: Transform + pos: -30.5,-0.5 + parent: 31 + - uid: 422 + components: + - type: Transform + pos: -32.5,-9.5 + parent: 31 + - uid: 437 + components: + - type: Transform + pos: -32.5,-10.5 + parent: 31 - uid: 528 components: - type: Transform @@ -78820,6 +78971,9 @@ entities: rot: 1.5707963267948966 rad pos: 50.5,-24.5 parent: 31 + - type: DeviceLinkSink + links: + - 1234 - uid: 8689 components: - type: Transform From 48413d6a435de700197a4f6ceb1290d61f5130b4 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 19 Dec 2024 22:52:59 +0000 Subject: [PATCH 165/182] Automatic Changelog Update (#1359) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 96e64517caa..7976a09bbe8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8713,3 +8713,10 @@ Entries: id: 6583 time: '2024-12-18T01:32:32.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1357 +- author: VMSolidus + changes: + - type: Fix + message: Fixed the Saltern bridge being a hard vacuum at roundstart. + id: 6584 + time: '2024-12-19T22:52:32.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1359 From 452b9113f61790e8258b95904361de5ed34a034f Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 21 Dec 2024 13:02:27 -0500 Subject: [PATCH 166/182] Loadouts Debloating (Colorable Items) (#1364) # Description This PR cuts down significantly on Loadouts bloat by removing all specific color versions of colorable items from the loadouts. I left the original items untouched for compatibility reasons since certain things in the game still need to be able to spawn a "Blue jumpsuit" etc. Additionally, to help aid in clarity for players, I've added localizations for all the generic colorable items so that they have (colorable) in the loadout names, so that players can tell which items have the option without needing to click into the customize button on every item.

Media

![image](https://github.com/user-attachments/assets/7ab30002-c7d4-4eeb-b018-45a9fda80ae6)

# Changelog :cl: - add: Added labels to all generic colorable items in loadouts, so that players can see which items have custom colors as customization options. - remove: Removed all 'specific color' variants of colorable items from Loadouts, such as "Blue Jumpsuit" when a colorable jumpsuit exists. --- .../Locale/en-US/loadouts/generic/back.ftl | 3 + .../en-US/loadouts/{ => generic}/eyes.ftl | 2 + .../Locale/en-US/loadouts/generic/hands.ftl | 1 + .../Locale/en-US/loadouts/generic/head.ftl | 12 + .../en-US/loadouts/{ => generic}/items.ftl | 7 + .../Locale/en-US/loadouts/generic/neck.ftl | 4 + .../en-US/loadouts/generic/outerClothing.ftl | 11 + .../en-US/loadouts/{ => generic}/shoes.ftl | 6 + .../Locale/en-US/loadouts/generic/uniform.ftl | 12 + Resources/Locale/en-US/loadouts/head.ftl | 2 - .../jobs/engineering/uncategorized.ftl | 1 + .../en-US/loadouts/jobs/heads/captain.ftl | 3 + .../loadouts/jobs/heads/headOfPersonnel.ftl | 2 + .../jobs/logistics/salvageSpecialist.ftl | 14 + Resources/Locale/en-US/loadouts/neck.ftl | 0 .../Locale/en-US/loadouts/outerClothing.ftl | 5 - Resources/Locale/en-US/loadouts/uniform.ftl | 1 - .../Generic/gloveGroup.yml | 18 - .../CharacterItemGroups/Generic/headGroup.yml | 54 -- .../Generic/itemGroups.yml | 56 -- .../CharacterItemGroups/Generic/neckGroup.yml | 26 - .../CharacterItemGroups/Generic/shoeGroup.yml | 20 - .../Entities/Clothing/Head/soft.yml | 4 +- .../Prototypes/Loadouts/Generic/hands.yml | 99 ---- .../Prototypes/Loadouts/Generic/head.yml | 351 ------------ .../Prototypes/Loadouts/Generic/neck.yml | 214 -------- .../Prototypes/Loadouts/Generic/shoes.yml | 112 ---- .../Prototypes/Loadouts/Generic/uniform.yml | 515 ------------------ 28 files changed, 80 insertions(+), 1475 deletions(-) create mode 100644 Resources/Locale/en-US/loadouts/generic/back.ftl rename Resources/Locale/en-US/loadouts/{ => generic}/eyes.ftl (84%) create mode 100644 Resources/Locale/en-US/loadouts/generic/hands.ftl create mode 100644 Resources/Locale/en-US/loadouts/generic/head.ftl rename Resources/Locale/en-US/loadouts/{ => generic}/items.ftl (91%) create mode 100644 Resources/Locale/en-US/loadouts/generic/neck.ftl create mode 100644 Resources/Locale/en-US/loadouts/generic/outerClothing.ftl rename Resources/Locale/en-US/loadouts/{ => generic}/shoes.ftl (83%) create mode 100644 Resources/Locale/en-US/loadouts/generic/uniform.ftl delete mode 100644 Resources/Locale/en-US/loadouts/head.ftl create mode 100644 Resources/Locale/en-US/loadouts/jobs/engineering/uncategorized.ftl create mode 100644 Resources/Locale/en-US/loadouts/jobs/logistics/salvageSpecialist.ftl delete mode 100644 Resources/Locale/en-US/loadouts/neck.ftl delete mode 100644 Resources/Locale/en-US/loadouts/outerClothing.ftl delete mode 100644 Resources/Locale/en-US/loadouts/uniform.ftl diff --git a/Resources/Locale/en-US/loadouts/generic/back.ftl b/Resources/Locale/en-US/loadouts/generic/back.ftl new file mode 100644 index 00000000000..2925981849e --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/back.ftl @@ -0,0 +1,3 @@ +loadout-name-LoadoutBackpack = grey backpack (colorable) +loadout-name-LoadoutBackpackDuffel = grey duffelbag (colorable) +loadout-name-LoadoutBackpackSatchel = grey satchel (colorable) diff --git a/Resources/Locale/en-US/loadouts/eyes.ftl b/Resources/Locale/en-US/loadouts/generic/eyes.ftl similarity index 84% rename from Resources/Locale/en-US/loadouts/eyes.ftl rename to Resources/Locale/en-US/loadouts/generic/eyes.ftl index 93c4d9faa64..4d345190474 100644 --- a/Resources/Locale/en-US/loadouts/eyes.ftl +++ b/Resources/Locale/en-US/loadouts/generic/eyes.ftl @@ -3,3 +3,5 @@ loadout-description-LoadoutEyesBlindfold = Why would you want this? loadout-name-LoadoutItemBlindfoldFake = "blind"fold loadout-description-LoadoutItemBlindfoldFake = This product may not work as advertised. + +loadout-name-LoadoutEyesGlasses = glasses (colorable) diff --git a/Resources/Locale/en-US/loadouts/generic/hands.ftl b/Resources/Locale/en-US/loadouts/generic/hands.ftl new file mode 100644 index 00000000000..d9df439ce5a --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/hands.ftl @@ -0,0 +1 @@ +loadout-name-LoadoutHandsColorWhite = gloves (colorable) diff --git a/Resources/Locale/en-US/loadouts/generic/head.ftl b/Resources/Locale/en-US/loadouts/generic/head.ftl new file mode 100644 index 00000000000..efd13b00845 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/head.ftl @@ -0,0 +1,12 @@ +loadout-description-LoadoutHeadBeaverHat = Gentlemen. +loadout-description-LoadoutHeadTophat = A stylish black tophat. + +loadout-name-LoadoutHeadFedoraWhite = fedora (colorable) +loadout-name-LoadoutHeadHatCowboyWhite = cowboy hat (colorable) +loadout-name-LoadoutHeadHatMimesoft = baseball cap (colorable) +loadout-name-LoadoutHeadHatMimesoftFlipped = baseball cap (colorable, flipped) +loadout-name-LoadoutHeadHijabColorable = hijab (colorable) +loadout-name-LoadoutHeadTurbanColorable = turban (colorable) +loadout-name-LoadoutHeadKippahColorable = kippah (colorable) +loadout-name-LoadoutHeadTinfoil = tinfoil hat (colorable) +loadout-name-LoadoutHeadHatCowboyBountyHunter = bounty hunter hat (colorable) diff --git a/Resources/Locale/en-US/loadouts/items.ftl b/Resources/Locale/en-US/loadouts/generic/items.ftl similarity index 91% rename from Resources/Locale/en-US/loadouts/items.ftl rename to Resources/Locale/en-US/loadouts/generic/items.ftl index c2ec9a1c847..ac52b8be226 100644 --- a/Resources/Locale/en-US/loadouts/items.ftl +++ b/Resources/Locale/en-US/loadouts/generic/items.ftl @@ -35,3 +35,10 @@ loadout-name-LoadoutItemBoxSurvivalSecurity = survival box (security) loadout-name-LoadoutItemBoxSurvivalBrigmedic = survival box (corpsman) loadout-name-LoadoutItemBoxSurvivalMedical = survival box (medical) loadout-name-LoadoutItemBoxHug = box of hugs (clown) + +loadout-name-LoadoutItemLighter = lighter (colorable) +loadout-name-LoadoutItemLighterCheap = cheap lighter (colorable) +loadout-name-LoadoutItemLighterFlippo = flippo lighter (colorable) +loadout-name-LoadoutItemDrinkShinyFlask = shiny flask (colorable) +loadout-name-LoadoutItemDrinkLithiumFlask = lithium flask (colorable) +loadout-name-LoadoutItemDrinkVacuumFlask = vacuum flask (colorable) diff --git a/Resources/Locale/en-US/loadouts/generic/neck.ftl b/Resources/Locale/en-US/loadouts/generic/neck.ftl new file mode 100644 index 00000000000..8a9abb76664 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/neck.ftl @@ -0,0 +1,4 @@ +loadout-name-LoadoutNeckOldMantle = old mantle (colorable) +loadout-name-LoadoutNeckUnathiMantle = unathi mantle (colorable) +loadout-name-LoadoutNeckTieWhite = suit tie (colorable) +loadout-name-LoadoutNeckBedsheetWhite = bedsheet (colorable) diff --git a/Resources/Locale/en-US/loadouts/generic/outerClothing.ftl b/Resources/Locale/en-US/loadouts/generic/outerClothing.ftl new file mode 100644 index 00000000000..e312968b8e9 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/outerClothing.ftl @@ -0,0 +1,11 @@ +loadout-description-LoadoutOuterGhostSheet = Spooky... +loadout-description-LoadoutOuterCoatBomberjacket = A sleek bomber jacket. +loadout-description-LoadoutOuterCoatHoodieBlack = A warm hoodie. +loadout-description-LoadoutOuterCoatHoodieGrey = A warm hoodie. +loadout-description-LoadoutOuterCoatWinterCoat = For keeping nice and snug. + +loadout-name-LoadoutOuterCoatHoodieGrey = grey hoodie (colorable) +loadout-name-LoadoutOuterCoatWinterCoat = winter coat (colorable) +loadout-name-LoadoutOuterCoatHyenhSweater = sweater (colorable) +loadout-name-LoadoutOuterWinterCoatLong = long winter coat (colorable) +loadout-name-LoadoutOuterCoatMNKWhiteHoodie = MNK hoodie (colorable) diff --git a/Resources/Locale/en-US/loadouts/shoes.ftl b/Resources/Locale/en-US/loadouts/generic/shoes.ftl similarity index 83% rename from Resources/Locale/en-US/loadouts/shoes.ftl rename to Resources/Locale/en-US/loadouts/generic/shoes.ftl index 79a8dd9c436..15631952f76 100644 --- a/Resources/Locale/en-US/loadouts/shoes.ftl +++ b/Resources/Locale/en-US/loadouts/generic/shoes.ftl @@ -8,3 +8,9 @@ loadout-description-LoadoutShoesRed = Embrace the spirit of exploration with the loadout-description-LoadoutShoesWhite = Elevate your style with these pristine white shoes, a symbol of innovation and progress. loadout-description-LoadoutShoesYellow = Light up the space station with these radiant yellow shoes, bringing a burst of energy to your every step. loadout-description-LoadoutShoesSlippersDuck = Quack up your downtime with these adorable duck slippers that waddle the line between comfort and quirkiness. + +loadout-name-LoadoutShoesWhite = shoes (colorable) +loadout-name-LoadoutShoesBootsCowboyWhite = cowboy boots (colorable) +loadout-name-LoadoutShoesBootsCowboyFancy = fancy cowboy boots (colorable) +loadout-name-LoadoutShoesMiscWhite = misc shoes (colorable) +loadout-name-LoadoutShoesClothWrap = cloth foot wraps (colorable) diff --git a/Resources/Locale/en-US/loadouts/generic/uniform.ftl b/Resources/Locale/en-US/loadouts/generic/uniform.ftl new file mode 100644 index 00000000000..fa4eccbdb17 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/uniform.ftl @@ -0,0 +1,12 @@ +loadout-description-LoadoutUniformAncientJumpsuit = The legend of the Greytide. + +loadout-name-LoadoutUniformJumpsuitColorWhite = jumpsuit (colorable) +loadout-name-LoadoutUniformJumpskirtColorWhite = jumpskirt (colorable) +loadout-name-LoadoutUniformMartialGi = gi (colorable) +loadout-name-LoadoutClothingJumpsuitKimono = kimono (colorable) +loadout-name-LoadoutClothingMNKOfficeSkirt = MNK office skirt (colorable) +loadout-name-LoadoutClothingMNKUnderGarment = MNK under garment (colorable) +loadout-name-LoadoutClothingMNKGymBra = MNK gym bra (colorable) +loadout-name-LoadoutClothingJumpsuitSuitWhite = business suit (colorable) +loadout-name-LoadoutClothingJumpsuitSuitWhiteAlt = business suit (alt, colorable) +loadout-name-LoadoutClothingJumpsuitSuitWhiteMob = mob suit (colorable) diff --git a/Resources/Locale/en-US/loadouts/head.ftl b/Resources/Locale/en-US/loadouts/head.ftl deleted file mode 100644 index be10f7d2fd2..00000000000 --- a/Resources/Locale/en-US/loadouts/head.ftl +++ /dev/null @@ -1,2 +0,0 @@ -loadout-description-LoadoutHeadBeaverHat = Gentlemen. -loadout-description-LoadoutHeadTophat = A stylish black tophat. diff --git a/Resources/Locale/en-US/loadouts/jobs/engineering/uncategorized.ftl b/Resources/Locale/en-US/loadouts/jobs/engineering/uncategorized.ftl new file mode 100644 index 00000000000..1831174bd46 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/jobs/engineering/uncategorized.ftl @@ -0,0 +1 @@ +loadout-name-LoadoutEngineeringHeadHardhatWhite = hardhat (colorable) diff --git a/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl b/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl index 27069b6ff88..1cb2a615991 100644 --- a/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl +++ b/Resources/Locale/en-US/loadouts/jobs/heads/captain.ftl @@ -10,3 +10,6 @@ loadout-description-LoadoutCommandCapHatCapcap = The Captain's cap, pretty nice. loadout-description-LoadoutCommandCapHatBeret = The Captain's beret, very nice. loadout-description-LoadoutCommandCapMaskGas = Why would the captain need this? I don't know, but it looks cool. loadout-description-LoadoutCommandCapItemDrinkFlask = The finest of flasks, for the finest of drinks. + +loadout-name-LoadoutCaptainDrinkFlask = captain's drink flask (colorable) +loadout-name-LoadoutCaptainGlovesInspection = inspection gloves (colorable) diff --git a/Resources/Locale/en-US/loadouts/jobs/heads/headOfPersonnel.ftl b/Resources/Locale/en-US/loadouts/jobs/heads/headOfPersonnel.ftl index 8dc606f65dd..5c717e95839 100644 --- a/Resources/Locale/en-US/loadouts/jobs/heads/headOfPersonnel.ftl +++ b/Resources/Locale/en-US/loadouts/jobs/heads/headOfPersonnel.ftl @@ -2,3 +2,5 @@ loadout-description-LoadoutCommandHOPNeckMantle = To show who has the authority loadout-description-LoadoutCommandHOPNeckCloak = To really show who has the authority around here. loadout-description-LoadoutCommandHOPBackIan = A backpack that looks like Ian, how cute! loadout-description-LoadoutCommandHOPHatCap = The HOP's cap, pretty nice. + +loadout-name-LoadoutHeadOfPersonnelGlovesInspection = inspection gloves (colorable) diff --git a/Resources/Locale/en-US/loadouts/jobs/logistics/salvageSpecialist.ftl b/Resources/Locale/en-US/loadouts/jobs/logistics/salvageSpecialist.ftl new file mode 100644 index 00000000000..973c2f23711 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/jobs/logistics/salvageSpecialist.ftl @@ -0,0 +1,14 @@ +loadout-name-LoadoutSalvageBackpackBackpack = salvage backpack (colorable) +loadout-name-LoadoutSalvageBackpackSatchel = salvage satchel (colorable) +loadout-name-LoadoutSalvageBackpackDuffel = salvage duffelbag (colorable) +loadout-name-LoadoutSalvageBeltMilitaryWebbing = military webbing (colorable) +loadout-name-LoadoutSalvageWeaponsCombatKnife = combat knife (colorable) +loadout-name-LoadoutSalvageWeaponsKitchenKnife = kitchen knife (colorable) +loadout-name-LoadoutSalvageWeaponsSurvivalKnife = survival knife (colorable) +loadout-name-LoadoutSalvageWeaponsKukriKnife = kukri (colorable) +loadout-name-LoadoutSalvageWeaponsCleaver = cleaver (colorable) +loadout-name-LoadoutSalvageWeaponsThrowingKnife = throwing knives (x3, colorable) +loadout-name-LoadoutSalvageWeaponsMachete = machete (colorable) +loadout-name-LoadoutSalvageWeaponsCutlass = cutlass (colorable) +loadout-name-LoadoutSalvageWeaponsKatana = katana (colorable) +loadout-name-LoadoutSalvageWeaponsWakizashi = wakizashi (colorable) diff --git a/Resources/Locale/en-US/loadouts/neck.ftl b/Resources/Locale/en-US/loadouts/neck.ftl deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/Resources/Locale/en-US/loadouts/outerClothing.ftl b/Resources/Locale/en-US/loadouts/outerClothing.ftl deleted file mode 100644 index 7dc09f552e0..00000000000 --- a/Resources/Locale/en-US/loadouts/outerClothing.ftl +++ /dev/null @@ -1,5 +0,0 @@ -loadout-description-LoadoutOuterGhostSheet = Spooky... -loadout-description-LoadoutOuterCoatBomberjacket = A sleek bomber jacket. -loadout-description-LoadoutOuterCoatHoodieBlack = A warm hoodie. -loadout-description-LoadoutOuterCoatHoodieGrey = A warm hoodie. -loadout-description-LoadoutOuterCoatWinterCoat = For keeping nice and snug. diff --git a/Resources/Locale/en-US/loadouts/uniform.ftl b/Resources/Locale/en-US/loadouts/uniform.ftl deleted file mode 100644 index b32bd92b3a4..00000000000 --- a/Resources/Locale/en-US/loadouts/uniform.ftl +++ /dev/null @@ -1 +0,0 @@ -loadout-description-LoadoutUniformAncientJumpsuit = The legend of the Greytide. diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml index e8ec6f3d255..f712e18e24d 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/gloveGroup.yml @@ -1,24 +1,6 @@ - type: characterItemGroup id: LoadoutGloves items: - - type: loadout - id: LoadoutHandsColorPurple - - type: loadout - id: LoadoutHandsColorRed - - type: loadout - id: LoadoutHandsColorBlack - - type: loadout - id: LoadoutHandsColorBlue - - type: loadout - id: LoadoutHandsColorBrown - - type: loadout - id: LoadoutHandsColorGray - - type: loadout - id: LoadoutHandsColorGreen - - type: loadout - id: LoadoutHandsColorLightBrown - - type: loadout - id: LoadoutHandsColorOrange - type: loadout id: LoadoutHandsColorWhite - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml index d5ba07f5805..e6bd267b1d0 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml @@ -5,28 +5,12 @@ id: LoadoutHeadBeaverHat - type: loadout id: LoadoutHeadTophat - - type: loadout - id: LoadoutHeadFedoraBlack - - type: loadout - id: LoadoutHeadFedoraBrown - - type: loadout - id: LoadoutHeadFedoraGrey - - type: loadout - id: LoadoutHeadFedoraChoc - type: loadout id: LoadoutHeadFedoraWhite - type: loadout id: LoadoutHeadFlatBlack - type: loadout id: LoadoutHeadFlatBrown - - type: loadout - id: LoadoutHeadHatCowboyBrown - - type: loadout - id: LoadoutHeadHatCowboyBlack - - type: loadout - id: LoadoutHeadHatCowboyGrey - - type: loadout - id: LoadoutHeadHatCowboyRed - type: loadout id: LoadoutHeadHatCowboyWhite - type: loadout @@ -37,42 +21,14 @@ id: LoadoutHeadBellhop - type: loadout id: LoadoutHeadPoppy - - type: loadout - id: LoadoutHeadHatBluesoft - - type: loadout - id: LoadoutHeadHatBluesoftFlipped - type: loadout id: LoadoutHeadHatCorpsoft - type: loadout id: LoadoutHeadHatCorpsoftFlipped - - type: loadout - id: LoadoutHeadHatGreensoft - - type: loadout - id: LoadoutHeadHatGreensoftFlipped - - type: loadout - id: LoadoutHeadHatGreysoft - - type: loadout - id: LoadoutHeadHatGreysoftFlipped - type: loadout id: LoadoutHeadHatMimesoft - type: loadout id: LoadoutHeadHatMimesoftFlipped - - type: loadout - id: LoadoutHeadHatOrangesoft - - type: loadout - id: LoadoutHeadHatOrangesoftFlipped - - type: loadout - id: LoadoutHeadHatPurplesoft - - type: loadout - id: LoadoutHeadHatPurplesoftFlipped - - type: loadout - id: LoadoutHeadHatRedsoft - - type: loadout - id: LoadoutHeadHatRedsoftFlipped - - type: loadout - id: LoadoutHeadHatYellowsoft - - type: loadout - id: LoadoutHeadHatYellowsoftFlipped - type: loadout id: LoadoutHeadBandBlack - type: loadout @@ -107,16 +63,6 @@ id: LoadoutHeadBeret - type: loadout id: LoadoutHeadBeretFrench - - type: loadout - id: LoadoutHeadCowboyBrown - - type: loadout - id: LoadoutHeadCowboyBlack - - type: loadout - id: LoadoutHeadCowboyWhite - - type: loadout - id: LoadoutHeadCowboyGrey - - type: loadout - id: LoadoutHeadCowboyRed - type: loadout id: LoadoutHeadHijabColorable - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml index 66b7d32ea74..dcf9bbec8aa 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/itemGroups.yml @@ -7,66 +7,10 @@ items: - type: loadout id: LoadoutUniformAncientJumpsuit - - type: loadout - id: LoadoutUniformJumpsuitColorBlack - - type: loadout - id: LoadoutUniformJumpskirtColorBlack - - type: loadout - id: LoadoutUniformJumpsuitColorBlue - - type: loadout - id: LoadoutUniformJumpskirtColorBlue - - type: loadout - id: LoadoutUniformJumpsuitColorBrown - - type: loadout - id: LoadoutUniformJumpskirtColorBrown - - type: loadout - id: LoadoutUniformJumpsuitColorDarkBlue - - type: loadout - id: LoadoutUniformJumpskirtColorDarkBlue - - type: loadout - id: LoadoutUniformJumpsuitColorDarkGreen - - type: loadout - id: LoadoutUniformJumpskirtColorDarkGreen - - type: loadout - id: LoadoutUniformJumpsuitColorGreen - - type: loadout - id: LoadoutUniformJumpskirtColorGreen - - type: loadout - id: LoadoutUniformJumpsuitColorLightBrown - - type: loadout - id: LoadoutUniformJumpskirtColorLightBrown - - type: loadout - id: LoadoutUniformJumpsuitColorMaroon - - type: loadout - id: LoadoutUniformJumpskirtColorMaroon - - type: loadout - id: LoadoutUniformJumpsuitColorOrange - - type: loadout - id: LoadoutUniformJumpskirtColorOrange - - type: loadout - id: LoadoutUniformJumpsuitColorPink - - type: loadout - id: LoadoutUniformJumpskirtColorPink - - type: loadout - id: LoadoutUniformJumpsuitColorPurple - - type: loadout - id: LoadoutUniformJumpskirtColorPurple - - type: loadout - id: LoadoutUniformJumpsuitColorRed - - type: loadout - id: LoadoutUniformJumpskirtColorRed - - type: loadout - id: LoadoutUniformJumpsuitColorTeal - - type: loadout - id: LoadoutUniformJumpskirtColorTeal - type: loadout id: LoadoutUniformJumpsuitColorWhite - type: loadout id: LoadoutUniformJumpskirtColorWhite - - type: loadout - id: LoadoutUniformJumpsuitColorYellow - - type: loadout - id: LoadoutUniformJumpskirtColorYellow - type: loadout id: LoadoutUniformJumpsuitFlannel - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml index 2a7add033e0..ef3f40891a7 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/neckGroup.yml @@ -25,16 +25,8 @@ id: LoadoutNeckScarfStripedPurple - type: loadout id: LoadoutNeckScarfStripedZebra - - type: loadout - id: LoadoutNeckTieRed - type: loadout id: LoadoutNeckTieWhite - - type: loadout - id: LoadoutNeckTieBlack - - type: loadout - id: LoadoutNeckTieBlue - - type: loadout - id: LoadoutNeckTieGreen - type: loadout id: LoadoutItemsPrideLGBTPin - type: loadout @@ -53,29 +45,11 @@ id: LoadoutItemsPridePansexualPin - type: loadout id: LoadoutItemsPrideTransPin - - type: loadout - id: LoadoutNeckBedsheetBlack - - type: loadout - id: LoadoutNeckBedsheetBlue - - type: loadout - id: LoadoutNeckBedsheetBrown - type: loadout id: LoadoutNeckBedsheetCosmos - - type: loadout - id: LoadoutNeckBedsheetGreen - - type: loadout - id: LoadoutNeckBedsheetGrey - - type: loadout - id: LoadoutNeckBedsheetOrange - - type: loadout - id: LoadoutNeckBedsheetPurple - type: loadout id: LoadoutNeckBedsheetRainbow - - type: loadout - id: LoadoutNeckBedsheetRed - type: loadout id: LoadoutNeckBedsheetWhite - - type: loadout - id: LoadoutNeckBedsheetYellow - type: loadout id: LoadoutNeckBedsheetNT diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml index e3b71e7977e..ea56881c555 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/shoeGroup.yml @@ -1,24 +1,8 @@ - type: characterItemGroup id: LoadoutShoes items: - - type: loadout - id: LoadoutShoesBlack - - type: loadout - id: LoadoutShoesBlue - - type: loadout - id: LoadoutShoesBrown - - type: loadout - id: LoadoutShoesGreen - - type: loadout - id: LoadoutShoesOrange - - type: loadout - id: LoadoutShoesPurple - - type: loadout - id: LoadoutShoesRed - type: loadout id: LoadoutShoesWhite - - type: loadout - id: LoadoutShoesYellow - type: loadout id: LoadoutShoesGeta - type: loadout @@ -29,10 +13,6 @@ id: LoadoutShoesBootsLaceup - type: loadout id: LoadoutShoesBootsWinter - - type: loadout - id: LoadoutShoesBootsCowboyBrown - - type: loadout - id: LoadoutShoesBootsCowboyBlack - type: loadout id: LoadoutShoesBootsCowboyWhite - type: loadout diff --git a/Resources/Prototypes/Entities/Clothing/Head/soft.yml b/Resources/Prototypes/Entities/Clothing/Head/soft.yml index 163d9937f2e..60a175e7de4 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/soft.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/soft.yml @@ -167,7 +167,7 @@ - type: entity parent: ClothingHeadHeadHatBaseFlippable id: ClothingHeadHatMimesoft - name: mime cap + name: baseball cap description: "It's a baseball hat in a tasteless white colour." components: - type: Sprite @@ -178,7 +178,7 @@ - type: entity parent: [ClothingHeadHeadHatBaseFlipped, ClothingHeadHatMimesoft] id: ClothingHeadHatMimesoftFlipped - name: mime cap + name: baseball cap - type: entity parent: ClothingHeadHeadHatBaseFlippable diff --git a/Resources/Prototypes/Loadouts/Generic/hands.yml b/Resources/Prototypes/Loadouts/Generic/hands.yml index 524a6de9183..830dcd7beee 100644 --- a/Resources/Prototypes/Loadouts/Generic/hands.yml +++ b/Resources/Prototypes/Loadouts/Generic/hands.yml @@ -1,102 +1,3 @@ -- type: loadout - id: LoadoutHandsColorPurple - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorPurple - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorRed - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorBlack - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorBlue - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorBrown - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorGray - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorGray - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorGreen - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorLightBrown - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorLightBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - -- type: loadout - id: LoadoutHandsColorOrange - category: Hands - cost: 0 - exclusive: true - items: - - ClothingHandsGlovesColorOrange - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutGloves - - type: loadout id: LoadoutHandsColorWhite category: Hands diff --git a/Resources/Prototypes/Loadouts/Generic/head.yml b/Resources/Prototypes/Loadouts/Generic/head.yml index b8d3c8c7ac4..c48ad846e1d 100644 --- a/Resources/Prototypes/Loadouts/Generic/head.yml +++ b/Resources/Prototypes/Loadouts/Generic/head.yml @@ -25,58 +25,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -- type: loadout - id: LoadoutHeadFedoraBlack - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatFedoraBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadFedoraBrown - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatFedoraBrown - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadFedoraGrey - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatFedoraGrey - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadFedoraChoc - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatFedoraChoc - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadFedoraWhite category: Head @@ -115,50 +63,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -- type: loadout - id: LoadoutHeadHatCowboyBrown - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatCowboyBlack - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatCowboyGrey - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyGrey - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatCowboyRed - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadHatCowboyWhite category: Head @@ -219,36 +123,6 @@ group: LoadoutHead # Color Hats -- type: loadout - id: LoadoutHeadHatBluesoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatBluesoft - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatBluesoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatBluesoftFlipped - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadHatCorpsoft category: Head @@ -271,58 +145,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -- type: loadout - id: LoadoutHeadHatGreensoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatGreensoft - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatGreensoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatGreensoftFlipped - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatGreysoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatGreysoft - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatGreysoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatGreysoftFlipped - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadHatMimesoft category: Head @@ -347,118 +169,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -- type: loadout - id: LoadoutHeadHatOrangesoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatOrangesoft - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatOrangesoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatOrangesoftFlipped - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatPurplesoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatPurplesoft - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatPurplesoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatPurplesoftFlipped - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatRedsoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatRedsoft - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatRedsoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatRedsoftFlipped - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatYellowsoft - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatYellowsoft - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadHatYellowsoftFlipped - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadHatYellowsoftFlipped - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - # Headbands - type: loadout id: LoadoutHeadBandBlack @@ -686,67 +396,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -# Cowboy hats -- type: loadout - id: LoadoutHeadCowboyBrown - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyBrown - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadCowboyBlack - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadCowboyWhite - category: Head - cost: 1 - exclusive: true - customColorTint: true - items: - - ClothingHeadHatCowboyWhite - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadCowboyGrey - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyGrey - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadCowboyRed - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatCowboyRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadHijabColorable category: Head diff --git a/Resources/Prototypes/Loadouts/Generic/neck.yml b/Resources/Prototypes/Loadouts/Generic/neck.yml index 30f65770b12..c18c33984fb 100644 --- a/Resources/Prototypes/Loadouts/Generic/neck.yml +++ b/Resources/Prototypes/Loadouts/Generic/neck.yml @@ -147,18 +147,6 @@ group: LoadoutNeck # Ties -- type: loadout - id: LoadoutNeckTieRed - category: Neck - cost: 0 - exclusive: true - canBeHeirloom: true - items: - - ClothingNeckTieRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - type: loadout id: LoadoutNeckTieWhite category: Neck @@ -172,42 +160,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutNeck -- type: loadout - id: LoadoutNeckTieBlack - category: Neck - cost: 0 - exclusive: true - canBeHeirloom: true - items: - - ClothingNeckTieBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - -- type: loadout - id: LoadoutNeckTieBlue - category: Neck - cost: 0 - exclusive: true - canBeHeirloom: true - items: - - ClothingNeckTieBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - -- type: loadout - id: LoadoutNeckTieGreen - category: Neck - cost: 0 - exclusive: true - canBeHeirloom: true - items: - - ClothingNeckTieGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - #Pride Accessories - type: loadout id: LoadoutItemsPrideLGBTPin @@ -309,60 +261,6 @@ group: LoadoutNeck # Bedsheets -- type: loadout - id: LoadoutNeckBedsheetBlack - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutNeckBedsheetBlue - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutNeckBedsheetBrown - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - - type: loadout id: LoadoutNeckBedsheetCosmos category: Neck @@ -382,80 +280,6 @@ departments: - Command -- type: loadout - id: LoadoutNeckBedsheetGreen - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutNeckBedsheetGrey - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetGrey - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutNeckBedsheetOrange - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetOrange - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Logistics - - !type:CharacterJobRequirement - inverted: true - jobs: - - HeadOfPersonnel # Need to blacklist HoP and not command so other heads can wear this bedsheet - -- type: loadout - id: LoadoutNeckBedsheetPurple - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetPurple - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Epistemics - - !type:CharacterJobRequirement - inverted: true - jobs: - - HeadOfPersonnel # Need to blacklist HoP and not command so other heads can wear this bedsheet - - type: loadout id: LoadoutNeckBedsheetRainbow category: Neck @@ -474,25 +298,6 @@ departments: - Command -- type: loadout - id: LoadoutNeckBedsheetRed - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Security - - !type:CharacterJobRequirement - inverted: true - jobs: - - HeadOfPersonnel # Need to blacklist HoP and not command so other heads can wear this bedsheet - - type: loadout id: LoadoutNeckBedsheetWhite category: Neck @@ -512,25 +317,6 @@ departments: - Command -- type: loadout - id: LoadoutNeckBedsheetYellow - category: Neck - cost: 1 - exclusive: true - items: - - BedsheetYellow - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutNeck - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Engineering - - !type:CharacterJobRequirement - inverted: true - jobs: - - HeadOfPersonnel # Need to blacklist HoP and not command so other heads can wear this bedsheet - - type: loadout id: LoadoutNeckBedsheetNT category: Neck diff --git a/Resources/Prototypes/Loadouts/Generic/shoes.yml b/Resources/Prototypes/Loadouts/Generic/shoes.yml index 08f22753250..fb8487981bd 100644 --- a/Resources/Prototypes/Loadouts/Generic/shoes.yml +++ b/Resources/Prototypes/Loadouts/Generic/shoes.yml @@ -1,81 +1,4 @@ # Colored -- type: loadout - id: LoadoutShoesBlack - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorBlack - -- type: loadout - id: LoadoutShoesBlue - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorBlue - -- type: loadout - id: LoadoutShoesBrown - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorBrown - -- type: loadout - id: LoadoutShoesGreen - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorGreen - -- type: loadout - id: LoadoutShoesOrange - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorOrange - -- type: loadout - id: LoadoutShoesPurple - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorPurple - -- type: loadout - id: LoadoutShoesRed - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorRed - - type: loadout id: LoadoutShoesWhite category: Shoes @@ -88,17 +11,6 @@ items: - ClothingShoesColorWhite -- type: loadout - id: LoadoutShoesYellow - category: Shoes - cost: 0 - exclusive: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesColorYellow - - type: loadout id: LoadoutShoesGeta category: Shoes @@ -166,30 +78,6 @@ items: - ClothingShoesBootsWinter -- type: loadout - id: LoadoutShoesBootsCowboyBrown - category: Shoes - cost: 1 - exclusive: true - canBeHeirloom: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesBootsCowboyBrown - -- type: loadout - id: LoadoutShoesBootsCowboyBlack - category: Shoes - cost: 1 - exclusive: true - canBeHeirloom: true - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutShoes - items: - - ClothingShoesBootsCowboyBlack - - type: loadout id: LoadoutShoesBootsCowboyWhite category: Shoes diff --git a/Resources/Prototypes/Loadouts/Generic/uniform.yml b/Resources/Prototypes/Loadouts/Generic/uniform.yml index da16bcc10e5..960f70b54c0 100644 --- a/Resources/Prototypes/Loadouts/Generic/uniform.yml +++ b/Resources/Prototypes/Loadouts/Generic/uniform.yml @@ -16,229 +16,6 @@ # Colored jumpsuits # Someone please alphabetically order these... - -- type: loadout - id: LoadoutUniformJumpsuitColorBlack - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Security - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorBlack - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Security - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorBlue - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Medical - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorBlue - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Medical - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorGreen - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorGreen - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorOrange - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorOrange - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorOrange - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorOrange - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorPink - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorPink - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorPink - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorPink - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorRed - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Security - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorRed - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorRed - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Security - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - - type: loadout id: LoadoutUniformJumpsuitColorWhite category: Uniform @@ -281,298 +58,6 @@ departments: - Command -- type: loadout - id: LoadoutUniformJumpsuitColorYellow - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorYellow - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Engineering - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorYellow - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorYellow - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Engineering - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorDarkBlue - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorDarkBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorDarkBlue - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorDarkBlue - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorTeal - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorTeal - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorTeal - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorTeal - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorPurple - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorPurple - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Epistemics - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorPurple - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorPurple - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - Epistemics - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorDarkGreen - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorDarkGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorDarkGreen - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorDarkGreen - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorLightBrown - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorLightBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorLightBrown - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorLightBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorBrown - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorBrown - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorBrown - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpsuitColorMaroon - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpsuitColorMaroon - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - -- type: loadout - id: LoadoutUniformJumpskirtColorMaroon - category: Uniform - cost: 0 - exclusive: true - items: - - ClothingUniformJumpskirtColorMaroon - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutUniformsCivilian - - !type:CharacterDepartmentRequirement - departments: - - Civilian - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Command - - type: loadout id: LoadoutUniformJumpsuitFlannel category: Uniform From cd5a6f8b5743904dbecbf04e5d70614e4444d149 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 21 Dec 2024 18:02:53 +0000 Subject: [PATCH 167/182] Automatic Changelog Update (#1364) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7976a09bbe8..6e1c948c5ac 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8720,3 +8720,16 @@ Entries: id: 6584 time: '2024-12-19T22:52:32.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1359 +- author: VMSolidus + changes: + - type: Add + message: >- + Added labels to all generic colorable items in loadouts, so that players + can see which items have custom colors as customization options. + - type: Remove + message: >- + Removed all 'specific color' variants of colorable items from Loadouts, + such as "Blue Jumpsuit" when a colorable jumpsuit exists. + id: 6585 + time: '2024-12-21T18:02:28.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1364 From 0674895a3b6a84c2761eb13c7b5f35bc826fe19c Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 21 Dec 2024 14:25:13 -0500 Subject: [PATCH 168/182] More Colorable Items (#1365) # Description This PR adds even more colorable items to loadouts, this time making entirely new whitescale versions of existing items that did not have one previously. This replaces several more options for items that had a whole bunch of specific color entries with a single item that can take any color.

Media

![image](https://github.com/user-attachments/assets/31438bf7-6ca3-45d2-bf10-af5db5f6e4c4)

# Changelog :cl: - add: Added colorable variants of fingerless gloves, headbands, berets, hairflowers, cloth masks, and the neck gaiter. --- Resources/Locale/en-US/forensics/fibers.ftl | 1 + .../Locale/en-US/loadouts/generic/hands.ftl | 1 + .../Locale/en-US/loadouts/generic/head.ftl | 3 + .../Locale/en-US/loadouts/generic/mask.ftl | 3 + .../CharacterItemGroups/Generic/headGroup.yml | 20 +-- .../CharacterItemGroups/Generic/maskGroup.yml | 20 +-- .../Entities/Clothing/Hands/gloves.yml | 14 ++ .../Entities/Clothing/Head/bandanas.yml | 5 + .../Entities/Clothing/Head/hats.yml | 11 ++ .../Entities/Clothing/Masks/bandanas.yml | 11 ++ .../Entities/Clothing/Masks/masks.yml | 10 ++ .../Objects/Consumable/Food/produce.yml | 8 ++ .../Prototypes/Loadouts/Generic/hands.yml | 5 +- .../Prototypes/Loadouts/Generic/head.yml | 134 +++--------------- .../Prototypes/Loadouts/Generic/mask.yml | 123 +--------------- .../fingerlesswhite.rsi/equipped-HAND.png | Bin 0 -> 499 bytes .../Hands/Gloves/fingerlesswhite.rsi/icon.png | Bin 0 -> 553 bytes .../fingerlesswhite.rsi/inhand-left.png | Bin 0 -> 475 bytes .../fingerlesswhite.rsi/inhand-right.png | Bin 0 -> 480 bytes .../Gloves/fingerlesswhite.rsi/meta.json | 26 ++++ .../white.rsi/equipped-HELMET-vox.png | Bin 0 -> 598 bytes .../Bandanas/white.rsi/equipped-HELMET.png | Bin 0 -> 581 bytes .../Bandanas/white.rsi/equipped-MASK-vox.png | Bin 0 -> 586 bytes .../Head/Bandanas/white.rsi/equipped-MASK.png | Bin 0 -> 528 bytes .../Clothing/Head/Bandanas/white.rsi/icon.png | Bin 0 -> 527 bytes .../Head/Bandanas/white.rsi/icon_mask.png | Bin 0 -> 497 bytes .../Head/Bandanas/white.rsi/inhand-left.png | Bin 0 -> 538 bytes .../Head/Bandanas/white.rsi/inhand-right.png | Bin 0 -> 542 bytes .../Head/Bandanas/white.rsi/meta.json | 41 ++++++ .../Hats/beretwhite.rsi/equipped-HELMET.png | Bin 0 -> 897 bytes .../Head/Hats/beretwhite.rsi/icon.png | Bin 0 -> 630 bytes .../Head/Hats/beretwhite.rsi/inhand-left.png | Bin 0 -> 873 bytes .../Head/Hats/beretwhite.rsi/inhand-right.png | Bin 0 -> 879 bytes .../Head/Hats/beretwhite.rsi/meta.json | 26 ++++ .../equipped-MASK-reptilian.png | Bin 0 -> 551 bytes .../neckgaiterwhite.rsi/equipped-MASK-vox.png | Bin 0 -> 588 bytes .../neckgaiterwhite.rsi/equipped-MASK.png | Bin 0 -> 539 bytes .../Mask/neckgaiterwhite.rsi/icon.png | Bin 0 -> 492 bytes .../Mask/neckgaiterwhite.rsi/inhand-left.png | Bin 0 -> 540 bytes .../Mask/neckgaiterwhite.rsi/inhand-right.png | Bin 0 -> 545 bytes .../Mask/neckgaiterwhite.rsi/meta.json | 34 +++++ .../Hydroponics/poppywhite.rsi/dead.png | Bin 0 -> 827 bytes .../poppywhite.rsi/equipped-HELMET.png | Bin 0 -> 470 bytes .../Hydroponics/poppywhite.rsi/harvest.png | Bin 0 -> 1001 bytes .../Hydroponics/poppywhite.rsi/meta.json | 36 +++++ .../Hydroponics/poppywhite.rsi/produce.png | Bin 0 -> 538 bytes .../Hydroponics/poppywhite.rsi/seed.png | Bin 0 -> 393 bytes .../Hydroponics/poppywhite.rsi/stage-1.png | Bin 0 -> 658 bytes .../Hydroponics/poppywhite.rsi/stage-2.png | Bin 0 -> 682 bytes .../Hydroponics/poppywhite.rsi/stage-3.png | Bin 0 -> 727 bytes 50 files changed, 264 insertions(+), 268 deletions(-) create mode 100644 Resources/Locale/en-US/loadouts/generic/mask.ftl create mode 100644 Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/equipped-HAND.png create mode 100644 Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-HELMET-vox.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK-vox.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon_mask.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Bandanas/white.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/equipped-MASK-reptilian.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/equipped-MASK-vox.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/equipped-MASK.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/dead.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/harvest.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/produce.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/seed.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-1.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-2.png create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-3.png diff --git a/Resources/Locale/en-US/forensics/fibers.ftl b/Resources/Locale/en-US/forensics/fibers.ftl index c95b292c966..a625847fc2b 100644 --- a/Resources/Locale/en-US/forensics/fibers.ftl +++ b/Resources/Locale/en-US/forensics/fibers.ftl @@ -23,3 +23,4 @@ fibers-white = white fibers-yellow = yellow fibers-regal-blue = regal blue fibers-olive = olive +fibers-dyed = dyed fibers \ No newline at end of file diff --git a/Resources/Locale/en-US/loadouts/generic/hands.ftl b/Resources/Locale/en-US/loadouts/generic/hands.ftl index d9df439ce5a..3ceed69d176 100644 --- a/Resources/Locale/en-US/loadouts/generic/hands.ftl +++ b/Resources/Locale/en-US/loadouts/generic/hands.ftl @@ -1 +1,2 @@ loadout-name-LoadoutHandsColorWhite = gloves (colorable) +loadout-name-LoadoutHandsGlovesFingerlessWhite = fingerless gloves (colorable) \ No newline at end of file diff --git a/Resources/Locale/en-US/loadouts/generic/head.ftl b/Resources/Locale/en-US/loadouts/generic/head.ftl index efd13b00845..d2a6d511284 100644 --- a/Resources/Locale/en-US/loadouts/generic/head.ftl +++ b/Resources/Locale/en-US/loadouts/generic/head.ftl @@ -10,3 +10,6 @@ loadout-name-LoadoutHeadTurbanColorable = turban (colorable) loadout-name-LoadoutHeadKippahColorable = kippah (colorable) loadout-name-LoadoutHeadTinfoil = tinfoil hat (colorable) loadout-name-LoadoutHeadHatCowboyBountyHunter = bounty hunter hat (colorable) +loadout-name-LoadoutHeadBandWhite = headband (colorable) +loadout-name-LoadoutHeadBeretWhite = beret (colorable) +loadout-name-LoadoutHeadPoppyWhite = hair flower (colorable) \ No newline at end of file diff --git a/Resources/Locale/en-US/loadouts/generic/mask.ftl b/Resources/Locale/en-US/loadouts/generic/mask.ftl new file mode 100644 index 00000000000..79ebf9b2885 --- /dev/null +++ b/Resources/Locale/en-US/loadouts/generic/mask.ftl @@ -0,0 +1,3 @@ +loadout-name-LoadoutMaskBandWhite = cloth mask (colorable) +loadout-name-LoadoutMaskNeckGaiterWhite = neck gaiter (colorable) +loadout-name-LoadoutMaskSterile = sterile mask (colorable) \ No newline at end of file diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml index e6bd267b1d0..26f93d6531d 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/headGroup.yml @@ -21,6 +21,8 @@ id: LoadoutHeadBellhop - type: loadout id: LoadoutHeadPoppy + - type: loadout + id: LoadoutHeadPoppyWhite - type: loadout id: LoadoutHeadHatCorpsoft - type: loadout @@ -30,21 +32,9 @@ - type: loadout id: LoadoutHeadHatMimesoftFlipped - type: loadout - id: LoadoutHeadBandBlack - - type: loadout - id: LoadoutHeadBandBlue - - type: loadout - id: LoadoutHeadBandGold - - type: loadout - id: LoadoutHeadBandGreen - - type: loadout - id: LoadoutHeadBandGrey - - type: loadout - id: LoadoutHeadBandRed + id: LoadoutHeadBandWhite - type: loadout id: LoadoutHeadBandSkull - - type: loadout - id: LoadoutHeadBandMerc - type: loadout id: LoadoutHeadBandBrown - type: loadout @@ -60,9 +50,7 @@ - type: loadout id: LoadoutHeadBrownFlatcap - type: loadout - id: LoadoutHeadBeret - - type: loadout - id: LoadoutHeadBeretFrench + id: LoadoutHeadBeretWhite - type: loadout id: LoadoutHeadHijabColorable - type: loadout diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml b/Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml index ffe37fc0426..fe78d84c9e9 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/maskGroup.yml @@ -7,25 +7,9 @@ id: LoadoutMaskMuzzle - type: loadout id: LoadoutMaskGas - - type: loadout - id: LoadoutMaskBandBlack - - type: loadout - id: LoadoutMaskBandBlue - - type: loadout - id: LoadoutMaskBandGold - - type: loadout - id: LoadoutMaskBandGreen - - type: loadout - id: LoadoutMaskBandGrey - - type: loadout - id: LoadoutMaskBandRed - type: loadout id: LoadoutMaskBandSkull - type: loadout - id: LoadoutMaskBandMerc - - type: loadout - id: LoadoutMaskBandBrown - - type: loadout - id: LoadoutMaskNeckGaiter + id: LoadoutMaskBandWhite - type: loadout - id: LoadoutMaskNeckGaiterRed + id: LoadoutMaskNeckGaiterWhite diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index 2abe1f0a80f..fdec5232026 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -300,6 +300,20 @@ fiberMaterial: fibers-synthetic fiberColor: fibers-black +- type: entity + parent: ClothingHandsButcherable + id: ClothingHandsGlovesFingerlessWhite + name: fingerless gloves + description: Plain gloves without fingertips. + components: + - type: Sprite + sprite: Clothing/Hands/Gloves/fingerlesswhite.rsi + - type: Clothing + sprite: Clothing/Hands/Gloves/fingerlesswhite.rsi + - type: Fiber + fiberMaterial: fibers-synthetic + fiberColor: fibers-dyed + - type: entity parent: ClothingHandsBase id: ClothingHandsGlovesFingerlessInsulated diff --git a/Resources/Prototypes/Entities/Clothing/Head/bandanas.yml b/Resources/Prototypes/Entities/Clothing/Head/bandanas.yml index 51a56f1f1d6..29a99ce6440 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/bandanas.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/bandanas.yml @@ -24,6 +24,11 @@ tags: - Bandana +- type: entity + parent: [ClothingHeadBandBase, ClothingMaskBandWhite] + id: ClothingHeadBandWhite + name: bandana + - type: entity parent: [ClothingHeadBandBase, ClothingMaskBandBlack] id: ClothingHeadBandBlack diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index 5b5d281362d..fe590c55628 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -25,6 +25,17 @@ - HamsterWearable - WhitelistChameleon +- type: entity + parent: ClothingHeadHatBeret + id: ClothingHeadHatBeretWhite + name: beret + description: A beret, an artists favorite headwear. + components: + - type: Sprite + sprite: Clothing/Head/Hats/beretwhite.rsi + - type: Clothing + sprite: Clothing/Head/Hats/beretwhite.rsi + - type: entity parent: ClothingHeadBase id: ClothingHeadHatBeretFrench diff --git a/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml b/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml index f5ad2fb6c83..f1f7ebc4cc5 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml @@ -30,6 +30,17 @@ - Snout hideOnToggle: true +- type: entity + parent: ClothingMaskBandanaBase + id: ClothingMaskBandWhite + name: bandana + description: A bandana to make you look cool. + components: + - type: Sprite + sprite: Clothing/Head/Bandanas/white.rsi + - type: Clothing + sprite: Clothing/Head/Bandanas/white.rsi + - type: entity parent: ClothingMaskBandanaBase id: ClothingMaskBandBlack diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index c470605bb79..383e32e99d6 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -562,6 +562,16 @@ - WhitelistChameleon - IPCMaskWearable # Estacao Pirata - IPCs +- type: entity + parent: ClothingMaskNeckGaiter + id: ClothingMaskNeckGaiterWhite + name: neck gaiter + components: + - type: Sprite + sprite: Clothing/Mask/neckgaiterwhite.rsi + - type: Clothing + sprite: Clothing/Mask/neckgaiterwhite.rsi + - type: entity parent: ClothingMaskNeckGaiter id: ClothingMaskNeckGaiterRed diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 3bf253f773b..f9bd17860c8 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -1249,6 +1249,14 @@ tags: - Flower # TODO add "RedFlower" or "Poppy" tag, when other color flowers will be +- type: entity + name: hairflower + id: FoodPoppyWhite + parent: FoodPoppy + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/poppywhite.rsi + - type: entity name: lily parent: FoodPoppy diff --git a/Resources/Prototypes/Loadouts/Generic/hands.yml b/Resources/Prototypes/Loadouts/Generic/hands.yml index 830dcd7beee..2a35910a17c 100644 --- a/Resources/Prototypes/Loadouts/Generic/hands.yml +++ b/Resources/Prototypes/Loadouts/Generic/hands.yml @@ -61,12 +61,13 @@ group: LoadoutGloves - type: loadout - id: LoadoutHandsGlovesFingerless + id: LoadoutHandsGlovesFingerlessWhite category: Hands cost: 0 exclusive: true + customColorTint: true items: - - ClothingHandsGlovesFingerless + - ClothingHandsGlovesFingerlessWhite requirements: - !type:CharacterItemGroupRequirement group: LoadoutGloves diff --git a/Resources/Prototypes/Loadouts/Generic/head.yml b/Resources/Prototypes/Loadouts/Generic/head.yml index c48ad846e1d..3efef2fac4a 100644 --- a/Resources/Prototypes/Loadouts/Generic/head.yml +++ b/Resources/Prototypes/Loadouts/Generic/head.yml @@ -122,6 +122,18 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead +- type: loadout + id: LoadoutHeadPoppyWhite + category: Head + cost: 0 + exclusive: true + customColorTint: true + items: + - FoodPoppyWhite + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHead + # Color Hats - type: loadout id: LoadoutHeadHatCorpsoft @@ -171,83 +183,13 @@ # Headbands - type: loadout - id: LoadoutHeadBandBlack - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandBlue - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandBlue - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandGold - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandGold - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandGreen - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandGreen - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandGrey - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandGrey - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandRed + id: LoadoutHeadBandWhite category: Head cost: 0 exclusive: true + customColorTint: true items: - - ClothingHeadBandRed + - ClothingHeadBandWhite requirements: - !type:CharacterItemGroupRequirement group: LoadoutHead @@ -264,36 +206,6 @@ - !type:CharacterItemGroupRequirement group: LoadoutHead -- type: loadout - id: LoadoutHeadBandMerc - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadBandMerc - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBandBrown - category: Head - cost: 0 - exclusive: true - items: - - ClothingHeadBandBrown - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutHead - - type: loadout id: LoadoutHeadFishCap category: Head @@ -375,23 +287,13 @@ # Berets - type: loadout - id: LoadoutHeadBeret - category: Head - cost: 1 - exclusive: true - items: - - ClothingHeadHatBeret - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutHead - -- type: loadout - id: LoadoutHeadBeretFrench + id: LoadoutHeadBeretWhite category: Head cost: 1 exclusive: true + customColorTint: true items: - - ClothingHeadHatBeretFrench + - ClothingHeadHatBeretWhite requirements: - !type:CharacterItemGroupRequirement group: LoadoutHead diff --git a/Resources/Prototypes/Loadouts/Generic/mask.yml b/Resources/Prototypes/Loadouts/Generic/mask.yml index 3d3754c6f7d..6445071d548 100644 --- a/Resources/Prototypes/Loadouts/Generic/mask.yml +++ b/Resources/Prototypes/Loadouts/Generic/mask.yml @@ -3,6 +3,7 @@ category: Mask cost: 0 exclusive: true + customColorTint: true items: - ClothingMaskSterile requirements: @@ -34,83 +35,13 @@ # Maskbands - type: loadout - id: LoadoutMaskBandBlack + id: LoadoutMaskBandWhite category: Mask cost: 0 exclusive: true + customColorTint: true items: - - ClothingMaskBandBlack - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandBlue - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandBlue - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandGold - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandGold - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandGreen - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandGreen - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandGrey - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandGrey - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandRed - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandRed + - ClothingMaskBandWhite requirements: - !type:CharacterItemGroupRequirement group: LoadoutMasks @@ -127,55 +58,15 @@ - !type:CharacterItemGroupRequirement group: LoadoutMasks -- type: loadout - id: LoadoutMaskBandMerc - category: Mask - cost: 1 - exclusive: true - items: - - ClothingMaskBandMerc - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskBandBrown - category: Mask - cost: 0 - exclusive: true - items: - - ClothingMaskBandBrown - requirements: - - !type:CharacterDepartmentRequirement - inverted: true - departments: - - Security - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - # Gaiters - type: loadout - id: LoadoutMaskNeckGaiter - category: Mask - cost: 1 - exclusive: true - items: - - ClothingMaskNeckGaiter - requirements: - - !type:CharacterItemGroupRequirement - group: LoadoutMasks - -- type: loadout - id: LoadoutMaskNeckGaiterRed + id: LoadoutMaskNeckGaiterWhite category: Mask cost: 1 exclusive: true + customColorTint: true items: - - ClothingMaskNeckGaiterRed + - ClothingMaskNeckGaiterWhite requirements: - !type:CharacterItemGroupRequirement group: LoadoutMasks diff --git a/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/equipped-HAND.png b/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/equipped-HAND.png new file mode 100644 index 0000000000000000000000000000000000000000..36170c46610bcde9f03c4c3b2638d2816f425d52 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z9y@mI(7}T@uV4TF|366VSN{PZ#aa^N7Yr2n&+vO2UocRBv%n*= zn1O-sFbFdq&tH)O6qG1&jVKAuPb(=;EJ|evNX*PD(erZ+Q83jr)H6)l8pH!svn@5k zGtJXei-7}VEQ1syD+42tb$b#xJG%x_k zN|#)oa)qOf8^|p4ba4!caDRKvk*`64$0abM`oHmPP7RBNZi_o-|J3$4nS5JFUs!>G zQ=q|)*=uW}=xUzjpP3E5*Yy<4kK2CfC&QZg6LcF=&hg8uJ1_`=)v*X{&}ZztmA1ut xj(#oY4yKB7g@ib!Ng3rHcDv^@FuurFNMe@yZtr}%=utJuHJ+}1F6*2UngE6f0m>W-C|M7r*h_-^g8zd7gOoS3 z8&HU|z$3Dlfr0NZ2s0kfUy%Y7lqhkHC<)F_D=AMbN@WO0%*-p%^K%VRFx4~EGfdhV z!~;~bEj7Y3&C^qhfdj~4WsqWIWncudynt95$_DvBgOM35&IDu|GBPm;0O=?o&TMA^ zi)R7ZAdmpWApI~J%~A$n7))SiU;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KU zvY@&Q4GciC(j}LtT;XWr1~Qj;x;Tbd_`jXV$k$-N!JO&%|9?vK3^!q6`-I05Qzq+5 z{cf*I_`>9J=d3$lxI(Al8fk;M32B1jMT{M~#+=75y~@0Fi{a)Z4pZL{-)yBTpC<2Y zWmFEW^t74DH~7Wy?JvWzUn0BarZ{kd-0tb>=d#Wz Gp$P!zBbqS) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-left.png b/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc12be332e32e8df39f858acced9788d91f2468 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h2Ka=y&X_S{)v8rMUeT&c>OhLQB*-uL|9^(-r+9&C88{0(B8wRq_zr_G z*AN9$JwrXiq^&_bKsDP^BRtbQJ+&A( zfE-o^DMnTXMj*=zh^3)ykc%}KnZe>rK(-+x6N3PdjsoJ$b{4RB7LW}B2|x_e52Mj6 zWdQnl0y_f>P=$e!u>s=(h^ZhQtP3C}O#!k&fC*?06If-Cr3H`$)n#a40Fsq1xjf|x zM;kYgnda%@7!u+B_L?JCg98uC!5RPUqu6aaBo!S4ro5ZXqFa2scaJ1P0~13)J?oxZ z^N(GcZ>3*PznXvGj_LioyP1JO1gu7$<(#}vW04zwV^w)YRdbc+3?|iv b?~P|fbP0l+XkKhr(>u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-right.png b/Resources/Textures/Clothing/Hands/Gloves/fingerlesswhite.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b2046039fab02bb84a217df4484b3befc8fe322c GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h2Ka=y&X_S{)v8rMUeT&c>OhLQB*-uL|9^(-r+9&C88{0(B8wRq_zr_G z*AN9$JwrXiq^&_bKsDP^BRtbQJ+&A( zfE-o^DMnTXMj*=zh^3)ykc%}KnZe>rK(-+x6N3PdjsoJ$b{4RB7LW}B2|x_e52Mj6 zWdQnl0y_f>P=$e!u>s=(h^ZhQtP3C}O#!k&fC*?06If-Cr3H`$)n#a40Fsq1xjf|x zM;kYgneFM~7!u+B_L?JKg8~oh#aqASqjo!JYW-vp?wuLAQA7W3<4<5{2r@W)(RbMX z>g3~`ZmlIJxeN;1bKgnLxT~=9?xh7)FU=SlI2aU|7&`W`^E97j{oARxwc(fNjp{1q kzmo%`=GwDk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yR#jCkTC`~0x^>5n9ow;E$E{npKq@sKECN#OB|(0{|G|Jk%A45@ zD8yOd5n0T@z;^_M8K-LVNdpBXN?apKg7ec#$`gxH83GbB^GfvmTtgI0^$hh4lePx& z0M%?ujqptK^weVD0CHFvq!?Kl7=bJ=AeM%*K|au6WCn{f0ojI(Obh}*Itqw0+gZTk zSwJ=j@RTz$ya0L>Mx$BE0F;`*&cFgxX<%e*z__0NEhG1T>cktTM>b z0?2~uGBhv%$;xu{JPj|C8%1Mi2)g|c|r`9G9PTRNZ401Od6?8Imd^G!3?9K1{ zjxur!FLTbX& zvW$a$=ToOet@fDCR&b5)aHM%-T4GxsM@`7iox1lpJA2r|-Mvc$pj;I4fPI>xbHs~4ulfjsKz>gTe~DWM4f DR2s0{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..62de52505ab560d3b48833d1b06015303504b1bf GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yR#jCkTC`~0x^>5n9ow;E$E{npKq@sKECN#OB|(0{|G|Jk%A45@ zD8yOd5n0T@z;_sg8IR|$NC65;l(KW=8CT$Jk z0jk-S8sVAd>8ZuQ0pzeUNHMZ9FalX#Kr9VqgM6UD$P5-|0!MXrq(i9*Y1ek#4Fo9JDSy}*D zP+f)w1|V7KlFL)BaI|p)nFl;w977`9-%dL%bXbAI)v@RQ|C4)Ntd2gvvd#EzL5z#q zb>>J(t@uyLjE2+RrUx9_wD;naDK1O=Ei}9*-TAuZIq&2{VZ8yzUe8@1mV1D?(oJ}^ z*6S}kvKys8_!yj&=aN|cw4|v~pv8gHkz)#w%4A)WGpB@o&59o;n`5SXOfOJa(5ZI8 zx8eKWzi$s*UGseHsy&A!<|@W-Td%;-y!&zO_Pggh7t3CJJAHD$kN@7Qe^34qwo_tJ j3~&-)Qf2usKIId`xrMO@+GDb9K>qS{^>bP0l+XkKu^_D= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..b47625c11d1962e4c801fecd0d9bbd360d45340e GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwR#jDP*sx*7j2Xv{9b2?$(W+IecI?;zl-&10E*eO2lmz(&|AzpE zd(C?zfnuBm9+AZi417mGm~pB$pESs@64!{5;QX|b^2DN4hJeJ(yb?V>*AN9$JwrXi zq^&_bKsDP^BRtbQJ+&A(fE-o^DMnTXMj*=zh^3)ykS{bCnZe>rK(-+x6N3PdjsoJ$ zb{4RB7LW}BJmriGFMytf(P)-30Hr3dGq3QV0J5OE3=IrGvNGNrTW-j`0(zO@pr?ytNQC>_X{Y%PEAX)NDn9-He@FJ?utPSJ zwzY>%eSWBElduKjResKc>p4}_rS&g!b`+oU$>-Km<+!xT|IQ0*Gc%5+zyEI@Q};Vy z(fCyJ30GW$^BZ%6A|;#WPn*lRFZP@rxX!8xN_b?Jvw7r5VKHfZmW z+3vi#iBsh4!+HF5?7tWsqBp262rlKZE@YbdDxJqYTIfRF>JyWX@dQS&1Z{s2$?1~F msPo$Tpexu+MS*>~E57oT3g#Yp?WO7m@|dTqpUXO@geCw>TBUse literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/equipped-MASK.png new file mode 100644 index 0000000000000000000000000000000000000000..8b592ff678e810cf7b2ea5533844f9d91b7acb80 GIT binary patch literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zR#jCUJ9ccwj2Sz2>;Q^+<%+%sQmiFGe!>5NfZ_KxzF?pLXMsm# zF#`kNVGw3Kp1&dmC@4|l8c`CQpH@>myuy_`b4FU;3 z4AKvy(JW;E`h5aB0}D`vfswHR;{u4OARVj=ASO)#vO$0eXbuxtWss!>kOkFcXkY-6 zl`gqFgnp|vd$@?2>=c6iOK)~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a471b2b6ec3c296d21ff06fab14063e0b5e15921 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?STtE#HHy1EuET6E#Ug&jL~0EL^4ZY%{-Y$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUNo?+6~AReHa zZK)BSX`Y^13>-iXD}xjxD+42tb$b#xJ zG%x_kN|#)oa)qOf8_4YQba4!^@P8Y4QK&(I=hm`+|Ml7V^f&KX_x#a8%?%UN-ZJi2 z{CF;bbNLV4}|fgW6+BE4CW3 zC{N>PzEsN7&dlNz6j*3cwfpg^N6V)2cJ9uWitkYJo!++2>3OiaYR_b&uuAhD`K6cp ej5j|JZo6h?=P8(e!T4V?$d#V1elF{r5}E)CD~j&` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon_mask.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/icon_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ffc9c4a36526379ce6b531418574b4e1d60db6 GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?STtE#Gw9XqyY(V`0%F05O(4k*kobv_(Ov6Te*1^)*DhRyqz><5Z) z7I;J!GcfQS24TkI`72U@f)XXJ5hcO-X(i=}MX3w{iJ5sNdVa1U3Z{C7dWK0`gLr^y zwxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLYcMi{#hHL?Lq;YB0U#X(#F_0ZVDT&< z8w3)77^ELYqgl!T^#25Q1{RSYP${;V1QVG}YG&QozfS+Hg8nbY z%XSS#FZ+|3r|f*n5E8oj70-l_eOoM#wP)RHV9D4uD}nLwj*C1+&)8GbI3sFy?P0b! zq%OyBEb#!NTT2bUg5YNko}KJX!M=WR@(eC|2MmPteGlCG3UY_1tDnm{r-UW|i%)y% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0b841c1c41885ee75e8f51ac87dbe3b96db0eb GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwrlce{Hq{pv6#xaMDIXLAsVfQc3;zHAKZAqT$}d1ZXMsm#F#`kN zVGw3Kp1&dmC@4|l8c`CQpH@c zG@7LhKz~nQXJ7%UFfcMUU|aw(6{Lf80mP&!KsE?40nK3os|>QV0J5OE3=IrGveG4& zr(EG^;|4Mpdb&7vi>j)>}G4w-Y@xHH^CQ%BtkP>LxjnfP?^tM#qEp+;PeCIq&qn;?6m|Q}(*pliLfmE%MrzJ=i0A qtEtAigtag#lgm$I!GRxJ6V9=x^y*zY`@?e{$l;!@elF{r5}E+>C5oy5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Bandanas/white.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e959b046eca7b83f1466d626b3937d3ba10ad646 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwrlce{Hq{pv6#xaMDIXLAsVfQc3;zHAKZAqT$}d1ZXMsm#F#`kN zVGw3Kp1&dmC@4|l8c`CQpH@c zG@7LhKz~nQXJ7%UFfcMUU|aw(6{Lf80mP&!KsE?40nK3os|>QV0J5OE3=IrGveG4& zr(EG^;|4O9db&7%-*=cl{>*-G&NTXHd8YdP1D(DzV=SbFnp_KvR7%7eZGRtC vOq_68-T6?0_w@FbgOR_O1soFoL|wSW9mcJ9DZM}v6n6}su6{1-oD!M>S|f?5q$_l%JNFlghxL zaenGVTaUvIGDqWsmuiU$T6b8atnd?aah35F=}uUYnU+^ileG(`lyjJTqTDu_^3`(Al!_(y=ueSx1bIB!*trj6YGa zrs&?IHB(owsr0KmoZuJlSvdEZMpA^63};6`fGcO}jVs}tR+?gyw&<09=-=^=Wv58d z)B`6rHgK7oSSSC7x2`<<>GI`!mMmZ?*>7>~xP-tBRw>itKkdrq9OHaY&$jN%wEaQs z&+I(cZ{6}i&|m{^Ow4wZRQ?@z7~AIa+?*17(m(jb^TzMSRm*e?O1QtQt=wyRz3>;q zl9j8UNKW=8CT$Jk0jlXqjqptK^weVD0CHFvq!?Kl z7=bJ=AeM%*K?z5Lkr^z`1Y{dBGBF4M=_nx1Y-a(BX93wD;3>(-@B)~=U^JSg3_$%8 z*cn)WDh-T`4Hy?dO#S~KteIiYnWd}@yS@TbA;Wr47srqY_qWp=`3@`au=Hv^{BOT* zx`mLNsZ(yhwRqDs*;e6c|C9q2Hi<{Y{rRjY;u2cU^`zAB%<-p7uX^xabC=`2oO$t< z-r?=?8XfB|)mYD9N&UOKnXtrgGzHd=0CJj~NpFDJ}$-+_^}0c^^b ad%vaC!*eemP1}A2j#2FZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/beretwhite.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f4d7a07d370034eef1be0965b87c855cf0b8de30 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijA1AIbUXUv!}Z{EB)bLPyNHEYR|B`a2}Shj50qD6})O`0@q+O(dYp1!`m zwzjsWrlzj0uDZIqnwpwbt5!{zFk#J_H5C;V9UUDF4GjwxENE$InKESx&{U5(CmVs3 zbV-n3@PC|uLEVJg6sU}|z$3Dlfq`2Xgc%uT&5-~KN|d-plmzFem6RtIr7{F0X6BXX z`MHKDnCcno876HF;sL7JmKx!i=IN=$zyaj2GDtD9GB5&JUO+4jWrIRQgOM35&IDu| zGBPm;0O=?o&TMA^i)R7ZAmAy<$nXLfa4;IpQU;*Z1a<}%ph^QHV*|zo5K}=mvMzv_ z1oArwFagbF0;>$Nv;eZ8x(p2rK(cp>y`tDPM0Nm~3q4&NLoEE?_Fd#Vq`>2Pn=#c{ zLby=t|Nn($(ZV;9l6uzf_J4Y3a*#%R5m$7bIKzfuBYjJbhFcPwR!#rzC~+Vw$uYX1 zsf_9RER(|i0>NusrzY`l`IaTYYQ_|?$RhS>S|f?5q$_l%JNFlghxL zaenGVYmdVYGRO8W>*Ci^DibK=h?uL>p)aG_<+>r@7S~#<88N?_)ObC+x)(o)D)_K5 zqO_p!+SP-h0xa?h>-7A(^nxD!pXAgXaFF}>-yeGSkKZkC2+%b;nGi~{o0bRd{2JH z#CYa)p<8Va*RjnqwK7T$kv84;{Noe9?#>S|f?5q$_l%JNFlghxL zaenGVYmdVYGRO8W>*Ci^DibK=h?uL>p)aG_<+>r@7S~#<88N?_)ObC+x)(o)D)_K5 zqO_p!+SP-h0xa?h>-7A(^nxD!pXAgXaFF}>-yeGSkKZkC2+%b;nGi~{k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z*3`Ca-MS|`w|MsKML;ph@8^nu6l+P4U+{k*VEDa_FBmAmS>O>_ z%)r1c48n{Iv*t(u1tm&cBT9nv(@M${i&7Z^5;OBk^!!{y6ioFD^$e4?2JryZY)g&s zO!M^AV&DK7%OJ(b%D@O@c>%FBlnrvZ1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*LBLaz zk>LfRrukDJj^i^M1K3cH< zU&8~AZNC{G>b?#M$l?E;dv{vsky&rk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z=H*wcU%!3g#MzNC$w0ABr!3rn6l+P4U+{k*VEDa_FBmAmS>O>_ z%)r1c48n{Iv*t(u1tm&cBT9nv(@M${i&7Z^5;OBk^!!{y6ioFD^$e4?2JryZY)g&s zO!M^AV&DK7%OJ(b%D@O@c>%FBlnrvZ1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*LBLaz zk>Lf>c%i`Cx8hl|ypA!macajvM>6RgRpAur)i^_@Y`#tl!v0>5x!2MVwi#uuoh!V279W;+Q?&C6Zrjm-;{9BIS zY%`9Q>-)~MH&b@j;}uSa%?cyre!ORS%$zMb!=&c8g6Rv#mwO`_CU9npB}A6JYhCcC raq`oDNAI4`bmX2Qw#DJ+_6HVnR}Jhu4o_dw4f3X^tDnm{r-UW|;UA}w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/equipped-MASK.png new file mode 100644 index 0000000000000000000000000000000000000000..3512302b5fc99179b5b48b9464cf1f968a12f9fa GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yX6F`f-MXiywq^G0Mdg+CJ-w5GGV9}aUItR^B|(0{|G|Jk%A45@ zD8yOd5n0T@z%2~Ij105pNB{*TN?apKg7ec#$`gxH83GbB^GfvmTtgI0^$hh4lePx& z0M%?ujqptK^weVD0CHFvq!?Kl7=bJ=AeM%*K|au6WCn{f0ojI(Obh}*Itqw0+gZTk zSwJ=jcuF!dya0L>Mx$BE0F;`*&cFgxX<%e*z__0NEhG1T>cktTM>b z0?2~uGBhv%$=)sYielFg*#Tru^K@|xiEw{A&5^IwfWw9T)%(BwZx-m)WqX_G`JCA^ zHRZ)**#&kkP477q;=0byO}O(scIv)#zA1Y7UOzVd`NVnWGv^J%diyh*zj=EoI4U%< zG_nY>#0xL@z+f=@ZTJq!@AbPM+>X<`|Hi3t(aUFW+1JyK(4?ox-2fA59Ys p?pDUk=QB8Su4y*JfP=T2qQZ|aiF1*k(_#&Bt*5J>%Q~loCICg_mEiyY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/icon.png b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..af3948b8f4226d280c66a46c923561ad963bebac GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?STJ39NTsvD+Gowa-S!NrSL0)=^f{=ETGY$ZW{!T&*kVe|ea`+*{y z1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUNo?+6~AReHa zZK)BSX`Y^13>-iXD}xjxD+42tb$b#xJ zG%x_kN|#)oa)qOf8_3M|ba4!^@P9kOk*~pkgGGGl|Non~RdrYNiucd;X13O3*}}i= z!q3PCMWIl2&ZfgVG=n?lh$M4KF!jEeXp$shsekCDH`6YG3=7qIu2tTQVp02~6wlPK t>fS$=eW9ReJ;$D@!lBE<^m7hoyk!#GBb3vYx+enU1W#8#mvv4FO#u00b+-Tj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-left.png b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..65acefa0c34c41f4ab2d9a2c3bdda682b28c1a37 GIT binary patch literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zR#i82boMV^ymI&MgFvw*R%Y5jinS!jFZe$YF#O)e7Yr2OEbxdd zW?%FBlnrvZ1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*K_CH$ zLHc1dnxzatzfWLiU;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KUvY@&Q4GciC z(j}LtT;XWr1~TV+x;TbJxWAp|$k(DEz{2?R|Lp50H?X%!E&7<`bKUjQ7SX+>FZm}r zFgY`E_DtuxQKh{0vE^Y+uBg~s>6eZbwz1~w2B$4}U}3KqblcF+xHF;mw5+2eV_0N^ zrupU{Rze;L9tw?$2g_Nlv-cd<(`Qt_H&G#y$?p!IipR7D;c_O9O{x!$yk%(0;j}2U sUeNIGwf~-_@811=S{A>rfo1Q1hR$R5ZZT`Z;y}*!boFyt=akR{01H5kVgLXD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-right.png b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..2f39874647c465fbdad4c9df010c7ccbf2026d5d GIT binary patch literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zR#i82boMV^ymI&MgFvw*R%Y5jinS!jFZe$YF#O)e7Yr2OEbxdd zW?%FBlnrvZ1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*K_CH$ zLHc1dnxzatzfWLiU;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KUvY@&Q4GciC z(j}LtT;XWr1~Qj;x;TbJxWAp|$aPeK$HnyPzw~uYy^C91UM`zbIa~hBj|qAImV6T8 z(#QyKaC{uxR4cBQc&t0R=x1XL^e*fMtbF&2trbxF(+Pk%tyYB_L-P6_2Wt~$(696J`lEDA~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/meta.json b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/meta.json new file mode 100644 index 00000000000..4da74959ddc --- /dev/null +++ b/Resources/Textures/Clothing/Mask/neckgaiterwhite.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by belay5 (Discord) | equipped-MASK-vox sprited by PuroSlavKing (Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/dead.png new file mode 100644 index 0000000000000000000000000000000000000000..849b4242b4e3c9a12566fd21cea480d2edd732bc GIT binary patch literal 827 zcmV-B1H}A^P)EX>4Tx04R}tkv&MmKpe$i)0T=<9NIy}AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRR-^Y&AJOTXAz?I(iR~x|0C+YRJ z7CQp^w}Ff6wx;X>mpj0~lOdb3EBR>(g#z$?M&FbJBDX;An%7%vAEysMhPq1K00)P_ zXpyqlyS%%nv$ucGwEFu2_@8oila(vO00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<^lv09wU)0#f$&|02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{009$8L_t(o!|j$a&ch%Kg&$QV-zf)R^GUL0;{xrr~3 z$#-I+ONr8|zy2f;TD9?lkP@E#>Dd7MdYG+0gb)${#26tWP*u}BYwvx^Yu9zDnQ*Q? zi{JOjTATX5PvbbI!z&LVJXF0*!dknTh^a+p7zTLn0RTjV7$cl>|DJ!XNCyCB(X}Kl zHN<0#AR-XaY|ypcajAhnSDjlkC(*67dKX;v)n*n>!kny002ovPDHLk FV1iQyX|(_V literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/equipped-HELMET.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..221e35fbc39d3ffa3d90cb151af9263e973d8d23 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zUb}Yf|NsA+Hf?(K>J?B-=F!B9K#H{_$S)Wu{-5FZHojn>0B3-L15RjOeSEA?V8lqsTXQ*eGv^9tasAgMg zglC$krxpVT$XEs`Mpgz!Aj=DgrJ-z)%QYC8!QxCnwjm=Eg8-0@0^-be7O;30kPQL} zKn&6kqtPs70Q!9bI|B<)g@KW=0pkLQsURJ!3m_&<0kT1W31|)zSY?o<1&{^RWoTdk zl9evGJmm^U8#j;{>FMGa65;;#njzN#1p$|frZa!fx8#XP)s<t2fqepVZna0_Hrpfq75V)0|2uL+B|NJb4880x TCocFD0J6~2)z4*}Q$iB}hO%&V literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/harvest.png new file mode 100644 index 0000000000000000000000000000000000000000..99ad68a5d28f795cbac14694e99e691819006533 GIT binary patch literal 1001 zcmVEX>4Tx04R}tkv&MmKpe$i)0T=<9NIy}AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRR-^Y&AJOTXAz?I(iR~x|0C+YRJ z7CQp^w}Ff6wx;X>mpj0~lOdb3EBR>(g#z$?M&FbJBDX;An%7%vAEysMhPq1K00)P_ zXpyqlyS%%nv$ucGwEFu2_@8oila(vO00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<^lv09uv3p^&kKM02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00F^CL_t(o!|jwYOT$nUg};<`bTWnNAUJfCQl}C+xO6P| z16)*!Ao&GO`4PpX(9K=iMeLHHR2NZkEGQI_LbG*D;W?y9leEPoP3n>ZA$iFo=iYP9 zeGn1v^_qCE*TlMYP)Je90j3iJfStVTc`kK(Qep+T$qjRcoXY}Wm@@$6TsBk@nXu$v zKVzm7gPpvLoXcXEGv3ZFx!v9K6cW^qOjrdD_X`;2%qimZ<%3SAL$O%o`~1qYw_hp$ zSwuDrxlQU*g;MtsfZ=e+bAsg!z zI8YYzts?Xjoz`f;-RI5neq&DFj8ToHaJjoy5ombTaGwENnFO~*eoMAeK#CM8QpAK` X$G`Cmy<|(700000NkvXXu0mjftS-bE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/meta.json new file mode 100644 index 00000000000..b49b49cc850 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/meta.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, equipped-HELMET taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/produce.png new file mode 100644 index 0000000000000000000000000000000000000000..84caa94b9a1038b823d051116be281cfaddbf281 GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbU|NZ-S>gCZIV? zV3k3Z7C;tMm!W|HNLIS!@{}taZQMX+ucwP+h=u>#en-Be3LGwijywK$+ADNInDWaN}yKn1v!SORR+gT8o#-sy^)_y!SLgPpVLq8|Mp`} z`_oGw;O>wD_{u)n6E)D1IdHGV;s8$Q2&!(i>@ zkJUZ>2M;k6?cGN(gb6ADnU3sxkmdKEyEX>4Tx04R}tkv&MmKpe$i)0T=<9NIy}AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRR-^Y&AJOTXAz?I(iR~x|0C+YRJ z7CQp^w}Ff6wx;X>mpj0~lOdb3EBR>(g#z$?M&FbJBDX;An%7%vAEysMhPq1K00)P_ zXpyqlyS%%nv$ucGwEFu2_@8oila(vO00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<^lv09Rl`gh7kY&02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003%9L_t(o!((6=1*2dTjDk@x3Pu5`pn>6k>O8Ce)H05V z98I&&9b=%DBS>>V4g=iM*^j8>2&RFKQPLgohJk@W1Q8YVb-)w`Mihr2^XUnwnG49u shRBI=;2hDwFur+#8UO$Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-2.png new file mode 100644 index 0000000000000000000000000000000000000000..090715f6a01b29d7f7088ae6ade018166d980af5 GIT binary patch literal 682 zcmV;b0#*HqP)EX>4Tx04R}tkv&MmKpe$i)0T=<9NIy}AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRR-^Y&AJOTXAz?I(iR~x|0C+YRJ z7CQp^w}Ff6wx;X>mpj0~lOdb3EBR>(g#z$?M&FbJBDX;An%7%vAEysMhPq1K00)P_ zXpyqlyS%%nv$ucGwEFu2_@8oila(vO00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<^lv09TWn+Ge7_U02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004qXL_t(o!|ju?5r7~N1P^Mk8v8M$2#PRc##)FBEyCCy z-V8OAXZX>%%}8MRy9Wp%gnXI^nU+yBS9q;M+E!>J>IDMIqiL^~@YX5n1P%bh6-8fx z8SWu+Klk1Q(>3hcfztHQ?$@sbH0#!O>;ZxZ$vKO58cvnHS^G_!PYC%NC*24v8|*+} Q`Tzg`07*qoM6N<$f;8VDiU0rr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/poppywhite.rsi/stage-3.png new file mode 100644 index 0000000000000000000000000000000000000000..edcd8617dc7cc32e437cc7ca19614ddf09bccdbe GIT binary patch literal 727 zcmV;|0x127P)EX>4Tx04R}tkv&MmKpe$i)0T=<9NIy}AwzYtAS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RRR-^Y&AJOTXAz?I(iR~x|0C+YRJ z7CQp^w}Ff6wx;X>mpj0~lOdb3EBR>(g#z$?M&FbJBDX;An%7%vAEysMhPq1K00)P_ zXpyqlyS%%nv$ucGwEFu2_@8oila(vO00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru<^lv09WXw=*O34K02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{006H^L_t(o!|ju?4FWL?MSn8GO~W`ybT>qXptHm*sa!Hd z>g-?&I1~aDIV*_-epPaX{e0g648!<$oVLK}a**vzM{cg?waqCp=*n+0Lj+1F@q`Fg z2o?Yt!1DMO+G_gQOQ;tpr_ZAW&c*M})qNy;wtqhXGOu~L{a=LoOdKFDlWqdtn^z)F ziCRD*;u{1UCH|awu43sP$$F0^#wgmxPW2L|z5SufXBft>a|70hL{Sky|9}7h002ov JPDHLkV1j6+H~atq literal 0 HcmV?d00001 From cc1e52c47c7b27b8da9be5da701580efe42590ca Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 21 Dec 2024 19:25:39 +0000 Subject: [PATCH 169/182] Automatic Changelog Update (#1365) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6e1c948c5ac..2f706fe2c38 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8733,3 +8733,12 @@ Entries: id: 6585 time: '2024-12-21T18:02:28.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1364 +- author: VMSolidus + changes: + - type: Add + message: >- + Added colorable variants of fingerless gloves, headbands, berets, + hairflowers, cloth masks, and the neck gaiter. + id: 6586 + time: '2024-12-21T19:25:13.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1365 From 35c95a5da3ccb7d23620eaa1aad43022be3d6673 Mon Sep 17 00:00:00 2001 From: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Date: Sat, 21 Dec 2024 13:49:49 -0800 Subject: [PATCH 170/182] Make the EE Logo Match the Banner (#1361) # Description Light mode logo --- Resources/Textures/Logo/logo.png | Bin 20730 -> 18981 bytes .../Textures/Logo/source/EE_logo-light.svg | 218 +++++++++++++++--- Resources/Textures/Logo/source/EE_logo.svg | 50 ++++ 3 files changed, 236 insertions(+), 32 deletions(-) create mode 100644 Resources/Textures/Logo/source/EE_logo.svg diff --git a/Resources/Textures/Logo/logo.png b/Resources/Textures/Logo/logo.png index 60aa041cced24eaaeb08e42a084579f69d6afd75..f06485e27f1f38073b1a45eab03c352b4a471d62 100644 GIT binary patch literal 18981 zcmYg&cT^Ma^YtbK2t|4mP5|Us1e9wE%`$tYVB+u@%yEAuY?wv`TiIMgVQf5*B0B-2&XqW;32>&Mt3?;(9 zQFoAd;NM8Rbu4`W;C9%*7fAo3b~OH8UEcWUit zueX`apU~5Gbd;|k1$X;C#R~EIJ@hklG=S<%i09gaX*(+TUS4!p{JGG6XY#OOqPsOX zC}(Hs?5I-i<)5#?+gp_vp+Y2ObfC;OGFf|LxCSED`-b;KVOU)Et#5^45il4`@eMlw z0{voA1;F3|iAVqfNpygKpirj4kNZ1}Q0NasS^7(YsqAtQ1oN7Y-NQU{@C)PawN)5? z*}M3g2q~+AM%n;bLw`^!$RAjGby&5pNcEmg#Vk4u_(e%_1bB0KD|$;!!L^akWH_NJ zzW9Sb1HvJ-L}3)wKT5r%Mxfv+Ru2+H(SglCb9h@yZ!c(FmNS{NM91qFKW98wiH_`` zM%dV*)%=d{`lD>^ojaSTS2o)xW1%MsTlXM3B&GuImb(m2^olA>9K*#HijqtR?(77{ zrE%|c(^TqkOMeh`oz~GwBTD+9%JmK94ju%}3}y)q&wU?-RD5rdP6~tj0 zDfr<*pi*i)x6iqmnoya^2k_f8C5hNV9ZhvT=C~4$%vIj__Zp_gbm})W6;sLYaGwoO zodvxM3XKhNh*sx!K)PJSoe*GTS#(v%foUT68`1{@c)s*7A0GkzzTOF$_L zi=t3?8$(91KJqwo#dHREHjc4eKyq@R-&ybr(LQT8kn^X|?Vy=2$JCy|1XU8sC z`gv@upBnuZUStVd*VZtX#jfWNo@_M+e5)_;#`v)M?@1WsDzyKhzO#mrt^q_f6I79& z7|YURyfxg4(}AvA)f_!6_O?AWsvoam?jLzr^{D;@k1`H!OFbx&kSzCl##laP#yF7K z*LkuwXjyH|HXO_kSZ@>3w)a*I|6HaA{g0CiH+ z`ghP8+ZP$NdGbCyMCOg~<7Z0P&lN`%2Q>ff67n^d3?``t(p;5B-4A1AH#Xg@VZXn) zcax;|S5=YS{uSR75R;V0?tgm%-y-18#c8d&oOhxFXI$u9*Yz!9VN@D=5NR1pyoCK6=AIc;Rdbw8?kSb#ea{;j_oFkW`G6?n;S^Rvy!&kHKsi3n zK85cT#j92hR0OiJOI<&-I&twtM3e9^6OysB+Zp#Y0LLTBw4mUsnBpOH+HYKiIZUVD zt}i<7;8zsh$@g@j_FsYJJmiXCX0q=`2G|gN#26`6BuTR!2>mk2$sk_S*n5m<)kei9!zwSQ|wMAa*0Jpvvm{ z|GOz;=CBglw=1W_F(~8+;ad$o_A)h+7!w*Eh*}_F@d!AFyo>Hqel4)6_NOhO0mx?9 zGhXO_D;=cmj86S3wy&%o0ZO3HZn*D4CRfnP;I z|6BFr8W0qQ?d1po{29_ufJ&0O2hXvi%NWLy1D~9yRNEk%1YWFe&FaN_?b|>7=aEC{ zEO(E-g$F6mbaae;*#eZoHog3v1phN!6;{o;j|GXCTJ}fax0aB;zvxW8@o?8!Y-)T6 z_y`AcDK*6Exi9s+gD=05hj(mRWz{{><>Zmny*%Pm8sAb1q(&PQc@~C&j&7~JOkB4j z`gd5mNdDyg_lT(%YE(K~N_4N0MYm@*;X3)aCMu28`6T7mKQ$jRmVI#q%cp2%?=8g( z$p>{@WlaZ-Pk-wvVd9KWViJ`5m1a7}M{T1#IWDJSmEws1+b$0of(~2+WeQ9sgMGdS zXsU5$vZr+r7r%{w1LSAo4`--opIMvi|Yeht~9uov)Kc zD#B#^L-)oBg)a&r3f^)ZrBkv0K{*GNCY3i6NJS{uY3G4mA9X};uWFX?6Qb?nQk^1? zyi4%T_w!m2lh>%#50khN9$S~y<#yJ4*pj{di3oRqAS(wov@Z zH6B?q^NwT0=tsNK13OoV1NRcNlsb9i9lEh4jjtTco$F?qwsw^|F8qpaYEtW#_PX>O z@!Y*Q?|`4vtRYfE%KwWE)%5I=(C5^5ZG~s4z?3_}B^I%;U>jB^FpXQ9wxtp+)5+}^ z=;c8^nP~^I(}~RXDn-8-!Hx z_}f3q4)*+ghkKvOy~(&uq_p@)itt}Jb4-uS5{Ai&hW!1p-Md94NE?|(|Mr&KVE;4C zWpiG*_t)Y+QtJC(ulQt+cHL@UDu0oWupI9(+a{)Zt8QG9+F~wrtSV%g*0Ce+kubNV zLzs$>83Hs=l2j87)5-UYBr&n<@u$`Id_GJjmF7IsdCpnRFdNI&AN|NQh3<@rxqj8? z8I<|XN16CIrKKwoA4k6mnWdd7KHw~wSe#}j%??GbW?E9h9}F!X#A%qSnTtBzRgegW zch$kc^zF16TCSEK-rUkAP5qr|lcZCot92i%q}=w0ui$#mMZ#$$V^1O-<^nD&k0i(A z(F;H0%6e~PW$@J!Pn96i_J`OKok<2r-nPIn z&o;-G)Z6SCw=7=YQKc*6q?P+>j1;4fa8FjteCOq75Y&odRDkN`@@=*NKKxCI9|NCob6<3sEbG(y)iWx*>;NS#Xh8&?Vx z`i_y5ey8iS4V2zlejG;`9=qT~w&u32t06@FAGq}c#a+yAU9T87du$=gyP;}!SsT6T z)Aw;ZW2&C<9fw1x@9?V#K!c^kdq02v4}VDvRUFLMOnvh` zXJq)$Kx!VU7NGkerlG>*BpF^l5vzc#KDV&^JQe$ANg^WSv?P|0waHG&EAY$i%BDtK zA(P(^vY3BakHLm0%+NUmNkfmnIA45IOMl4Az_OgY*|d^eL%|gT z-ZCXyz3w8NP_}Nvi!$z163JAZ%(vV$0<=$f_e0XSbuy1mOBr8WMu=#)b4GWI!XzOG z?oeM4FpacJfPGFI89Qw{pTwZuZ>#;BJ1%dx<$(sWg{wZ!A7Zh+V0Jz~ZBstc-doq} z{pY~sb3AT$Z@ksfOna8b5Z7nR%R-)!W<|fnZTjtPnpVj(owC-rr~IkkY5Pso?;CTg z-_Y%r(CD_Quwg4%WqSJ2#(4DgN15s4D=PJ*^#a#)z7`%Jmu!s`rW?>I@6lq=+Wokd zw<{y{j`)Z{jO+(djjNEE8$%srE}T=6}vG-SPir!T;FtZ&m+M=of z{(UaUAY1Fu6R0%K5^)2ukD!dGdM2?}u_MF069WP{kf=e+4R@bnF$4?#$UuV}lSY^I zVX#+8j?k2hVcXr4(#PZmC&*RC7?w4zj=*FtBC`sEpBuEs?q}&ns;xjZB#aV6Anw(M zueo?HftQh3p%RJkiYYZKv;N(fw&@kmJh1%!f8v4K{g1ePl1E9o=ez2qkq8Z@V z0L9B95Nqtn_T%8OJh^nP6xjlYCwaoa-)7j z1iTbI0H^u9IQ86T3`D#)iLVPjmwAzC#6YP?xbOcqSv7!;aK3F`LO+QJ36z}YEZ!r6 za{Op>rQO9|a?32A1_uQN$!>n+vJAoajOAHArx>Fmm^7Z5|27(Z4Q*ro@u!m=U)WYW zgD?~^`KisnnFuFD%x15g@8;AqZhWmG!WTaG#+EEn_uz%d;n}{AFsuou!Gn6=br?qr zR6lNyFB{D|nW+jN?j>XNo+e3<`+50mJI_k4=vT(6j4kxEG?>DM{5u|96Zzc1SRxOS z#|8AH962&xqERW7_t}^QH;+b#ZK1Hqt;wN-R){GXB9_qZ5r~HoQ0J~bK9z$uEacG& z1o{or+zz>zHBW29_y zuDr`#x4G(O9SbT;OXu!M%w%-&59Y04aD#XIPf-j#xmbNe z6Rf%{`JV(Va`nj-M;YOAXF3Z4Po9TXs}78~(aa zBKH&%j7Am|iHV8YP{!e#Qnr^g@b-hCi;F`x2)mtvgZ#v^j^T7ZiNNCxy>-fLOdp4T z<*UKUzvCwjzST@BVM4+Whig4wO!o9BT|~CyVQ@e`j9lR=*> zBfpBV`KINrx}K=e9(n=bY>lD0{o!-Y;Byb;4F;o|!cs7naB`An@#n8F;LmX|*A~LZh|LBET+Y+zF zz@SrpTTJE}329bs9YaA-_rdKvR(xPl`4UfHkW*|uBqErlQS46G_FLrV+wKLQ=q=$3 z@vtfa4klLC7yAEblMg@a4m9pRuyn*d)*EvnGn)9#6x0-Vgux<)oNRqcm<78+$Ex&>6;E8RaW=w_AKQW zSmZ);2Q#!i1q-EI*EL$D@plb4Vohw9_>e(9`(|jNY-B@NjB~w~?~#%W^1{PorZ32* z#m<$atVFGBEZDgs@GuFHWVC^d=Iy46FU#3}8zan0lJ6R-9UEuRWk&E8Vw zpT%nB)dOGSdF}gMM-4@}XzT>tbUFW|utZ z`Ln3)-?Oow86}1tfY-l&#)0^?6&khz<`~GqRN}QhO35f>s}q?nr!SeJ@qkJp;X=YmFSkrGnO$rohf&WK9wGCr6!4bU*8d*iFWxcBqpRlSRrhcPP4gfh zJ022l0eL}&@K55Q*bGeODJH)^G-)yCE4e3M*W@`w`_Iz37{G7>=lmEJ8BcEAv@Ed6 zyJ9NPj9#;f#A1(l?rDP!ey>=ZuWJI1B|Fb8NHb7H0(1k4jhG0uwen3n zLUAf*LW&^?54|M9lk!K+adD=(riLlCuAi7U<>3 zB2ReS56eK>?BeMa@5dC#m(JKBE(-r}?2~`=g|ClFo}P(bz3U8bP%zrGVYF)?+w{Go zs4-w^hL|vDr!p0YI#Qm-YuPZS;5&DN)LOsU<0i zMMmO5otxz7_YE0g;0fAd{@99+^cd~7)1X_F9dYrv;AGV2HE-N=nWym33#TCeR@BXZ zWySy*a}v=~i-*H#R@m#;uV2tA^Lg`vO*gH}#`0_}b<=x36X6*tJ-91~oPmT{mgglpEjSUGNsk466(wqT1;RSWoEEg14K6>XZ~5rrecw z>Y8`&C8-o%O_B&@3kq`nQ28db+?Z_~MdABVvt;U2TJKoz8Ty0w-HW}c-|Cg8PEwk2n2)$^1`KU-vLN}b~N0p-3nEk@!L%$LIK zYF(8um=1hJJY6$biGFkKky(Ly9`g4xG=fD!Gm?9(tegvs&{yd8-z`gWyJJ$zY$ri$Z#sVoz03o?PdSDYdf%p3>;>Or z(|eD;*g}sJBK{EVQG*-jS})9KIxk+GmkAEC>PbKa+JB3+Hf-mVt}F!iKrw6{Ij3JV zE1(D;L??{wFZty&qB1%b8IPxU8NssC^VV+BvI=f43{R;2os;P*#KVh!YuC{#w9@V) zhkjJVgPu|ag2?J5pD^bj#_sROUAhCO;LO_(7KU2(6rv1@b5`%K^w;Q7ZQ}&%<(~-H=pbLN#gi(cJJ(p3a@af zp9NXn)#y&mnt#LeoNfzq;#N2~TG-xpmLdW62%2{RIij788F_maBy_Bt7*azc*Ya@A z7=(yL%x8rb$D5Q&7;$`&pMgqPC3~!TFW#$3e2#EU7SBTfMU43UuAj>vt{(&+ZoSuL zv)`Hkb@#}B&=*x_9h?i}00*BvYlZQej67Ny{B$YCOOLvKeC z`xk>lk9)~srqst_YZ_}bYk{SxcLNqO*i<}$3P^xa`yT6hHL2}uU|Q`HGNiRX4%jH%YUb-2r zntqxUULU;OH<&Ezx6b_c7ona#btij(DGfOL@*Yp-_4yMin~n_`f=~|#B;OK5sd&uq zzv^3uK3OFYW==Yk&Uyl4su=bf&BCS)v$b#H#2>@#fJCQfWbC8p71-R9s08zrKbuNb z3zIu+Q)6JA>f5gmT83=TW{Q0G?rY~I1RJRkLyDqS!1C^iPGokXMu7M3Tun@F(d>bi zWKBd@^`^U70y~8$B1g*^#2q&YejB)Ipp@SIAh@$ve*U`*VXp)IgZV2@O9tDw?yFt7 zw%ASo1LF{eiBDQwy{qg1?G%B}>m|c^NgOdTapnAOOPm+4HdXv}UUv=sAQ(3&`hb~W z%F*8e(7oe&YdSdemB7rR7Cesq|MdcN8XSLmq!O6Lv87}ft)e%4SPL(_<2K)}d?KXc z+Fke4&X^S8xJHI>wiB2l#*oYQjPHtow)dBw(jqIbf90u%G!9(2M-hs*yq~TIG?Nak zfVd(|&vy4N&SG{`NmV@ND|hHRb%X-+(JSKDum3#8t_Tg^lP=2{6eWUOWB{y@Ht&9` zZxgaK_y-CEb*u|TnE&FeQR=Y1LhD03vkVdtlDJ>h57{ZkVGc~?glknhq1etBaZ92< z^VK)#o^d0-{3XX>XdM}=!)Qj@oa;rEv;jDfNL!>6=%YX z5*$%`ekaIhu|RgQh-0lX(lmo0kVs-YPEL;@lJED1blkEUaGVphm8Zcw(4GEVA2D;! z=d3RL%W-DaauKFHHKd}VgiS@JV=lZlcx`_E@u*X_t!f%~wKcrZ+Os<;yZchJ>$1x? zN1nA-TnP>?ehhM;T(D!W8jCG<;l6uPQ%>$?0XzmTX&AHW7mw$_ zQvYQ+Rk+RH2gWu^X@^bngm&R;Rt5bxTRo5y@Q@v3+XWUKR~pNod^V@E)Z(=@!e-Oo zEc1*b;7Y*QZ9&8zeePiciWP(a>c9)KVreFRengJuT|T?|{7LtxvzI^2Vk}4^mbjnY zz)HvyJ)Fhb=(FD-53&-HY~@IOmF^@G-?kma=AC^7Zu8?Va`h)cD69n`^1j)98Ay73 znmbt^G|rrGnM;+!Nu^DlFXOdojYNsguX@vpg%2k@@-sN&?p|s+oXU!(YG*Og#P*RQ z{@hONynzQ2O)VY%bmb*;Lxy+`NDql}NF#bPLVi{QqQ@J)9;-^dcM^wJZx4f(tYz^5 zWw{7_<21wm%fJB@Y+*YO$%$J$+eP7xauiPu1-OOHlZwyey>vre$@KKUf5SSaZyONi z`e%b%7hjihCv)vzXonrUI1%m`${<=-ZrJjz2}F#PLq?%RY~s&D1s_M4d&0N?=dVbk zPr_hK-Rnm&|X1W(<-FesWCCp!t5AJr$|%AS2X z`Hl$#O+|FMhtK{>@f~(Tu3c&lzQD@4NO{#BaDMhczY0yJf>LKb1!g?~^ZlZI7kp0h z#e_ZmD+}htqY4~>@1}8I>1dW@f5aQUK+2Cg)s-W9dtq`4)#BvAw^ks6k!KVa7Uv~= zh+9lMF3g6Y900>4yCD4d`YW^ORU$9k>0JKnJo@g>s;_JRr1WotS>DSf4zlfha4mQ$O)HcvwO~*xV}XaAed?m*foQjxWK%_lR*Qy26@tPyPjRChWU4cgQ?7E z;T@XAX&C4E-`|;k_#ZqL#s1J9`v$w>`%?~g>O6j@r4K;vL4A@f+pgm7gly9mmB8Wb za7|3hGLSlVP)h~<$0y-M)rmgBlV+6HBajUU)-Y*%jD8n_$cY}wBJ$6en&Z{lEem2+r%v$o?%7QQJajsym&oyofa{0%wZ+OBSNHPWlxJjg(_rClS@)f1@ zLbvdV;ZqCv%rg?in+UiR*Ns{`Sta+$Z!#@^4((|eHFUE`+Gt>mhFH3Hc_f% zr1xwb%KL(H%%XlSbf94Mgk^M+`7{QMk5Gct;sg=URN6Z8s=s4WMq58hQ`YC-fLu9;dGlwET>v?AK38#Ls`pZl>cf_6)cE z-lD&Rr4%wr-%P4&sselSAB85y$uaBp_1j`-gv=Fdhdr-QyeP%5G9nQnw$iQO1}mgK zhLrmAQ=k^Q{Z5)q!>(GbOjU)y71(xfJOle7yap0O1rNi&Q@`;&iuCs$Ka)8cwD#oD zrKyflFVNJ;JGV>kUZE@b@+o8z}{+U+UbEQ&dvTl}HrPiSCqh=&M+#-nMk(0ugm zfGN)<{~DMnFhw6B%hxF*%1+Ah@zYr-NTv1sqUGAU9`@w&9w?a3GDX1`Io|pQBwOWD z9&AmP&TF{dzg09i%vXp=34e8GG^_3?9r@!TNkIHb#Li4-`=tZh&(G?59@qNcMppuf z#}er}If0@tH>ZQI4P{R7;-^S1I;)aR`}VN~grL#)$qbS^{0~vn^J5ls;$l0HAE0mz zEFN8tOZz&f1kYH*Vq^)vog=-JS5GG3TP^Yj8{u_W!s~16rB-m_V)(?KWytw2wqJ zm$mEJv4HGv?Yof!$6-UxX&F(4?WDI{mdZAJ1QRuYb5+Xy@f`_q@gYVW(!y286^%9o zhd$g8dkovNO4%tQ#+gdy2hPw82@~*>s94tks-OYkjOoApjqJ4G-_`;{d_bd1XKN^v zM3=^KvLH^{hzl&vBp&Zhk3%l64& zDnsmS>DiOV_~p)Lp8Hm_JN zzu~Zn`|__co`;svG1?r_tYSLmudLpAf^4D-rF>iM+rUS{r<4=_wV}O~S=r-*-`}jd z*58nUln7q(EqjoGj)(|c8yElxV=+N-hM+L;1#^*)wX~a(#<{e&?x~~KdAU0XmW?CC zKy`zcRrnx!G7+X!QQ$|D9e$zrPq=Rf3=R)A)p3`eMvwR25nRY@i}oz}?+Y~zctcdy z#uQud0*GigW{D>q>480ohh_R(5jH$hb=SVKCQ*_93p^_&6Su$jwmx|oY!bLqMBB4R zlp_MpMcLB8wDS}Wbk~v)zY+63uMv~@9!kpY3&rJN906u4JUm@DozM3hF>-QQ&Nt+u zgEfHIgl+inw&-gvfNxz`+i&5w#ne)3j8)7IvMVaZ;ZME<(3s$@_3F)K=7)=~1dH*Q z;A2(rfM|xPG_xgnu{(Cj6VOV4txo(!<7&L6f?ls)5U>#oS77mR>UdTx{C$q!+yD?n zG3M2RX3-}2LJd^yI1DDg!#5|vAGA#7qw8lvEIddw%Kn0!_mRnW)@Xre@O|WQKR$IA z#&h5HL>VG@ey@dot@7OxH86GOf)U16?9$wWP>{tluE;z35pY%i(?C6m0$o)R+Gl^h z3v{7g*46NaCp>T^k*3Y~xjgSqJ#_G!`o{bS)qoTMz9OKzM>Hj#g?-LVqWi^cQx`pv zzqNY&-oB?#@bn&|7|2{&?r>|Hy2)4$Wgh_k3{jj@9!!{2eAAzhd`3GfOe?Z@mb3`h zn6oF15ElV$+0^FS(ey|g$W@bxm%pbI$YqfxpWa$}Ednm5`pWs#yq(shlL3}s3mz=7 zCLJTWZUwUeHWU082P_n?jEuUW2Z%OMVW%JS%f|XqOAVOYy+! zhBMU^d)UT?RLRy~;)<#l#ke1ubEI~(-S!DEd-@!7Myc(z=nWCe#heimn z2aN+u`%@wmKDrP!D!VG=2KfUve%r3=&n=I;a@?EzV z3cEL5Ui_IcG9sC`f_`$j{!4}Y`)$R+^HBLDs7hJI=z!Cy8SV;lOo-nOPMOfA2>A1_ z#}IR^RhsH`@+(QJ2Y%R<1|)vRAa^D3^%I`m(l!Q25iGXo=UJlG6Up!7XDkCf%xve! z`UFR#5!O)_s1u66OFKB*pw}{>A1FIe;uFUjz{8LzQjzHyF7)E17b67G8?;ul4dn&! zU3nAvwii~|-TZ9EuSPK{v64HZ^^pyfw)79&7k)D)=BS=i^!>PaNj3eo^<+OZ@uVnF z*rm{0TyGd-b@WoU&no6)gT+%(t#g!TV_9G!dU;Q&|1475;*8=Dcg&=Iy96xh4(@1W0>YsJyL{GnhcAcwkchG(DN&MuC}l=Z4;O-=E_ zjitwiRmsVU4GFgo@-+PCKg{tR_$0C=XmtWN+>qnhn_z>K!&a|K5^<;sAr=(C`*za$ z^iwuG@%O03H2kHT-uVNl-bQQax!%mO4~f;;nSUHIna3^L7-T*T#>8A7g4E2)9{Wz}^_49pn+5^Kdh90Zj}Q>?xHeg_xY+nKgwn>yAOc@rkA z<7EX_vM5&2w(FFD!MZ6e$?;vXB&T~)?{XETa_cAk{uL=8^!_M@fYK2QLQDBiu&N(* zx1Co8Z7D{4%VWSqAr=t!mc0oR^4U(KcD>9Q3?A#h)v+n(P={YQN>f? z$oxCqzi6asL2M`?G$YgS0p!8Efpo&p+MT8QL|=Wnsy5)a0w_9YO$JL=#H862&%U`L z1h#w0%Fg2S8E*x!Pb!>{V=>v*qY(<}73xI++3>>f}@SIS9hvly4 zM%*1Y%jTdvDRp6yJ*z#-d!DWnt+EGs*qb{Z>r1r=9f*qE7z3-g`CrDSgbo5lhsjur zseQ*BusES2YZ=6&DE+4WS&>fHx_>NDewn*nxi{CRVz1% zwSl}cNmSJpfwV6HctHAUXN^Lkl+X;Y(WO1UI6tco>DM!_w(9>hXwew*TksXd-k7c@ z^(x1y_gE0M=Img!p{L9ONP!KtL=W;HjAaLdZc*SD+uaU$I&OsxS@ICJ>_{xbKXJS# z7#&%$($14M$Z&;xk3TY8hAorV(Gkc{tlduNYK9*eK1)!^P@ME50E6$bmIDei3P;y$ zxafS`=~m=vbDmjL>tP)wpQ=P`c{>UzOtf}R#y^j(g*x^{Q5h5}#2vV<7@STb&DBad zDrK1Y6?&TtzK--;)|Pb1ijGv|YF9hVxekm+77$*(B|-FVm-nzLeyf)1Lc$2qBS1Tc7AzWlE zkZq^CWGyQ@8BKKBwvW@S@jAQtdB`>v@imSXFRfFUjR^HZAb!%4AlYxiAxEj&qr8EQ z%+?>cwgscvJBfRO&D(+6DQIW8f9IL`s{@H;7^kg!1%4u9qCigL{>NJc18n%Ey~2-M zLSn)>k_;flOrm0s8+-6gxuysPD!vq5>|WplGR=pQ+BA9Q>US}1L)xcfd-iiTld8Lp_z+- zKWJKnP}e%OTLa^+9GvxXnfoq1idTS)loT&!r{|d2oC~Pd1s-M8jxtbvuAu%2Mc^Ba z-D$3l@fy%e!UkUszBcdU_Rn@y%1bgQa>Lh-VhK^XBb?&F=fbv#!*`Hl;zV@~1c!5P zUbCCXi@fG~&BfCq)BVFXaDV$O7LH;)QAl44N@#43iAZB#sC2VpG^;Rr3Gd}W$h_K@ zB7!6uYRFb$J%2Rmx{#aQN*`LN^}Y_52XcB@zDtcJqC2*BsySGbp%405^yYL0p^8$@ zZSZh`pu43om`@z^^QOwd{(hrDz&!JiWns2`>S_ZpwyS6!GqISZ`DzrC)7Tsp>BLyd z4ROtr_Mu7VGkz5w4!tBybjyGgdyO(IJvO$_J!xz1re^lLbt$~NJg9i!3kq2pahPZn zuA#Yie7JUh&BfCmubrwz&p>{_XKflkPZJ_e(E^VF{`pPbZ%LA!P0U(3?C?%oCIboa z@$iry+y$_(DTFsiZqDLS;U9A1Cg)$qXaKIzl< zu(i*0S*u*hcgXmvv9^2J=<4Trn@YTe`serP{WqHfR3klV4SY6S>~>!2(T)6xu^8~$ z6S)D4kAf8WLQO3(_pPe5c6LT?ohD9<B+PGjND1l zWcudtO#0$U5y;n&ac7DPlyh&kkZFd~(L8JZ>UCueza_!JnP)Bw z*T)y^AsZGvsZ(15nccC1ShM(B@~=8tLqq$2;pf$EaN0##iZ@manh~%>k6xS^ndc=$ zjF4T==U=!!MP^UPXcUKxIe_Ty0i-P+jS9D>gl-l6#tGw3NkDxRZ7J^NY^+z@_pK$w zFX~yx*y=cG=zM3765YmGKg7MHDh-;mw0`!01F97^n0)K|ZrLM*h4+;zenO5rekq4a!r|rYWj>`F zmk4jAM=C0O?}@6#$tLdo@-tHKq`pu(V!u$tzn1;kLa(iF9OvD(iqvGjbFL=_9(?j^t7#?b!$>E{8Xcc>Z zNbM^^g{SE(z+KeC4<{^l-8Wza=Q4v-1^||^4QTT@Rr0`}Acgre^Ci;}4-(&d$G|FG zL`Xco)xTBvWo?a}Qn@Ai4O?J__U+)r)m5da(^`Eys`<*ZM%kzx+}2lo7uAC$w2tjd z@&t@z=$m&0@(W#oQjN}*Gwgl@a1fTd%{>F|qk^zWs9r*5M>uT@G#I@f)+xYed-eDU zG+`S*VF0g;uHzZNqaV{{!nW%PzTRyKWA+v}GF=Nrd?~%iB>=AT z4kX6%Q|1PgN$S}wk!XZ`#3aF_)+F1dWK(5V*FubL+EM3jEuU`MCKldkthrkK`}$6J zriso6pX4!!s&2*u_r<0-{P4@)GioSwJ3yM{YU_*n+LkL=792owM93=9jwdJrLe6Nv zueY%t`93A!kpW0?ND`tydA21PpF_iDFf#bDv>;*5_-S9xh_{QRRH=68^Zn{&IhD!8 z&>RT|A|F=D-BQ-@uOQ5IRgtE{$J%*L0}H+hbM9nL2m5J1r>Abp4UD4WS@J2-L)p@k z^D<-SrLj781$B&CB3XJes~n-5>D}_L&pPp9`WJeDF{MNk!HHA6SQ)Ho#bwGSFP*Nu zbG*d$anayYq;9GZPgo%tI~Tm3p5`V=^moVmg7!0;HbLmC?Sq5z;6-VqL7xq4=#WCP zlB3No?S**Zo=DOgDAU%DhoAtmqq~jxfxR=#UN&41nnSeS)!f~A$U6Fj*f`ye1FX3e zo=NyN0X9_+a5z3Ee0EI6agrO887UHKy^WlnR3#qwm%l*>@uPdC2^eYBRb@MDApqnx zmhvXPL!&&r)3NR|_{a*>u{o*1UUfZMX%h7qQUc}RNu{c!vP)IAeL3`QL6*H(9nZPt z#2hGQ*EN@AtfMWibCUA!QV;sroVeh}_R=3FusBWoKDJBL);a0On%^+G)0h8Y%vpYB z%bAlsdME|~F9_fOoOd+M4dWjiCkYE5>Q1?YY5V~;WbX49rY_v~yB-r($({OQ=-u5V%kpq5mi#SyR$_O3Kmnw=0|AjyQ>kqw z0ttR{+7J)C_L_HiX36xP_as}cA34vuf+zhW$u`u8~US}fMputW{GD8DZMZk=- zJHbac)-)Q|uJS!M%at+r^RLy|&7Pt#;i)YP2~9HA5A|V|CoaQ&gnn*H#Sc;k86x;; zD(Q=Zfj<(eeZO!*8P5-h@Y%+_MQWHoLAV=(uw_f4P|pQH0%G%{d}V{t-Mq{D&R6;| zP4`wZbc+%qGR)n=T6%05s33wG#j$Hkjz$E*dJl*|hC+w{0~M9Ql1!i=u~1e@8#h-I zvZE|&kMA%y#Bpv{=!%gRDJKvzF~C}&j;cn29fu#j1SY)>U5O^vaILs~6bBOm1o!_4 z#g=d$df@QGXThXLjVuR02pHutLnN{_F_0eF}{=WXG$SmQb zrbKg|Xu@-eW`4osvWwVXrv?1o+9G$8%eH2puJec5U@FIE=Dt7Hy)S%EBtRh(5-r#QmZArRL++q6N@ zNc6<2tDgw${rhMUYySoZG{tiw)sqlGpuaxy(lVE~<%x3<*O?-Xu1J=vr3Q@B{=AAKrglRUN{h z;+{8slFqF<@-@)nNfx(hf_2_xOD`C@?bk#DnCH4@E+-Hn^M9b~hf z@09kHyG?yLjY_s;?UuR;2Y23fT&m=H_OO@}jWB+oOj`&P0B!3N4%kVUaB(&^R&|%L zgc!O7WM69OEq0^`TN4;H#2(gzyBK2ZZ#k;jc}5XZP3=766UOMW7wJF8>m*&9ec9P0 zk6b?m>m1Bs9%|HahMFJvQY*~G3PGIa*{e{rqfelxl=xk80mcB%iJ@x^HR*)AJ{QW} zRZ6qQ_WUGzv|${7{q^H`Xjr(uTW|HwEr}sb1Q(~~c+m#Bm-ycWE{S6T?ezZ{~ z4zh=PTdlS4MBIvnp}L-7@=AeK!RE_#4>lh`%zHiw8>)i9_ilaJVLo^AGZ7!OMji!i zPUJdJPa4{+Up)`ox-D6+`F{Gaj=cx%E(P7jHy$#)8M$I7g82R8tfRIqVJFVL_~z-q zDTg7!qtMX%joBoB?tWP)dHdl10^0{9_!7LSb&&b-O$5mj1IInc+>Jp0fKJD7JBQx_ zeAO&C;ke^?-m}hXL4M_}oy#?Uq6317v^?* zcoBMPu*0%~x4-#~-1oqPY}mN5=w6#0G{)5nXFo5)4Y+IbTNz!0v+lg0rwEI(ZThS{ zFZAT2Lg;x2O9Ot4_w$Ya&$Wi1Aay< zATi8*U(N5D@NuoiiHnct+!s9GuH7r1=XC*07r|=#Hv*8s1qc`i80oqIHv?Y>{vj(k z;;=(`%Nt+MrQiCtUBh}WFP9rrev-%EjIlx8-QApi>M5Lf!eS;(oXFaB>oiFnD?k{Q zK=WCDEAsg(hG~HVIv=~TGSEK(rvoQt1ur@8Tvn`H$?vYa!9LR<7~mm4IoXskJ%~av zZ{A#a>1w8lJXL0nAM|kfM*J6?+(d17j4mF4THYL6@ z6j`|B&z=|fAJF00)x|-V0B;60xzOgM$&)zij5Bz_^Pa=Zo}RWI8rNzhN!r0jM8$IAQB>^$H1qp? zA`ti=(BT*j0RZ?ca4gy-0ASAS*?jt=AK^ov_#``bl-H$KK+lYQIPdJUdG1-yV9Jy! z&F;SnxEeh}F<@8#N}wWzP{J01)HU$>{8i+4f`GvS21qboD zPkfw@Ui=wL1Qr}Lp9{`Ek29Zs8ns%}SGXJ91^FuUVx+kM)M_;nnV?iUS*S3DKp;d> zUY`83q7Q)HDe?gU9gfiw0Dzsqi-4Oj77;o8&_npwPkoY)e)=;UH2*+e@zM)8<)jl^ z1qc5Gd;$1B3Pap7BeLt0B*|<4jPO!KdJ1qQthozY1p>hqfv_@AK&N9g1puHQcp>ly z;Lxn_(1RCp#ijqrl*yBuU0Vl!fL@2-UeEE89}!0}gN?yd0LB8** zV5`=PfPhZGXbS+qTHrarjTj=(g#7)$e*^yktZs7Ok^n?eL?cOvM3kHVQba_esQoKD z1%Wphm=j-!Fds-j$76R00KnsTM8LsnH0l2vEds4Dh;|3^syT|Hv@d{J<10;kRZ;Uh zwSQ$_fUqt=z&OC}5&+O5a29$}(X);6yMTWOeuy^v+l54nKyFGzaip69h0zL-uKeS= z0PULp0+CBhhyet2I(DZ30IUIC0342v;;#iB*oFJ;#1Mcu)=hy~jW2}}^{;XP$T|dJ z?30TE`F@xZFrf3Xy9FS_V`lf&v6| zHl8X07%fwp+Y&LgZ`l9pc zp4P>$uepv@t5+AKm$Ic5fSWhBX+9VL0iBMqCIB}B@5^?kb#-yU3(x0*7oN}k4?WCp zuf2|2Zo8cwJ9kzG0BPa>kH7^uaNij``_v;D92_8yBjP9`iu5*)BBD4ViiC4a4cQ=RBqT|LM$({>=zO+c@HjboU^B2VsFP-vj8M; z0eaGqHvtpe6DCZU!0D%+!s(};f|Qb_%U5vMJ@<0wz4!9KLl4tvG@7~qPy_?Vm^cOm z3>#z30x+>3@OS8C$`-bB!OnpJmM&Y)W6PHD*wSSzS+*r7Ckud!Zs26}Vy4;l2u8L(Q6jmWRy(;4na>`nr-I* z^V026cv>0)0y+ibNdSBp1RhG04|f44Jaw-V5b)F@n7;u5;~4)RMPU)-0DYRu00000 LNkvXXu0mjfCCwzV literal 20730 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

kg8u4k?Czcul8*14ZyPEhhsmG~* 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 hV&MpUPQm4M!fmN8K}2>DkZuS9UBFnIzA - - - diff --git a/Resources/Textures/Logo/source/EE_logo.svg b/Resources/Textures/Logo/source/EE_logo.svg new file mode 100644 index 00000000000..236919fe2f5 --- /dev/null +++ b/Resources/Textures/Logo/source/EE_logo.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 311b86e012ac7d40363b5027ab51b09c9d2285e2 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 22 Dec 2024 05:26:41 -0500 Subject: [PATCH 171/182] Loadout Modular Functions (And Loadout Pets) (#1366) # Description This PR implements a reflection based system for applying functions directly to entities spawned by loadouts. In order to provide an "Example" use of this system, I have created a "LoadoutMakeFollower" function, which can be applied to a loadout entity that happens to be an NPC with the Follower blackboard, making it follow the player who purchased that loadout. Basically. Pet mouse. The pet mouse will follow its owner. Yes I actually have tested this ingame, and it works great. The longest part about coding this was me spending almost 30 minutes straight wondering why the mouse wasn't following my character, until I remembered that I had to make a special "Pet" mouse variant that had the right HTN root task. This could be extended to other things. I happen to know that Nuclear14 wanted something like this for a Pet Dog.

Media

![image](https://github.com/user-attachments/assets/a18b026b-07a3-4ad7-8cce-4ea4dc4c3036)

# Changelog :cl: - add: Loadouts can now apply modular functions to items upon spawning in. - add: A new LoadoutMakeFollower function, which lets you buy NPC followers in loadouts. - add: added Pet Mice, Cockroach, Mothroach, and Hamster to Loadouts. All of which use the new LoadoutMakeFollower function. Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Systems/LoadoutSystem.Functions.cs | 30 ++++++++++ .../Clothing/Systems/LoadoutSystem.cs | 5 +- .../Loadouts/Prototypes/LoadoutPrototype.cs | 16 +++++ .../Locale/en-US/loadouts/generic/items.ftl | 5 ++ .../Locale/en-US/loadouts/itemgroups.ftl | 1 + .../Generic/miscItemGroups.yml | 13 ++++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 60 +++++++++++++++++++ .../Prototypes/Loadouts/Generic/items.yml | 53 ++++++++++++++++ 8 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 Content.Server/Clothing/Systems/LoadoutSystem.Functions.cs diff --git a/Content.Server/Clothing/Systems/LoadoutSystem.Functions.cs b/Content.Server/Clothing/Systems/LoadoutSystem.Functions.cs new file mode 100644 index 00000000000..99ca8b15c28 --- /dev/null +++ b/Content.Server/Clothing/Systems/LoadoutSystem.Functions.cs @@ -0,0 +1,30 @@ +using JetBrains.Annotations; +using Robust.Shared.Serialization.Manager; +using Content.Shared.Clothing.Loadouts.Prototypes; +using Content.Server.NPC.Components; +using Content.Server.NPC.Systems; +using Content.Server.NPC.HTN; +using Content.Server.NPC; +using Robust.Shared.Map; +using System.Numerics; + +namespace Content.Server.Clothing.Systems; + +[UsedImplicitly] +public sealed partial class LoadoutMakeFollower : LoadoutFunction +{ + public override void OnPlayerSpawn(EntityUid character, + EntityUid loadoutEntity, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager) + { + var npc = entityManager.System(); + var htn = entityManager.System(); + if (!entityManager.TryGetComponent(loadoutEntity, out var hTNComponent)) + return; + + npc.SetBlackboard(loadoutEntity, NPCBlackboard.FollowTarget, new EntityCoordinates(character, Vector2.Zero), hTNComponent); + htn.Replan(hTNComponent); + } +} diff --git a/Content.Server/Clothing/Systems/LoadoutSystem.cs b/Content.Server/Clothing/Systems/LoadoutSystem.cs index 1527db0be85..4c357c58642 100644 --- a/Content.Server/Clothing/Systems/LoadoutSystem.cs +++ b/Content.Server/Clothing/Systems/LoadoutSystem.cs @@ -13,7 +13,6 @@ using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; using Content.Shared.Traits.Assorted.Components; -using Content.Shared.Whitelist; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -33,6 +32,7 @@ public sealed class LoadoutSystem : EntitySystem [Dependency] private readonly IPrototypeManager _protoMan = default!; [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; public override void Initialize() @@ -103,6 +103,9 @@ public void ApplyCharacterLoadout( comp.Owner = loadout.Item1; EntityManager.AddComponent(loadout.Item1, comp); } + + foreach (var function in loadoutProto.Functions) + function.OnPlayerSpawn(uid, loadout.Item1, _componentFactory, EntityManager, _serialization); } diff --git a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs index 38a356b1e0d..ecb3c3fd6c5 100644 --- a/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs +++ b/Content.Shared/Clothing/Loadouts/Prototypes/LoadoutPrototype.cs @@ -1,5 +1,6 @@ using Content.Shared.Customization.Systems; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager; namespace Content.Shared.Clothing.Loadouts.Prototypes; @@ -45,4 +46,19 @@ public sealed partial class LoadoutPrototype : IPrototype [DataField] public string GuideEntry { get; } = ""; + + [DataField(serverOnly: true)] + public LoadoutFunction[] Functions { get; private set; } = Array.Empty(); +} + +/// This serves as a hook for loadout functions to modify one or more entities upon spawning in. +[ImplicitDataDefinitionForInheritors] +public abstract partial class LoadoutFunction +{ + public abstract void OnPlayerSpawn( + EntityUid character, + EntityUid loadoutEntity, + IComponentFactory factory, + IEntityManager entityManager, + ISerializationManager serializationManager); } diff --git a/Resources/Locale/en-US/loadouts/generic/items.ftl b/Resources/Locale/en-US/loadouts/generic/items.ftl index ac52b8be226..37ca4f91fe3 100644 --- a/Resources/Locale/en-US/loadouts/generic/items.ftl +++ b/Resources/Locale/en-US/loadouts/generic/items.ftl @@ -42,3 +42,8 @@ loadout-name-LoadoutItemLighterFlippo = flippo lighter (colorable) loadout-name-LoadoutItemDrinkShinyFlask = shiny flask (colorable) loadout-name-LoadoutItemDrinkLithiumFlask = lithium flask (colorable) loadout-name-LoadoutItemDrinkVacuumFlask = vacuum flask (colorable) + +loadout-name-LoadoutItemPetMouse = pet mouse +loadout-name-LoadoutItemPetHamster = pet hamster +loadout-name-LoadoutItemPetMothroach = pet mothroach +loadout-name-LoadoutItemPetCockroach = pet cockroach diff --git a/Resources/Locale/en-US/loadouts/itemgroups.ftl b/Resources/Locale/en-US/loadouts/itemgroups.ftl index b6221e85850..8af87679c45 100644 --- a/Resources/Locale/en-US/loadouts/itemgroups.ftl +++ b/Resources/Locale/en-US/loadouts/itemgroups.ftl @@ -17,6 +17,7 @@ character-item-group-LoadoutInstrumentsAny = Musical Instruments (Non-Musician) character-item-group-LoadoutSmokes = Smokeables character-item-group-LoadoutBoxKits = Survival Kits character-item-group-LoadoutWritables = Writing Tools +character-item-group-LoadoutPets = Pets # Job Specific Template character-item-group-LoadoutJOBBackpacks = JOB Backpacks diff --git a/Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml b/Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml index 3cad4423f52..cc1e82ceb69 100644 --- a/Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml +++ b/Resources/Prototypes/CharacterItemGroups/Generic/miscItemGroups.yml @@ -121,3 +121,16 @@ id: LoadoutBookRandom - type: loadout id: LoadoutPen + +- type: characterItemGroup + id: LoadoutPets + maxItems: 1 + items: + - type: loadout + id: LoadoutItemPetMouse + - type: loadout + id: LoadoutItemPetHamster + - type: loadout + id: LoadoutItemPetMothroach + - type: loadout + id: LoadoutItemPetCockroach diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 6e369389a90..1ee20cdcb61 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -404,6 +404,21 @@ speaks: [Hissing] understands: [Hissing] +- type: entity + parent: MobCockroach + id: MobCockroachPet + components: + - type: HTN + rootTask: + task: FollowCompound + blackboard: + IdleRange: !type:Single + 1.5 + FollowCloseRange: !type:Single + 1.0 + FollowRange: !type:Single + 2.0 + - type: entity name: glockroach parent: MobCockroach @@ -575,6 +590,21 @@ enum.SurgeryUIKey.Key: type: SurgeryBui +- type: entity + parent: MobMothroach + id: MobMothroachPet + components: + - type: HTN + rootTask: + task: FollowCompound + blackboard: + IdleRange: !type:Single + 1.5 + FollowCloseRange: !type:Single + 1.0 + FollowRange: !type:Single + 2.0 + # Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures # The white duck is more akin to a pekin or call duck. @@ -1769,6 +1799,21 @@ enum.SurgeryUIKey.Key: type: SurgeryBui +- type: entity + parent: MobMouse + id: MobMousePet + components: + - type: HTN + rootTask: + task: FollowCompound + blackboard: + IdleRange: !type:Single + 1.5 + FollowCloseRange: !type:Single + 1.0 + FollowRange: !type:Single + 2.0 + - type: entity parent: MobMouse suffix: Dead @@ -3418,6 +3463,21 @@ sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning +- type: entity + parent: MobHamster + id: MobHamsterPet + components: + - type: HTN + rootTask: + task: FollowCompound + blackboard: + IdleRange: !type:Single + 1.5 + FollowCloseRange: !type:Single + 1.0 + FollowRange: !type:Single + 2.0 + - type: entity name: pig parent: SimpleMobBase diff --git a/Resources/Prototypes/Loadouts/Generic/items.yml b/Resources/Prototypes/Loadouts/Generic/items.yml index dafe7c9ffa5..2c42955c08f 100644 --- a/Resources/Prototypes/Loadouts/Generic/items.yml +++ b/Resources/Prototypes/Loadouts/Generic/items.yml @@ -766,3 +766,56 @@ customColorTint: true items: - DrinkVacuumFlask + +# Pets +- type: loadout + id: LoadoutItemPetMouse + category: Items + cost: 2 + canBeHeirloom: true + items: + - MobMousePet + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPets + functions: + - !type:LoadoutMakeFollower + +- type: loadout + id: LoadoutItemPetHamster + category: Items + cost: 2 + canBeHeirloom: true + items: + - MobHamsterPet + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPets + functions: + - !type:LoadoutMakeFollower + +- type: loadout + id: LoadoutItemPetMothroach + category: Items + cost: 2 + canBeHeirloom: true + items: + - MobMothroachPet + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPets + functions: + - !type:LoadoutMakeFollower + +- type: loadout + id: LoadoutItemPetCockroach + category: Items + cost: 2 + canBeHeirloom: true + items: + - MobCockroachPet + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutPets + functions: + - !type:LoadoutMakeFollower From 18a751d5c3d53cd4ff36728dd585ada37e9175b9 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 10:27:04 +0000 Subject: [PATCH 172/182] Automatic Changelog Update (#1366) --- Resources/Changelog/Changelog.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2f706fe2c38..186a28f65b1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8742,3 +8742,18 @@ Entries: id: 6586 time: '2024-12-21T19:25:13.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1365 +- author: VMSolidus + changes: + - type: Add + message: Loadouts can now apply modular functions to items upon spawning in. + - type: Add + message: >- + A new LoadoutMakeFollower function, which lets you buy NPC followers in + loadouts. + - type: Add + message: >- + added Pet Mice, Cockroach, Mothroach, and Hamster to Loadouts. All of + which use the new LoadoutMakeFollower function. + id: 6587 + time: '2024-12-22T10:26:41.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1366 From 6fb12233d48de476c2b06415031fa2e9c9a1d327 Mon Sep 17 00:00:00 2001 From: juniwoofs Date: Sun, 22 Dec 2024 11:24:58 -0800 Subject: [PATCH 173/182] Plushies! (#1369) # Description Added two new plushies to the game! A harpy plushie and a plushie for the beloved station pet Morty! ![image](https://github.com/user-attachments/assets/3e202da2-3571-4c67-82c9-54a6aaf3c91f) ![mortplush](https://github.com/user-attachments/assets/9f131eb9-ed89-4818-b54c-e9da949e8ce2) ![harpyplushie](https://github.com/user-attachments/assets/47aa5b91-0747-4a2c-8c5c-18c5429ab570) --- # Changelog :cl: - add: two new cuddly friends to the station! (harpy and morty plush) --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: juniwoofs Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Entities/Markers/Spawners/Random/toy.yml | 2 + .../Prototypes/Entities/Objects/Fun/toys.yml | 60 ++++++++++++++++++ .../Objects/Fun/toys.rsi/harpyplushie.png | Bin 0 -> 1083 bytes .../Textures/Objects/Fun/toys.rsi/meta.json | 6 ++ .../Objects/Fun/toys.rsi/mortplush.png | Bin 0 -> 832 bytes 5 files changed, 68 insertions(+) create mode 100644 Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png create mode 100644 Resources/Textures/Objects/Fun/toys.rsi/mortplush.png diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml index 96b5f7aa8c5..62c9e48ca65 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml @@ -69,6 +69,8 @@ - PlushieTrystan - PlushieSlips - PlushieJester + - PlushieHarpy + - PlushieMort chance: 0.5 offset: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index a547f33b59a..d5ee3e0b4d5 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1966,3 +1966,63 @@ - type: Sprite sprite: Objects/Fun/toys.rsi state: shadowkin + +- type: entity + parent: BasePlushie + id: PlushieMort + name: morty plushie + description: A plushie of the lovely Morty. It's a resilient, yet sensitive type of plush. + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: mortplush + +- type: entity + parent: BasePlushie + id: PlushieHarpy + name: harpy plushie + description: A soft plushie of a harpy! A small tag on it guarantees that all feathers are ethically sourced. + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: harpyplushie + - type: StaminaDamageOnHit + damage: 0.8 + - type: EmitSoundOnActivate + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: EmitSoundOnUse + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + - type: EmitSoundOnCollide + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: EmitSoundOnLand + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: UseDelay + delay: 0.8 + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.5 + damage: + types: + Blunt: 0 + soundHit: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + soundSwing: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + soundNoDamage: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 \ No newline at end of file diff --git a/Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png b/Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png new file mode 100644 index 0000000000000000000000000000000000000000..d93178d3f7b18e3363bb1de16b5768aa81feaa63 GIT binary patch literal 1083 zcmV-B1jPG^P)L64HGlD#J2!e#DNIO(y9x8~k$e%tsD^TK2A>dzs3<_gc#v2jxYlD7P_?80n#QYr% z@MUl4TRTE51w1K(vNc@;CP7jZ32WB^Jw2MQ&yQ>+!j=Gx3&dq&g#=fsdmabVGFsK6|=DNW;nbUYZp-{VaFEqss*$$Fw#fB~8N}=mXw}eZA-CX@h|N!8WWOZ&H2eFRvTUMo-eT0yhq5Lz61{D8YD7 z^5JP zg5CiKW;jUr)XbdZyYJmpJJ})^EMQ_n%tkw8XG~L9>fonDGs%K9l0x-!Divr)mkXdQ9MWgUuFH7eHYq zyE3(*dq1K{tZRYeWKpJ)oFMA#??11c0lf`(wX3)5k~LyhkhVn3hP3hrK`|lGER!rX z0Z8tf5v9#2Q)AO`A5uVgIY%ahYGHjSgnOViAc8-L$@w_bWUNBS3{V++$!r-Y$>T*P zT%+-YkVJX`e8zWN^z)>Ysj;$p=f!dC)twFcSi=xX^7^q{)OQ*cGeZ*U7oX93dY%Wc z8A}l_{AZTL4X>Q(VU(MjtK{Vs(^s8bx7!7eXD|?ZwXr*-bwx#m3dtGM+X zEP-$V5zm6k$_s&Q)6o$mZ)~hJjnVsGyjW#<#)Jzoz1M@<37D(DB_>;8>7;X*tN&cE z|C;Y_8ndKVRQ5Cq0000EWmrjOO-%qQ00008000000002eQs(5XvUh_VD7 zji5Re6kV*m1Y#Ye0>dDv4hzvCyyQ_R2*e<$SPCy&X1CC!A9?t--{d#Gnf?89yY9d; zzc+8@ec$`u+ZmdAE~ zfFg6uusP10I<40+ID?Q&Dvd%_tdTju{xr6zMt?NrK>9CkfaDmfxEpVU>U~7lyBDEGXdnzMe6-F3Z6Z$a2WCB$dG; zAU8K0AJXQQww-#WofMFMkiajgFDwGTSA7$IX#YN4cMQz1Ipn@1LLgBX?2o+MtR8s% zVk+3)++<>+2RP7xlECeU&s6h{4ZkEJ8&a02`21y6(_0E09T@gxb_9(BU;VW~4BxUT zB{+OkLMjq^dALfrnbVdE03hGhZSIAz(qIqHNF^d~FP8+Axjueh$NgUZq32vr&fqLB z|5UB5Z3=UyBU^<}a5_jLk^tU?=|_)EpmR5`S>SYlgaikPsNTStfxQ`3xHD;RV+qJK zGTB`wb9bFKm4Tf<-20F4V%aD&IoQvwUial&`aAM53aKH;R{fo3-@MaF$d?p0UQUq4 zfI=6K^o4|sAyAweGY5DBa*Z}0ulZL`4Key88Z&?YZAmXzN?_cvPpAx>KXKOkboYj( zKt)D#UhdT;sO-mFIfF@_GxEcc`VB8$Ij@5p+TE_%BO8265;AL&TF0000< KMNUMnLSTYDOKL;_ literal 0 HcmV?d00001 From 5293b92007f7ca81375d9806cccf9be38846c8d3 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:25:31 +0000 Subject: [PATCH 174/182] Automatic Changelog Update (#1369) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 186a28f65b1..3a624ecb1cc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8757,3 +8757,10 @@ Entries: id: 6587 time: '2024-12-22T10:26:41.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1366 +- author: juniwoofs + changes: + - type: Add + message: two new cuddly friends to the station! (harpy and morty plush) + id: 6588 + time: '2024-12-22T19:24:58.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1369 From 2fc1f25bc0daa29e2017490adbdf41f9db4f4927 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 22 Dec 2024 14:55:22 -0500 Subject: [PATCH 175/182] Traits System Anticheat (#1358) # Description It turns out that there was no system in place for serverside fact checking of whether or not people have a legal traits list. Last night a bug was reported whereby a player used Cheat Engine to give himself every trait in the game, bypassing the points system entirely. It's not actually possible to reduce a trait selection down to a legal list without creating interesting race conditions, which limits my options on how to deal with it. So I made it a vote on the Einstein Engines discord, and the vote was unanimous. PUNISH THE CHEATERS.

Media

https://www.youtube.com/watch?v=X2QMN0a_TrA

# Changelog :cl: - add: Implemented Anti-cheat for Traits. Attempting to join a round with an illegal traits list will result in hilarious consequences. --- Content.Server/Traits/TraitSystem.cs | 61 ++++++++++++++++++++++++++++ Content.Shared/CCVar/CCVars.cs | 7 ++++ 2 files changed, 68 insertions(+) diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index 75771a57432..7a028b381ad 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -1,14 +1,23 @@ using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.Administration.Systems; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Players.PlayTimeTracking; +using Content.Shared.CCVar; +using Content.Shared.Chat; using Content.Shared.Customization.Systems; +using Content.Shared.Database; using Content.Shared.Players; using Content.Shared.Roles; using Content.Shared.Traits; +using Robust.Server.Player; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; +using Robust.Shared.Random; using Robust.Shared.Serialization.Manager; using Robust.Shared.Utility; +using Timer = Robust.Shared.Timing.Timer; namespace Content.Server.Traits; @@ -20,6 +29,11 @@ public sealed class TraitSystem : EntitySystem [Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!; [Dependency] private readonly IConfigurationManager _configuration = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly IAdminLogManager _adminLog = default!; + [Dependency] private readonly AdminSystem _adminSystem = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IChatManager _chatManager = default!; public override void Initialize() { @@ -31,6 +45,9 @@ public override void Initialize() // When the player is spawned in, add all trait components selected during character creation private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) { + var pointsTotal = _configuration.GetCVar(CCVars.GameTraitsDefaultPoints); + var traitSelections = _configuration.GetCVar(CCVars.GameTraitsMax); + foreach (var traitId in args.Profile.TraitPreferences) { if (!_prototype.TryIndex(traitId, out var traitPrototype)) @@ -47,8 +64,15 @@ private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) out _)) continue; + // To check for cheaters. :FaridaBirb.png: + pointsTotal += traitPrototype.Points; + --traitSelections; + AddTrait(args.Mob, traitPrototype); } + + if (pointsTotal < 0 || traitSelections < 0) + PunishCheater(args.Mob); } /// @@ -59,4 +83,41 @@ public void AddTrait(EntityUid uid, TraitPrototype traitPrototype) foreach (var function in traitPrototype.Functions) function.OnPlayerSpawn(uid, _componentFactory, EntityManager, _serialization); } + + /// + /// On a non-cheating client, it's not possible to save a character with a negative number of traits. This can however + /// trigger incorrectly if a character was saved, and then at a later point in time an admin changes the traits Cvars to reduce the points. + /// Or if the points costs of traits is increased. + /// + private void PunishCheater(EntityUid uid) + { + _adminLog.Add(LogType.AdminMessage, LogImpact.High, + $"{ToPrettyString(uid):entity} attempted to spawn with an invalid trait list. This might be a mistake, or they might be cheating"); + + if (!_configuration.GetCVar(CCVars.TraitsPunishCheaters) + || !_playerManager.TryGetSessionByEntity(uid, out var targetPlayer)) + return; + + // For maximum comedic effect, this is plenty of time for the cheater to get on station and start interacting with people. + var timeToDestroy = _random.NextFloat(120, 360); + + Timer.Spawn(TimeSpan.FromSeconds(timeToDestroy), () => VaporizeCheater(targetPlayer)); + } + + /// + /// https://www.youtube.com/watch?v=X2QMN0a_TrA + /// + private void VaporizeCheater (Robust.Shared.Player.ICommonSession targetPlayer) + { + _adminSystem.Erase(targetPlayer); + + var feedbackMessage = $"[font size=24][color=#ff0000]{"You have spawned in with an illegal trait point total. If this was a result of cheats, then your nonexistence is a skill issue. Otherwise, feel free to click 'Return To Lobby', and fix your trait selections."}[/color][/font]"; + _chatManager.ChatMessageToOne( + ChatChannel.Emotes, + feedbackMessage, + feedbackMessage, + EntityUid.Invalid, + false, + targetPlayer.Channel); + } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index ef63d89af96..05a0a7f1883 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -381,6 +381,13 @@ public static readonly CVarDef public static readonly CVarDef GameTraitsDefaultPoints = CVarDef.Create("game.traits_default_points", 10, CVar.REPLICATED); + /// + /// Whether the game will SMITE people who used cheat engine to spawn with all of the traits. + /// Illegal trait totals will still be logged even if this is disabled. + /// If you are intending to decrease the trait points availability, or modify the costs of traits, consider temporarily disabling this. + /// + public static readonly CVarDef TraitsPunishCheaters = + CVarDef.Create("game.traits_punish_cheaters", true, CVar.REPLICATED); /// /// Whether to allow characters to select loadout items. From 9d738c8f36c0762e0ba3942fb26ef25735ade327 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:55:48 +0000 Subject: [PATCH 176/182] Automatic Changelog Update (#1358) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3a624ecb1cc..a4f23cfc509 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8764,3 +8764,12 @@ Entries: id: 6588 time: '2024-12-22T19:24:58.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1369 +- author: VMSolidus + changes: + - type: Add + message: >- + Implemented Anti-cheat for Traits. Attempting to join a round with an + illegal traits list will result in hilarious consequences. + id: 6589 + time: '2024-12-22T19:55:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1358 From 7f8d76ea6f63d334c894fc0f7ada6fd1359408f1 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 22 Dec 2024 14:56:20 -0500 Subject: [PATCH 177/182] Make Prisoner Not Shitter Role (#1341) # Description Prisoner is consistently the most problematic role in this entire game, being seen as "The Self Antagging Role", which produces endless amounts of administrative burden. This is especially a problem with lowpop servers, or servers that are understaffed with admins. Players just join as Prisoner, *immediately* break out of the permabrig, and then go on a self antagging spree. The solution to this was staring us in the face the whole time. Just give them the same Pacified component that the Thief antag has. Now it's impossible for them to smash the permabrig windows, someone has to intentionally let them out, and even if they do, they will be hard pressed to selfantag when they can't turn on harm intent. # Changelog :cl: - add: Prisoners now spawn with a Pacifier Implant. --- .../Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml index 0ca17947425..638aaecd2cf 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml @@ -22,6 +22,10 @@ - !type:CharacterTraitRequirement traits: - ShadowkinBlackeye + special: + - !type:AddComponentSpecial + components: + - type: Pacified - type: startingGear id: PrisonerGear From 68cb9ea4888c16056c6cfe9fea17de1a78420374 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:56:48 +0000 Subject: [PATCH 178/182] Automatic Changelog Update (#1341) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a4f23cfc509..29eb52436cf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8773,3 +8773,10 @@ Entries: id: 6589 time: '2024-12-22T19:55:22.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1358 +- author: VMSolidus + changes: + - type: Add + message: Prisoners now spawn with a Pacifier Implant. + id: 6590 + time: '2024-12-22T19:56:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1341 From a13d9640ec77e07b532b729ac540dc95b689c557 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sun, 22 Dec 2024 15:57:10 -0400 Subject: [PATCH 179/182] Fix Jittering (#1334) # Description Title. Ported from https://github.com/Fansana/floofstation1/pull/393 Resolves #1277 --- # Changelog :cl: - fix: Fixed jittering displacing your character when shaken. --- Content.Client/Jittering/JitteringSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Jittering/JitteringSystem.cs b/Content.Client/Jittering/JitteringSystem.cs index 185bd490d3b..aafaf318bb9 100644 --- a/Content.Client/Jittering/JitteringSystem.cs +++ b/Content.Client/Jittering/JitteringSystem.cs @@ -45,7 +45,7 @@ private void OnShutdown(EntityUid uid, JitteringComponent jittering, ComponentSh private void OnAnimationCompleted(EntityUid uid, JitteringComponent jittering, AnimationCompletedEvent args) { - if(args.Key != _jitterAnimationKey) + if (args.Key != _jitterAnimationKey || jittering.LifeStage >= ComponentLifeStage.Stopping) return; if (TryComp(uid, out AnimationPlayerComponent? animationPlayer) From bfb32cf24eda47ff3dbd5d4b15b58e25ae597947 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:57:37 +0000 Subject: [PATCH 180/182] Automatic Changelog Update (#1334) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 29eb52436cf..95604a1e21c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8780,3 +8780,10 @@ Entries: id: 6590 time: '2024-12-22T19:56:21.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1341 +- author: sleepyyapril + changes: + - type: Fix + message: Fixed jittering displacing your character when shaken. + id: 6591 + time: '2024-12-22T19:57:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1334 From dff8c69f2afff6714b893a7c9572a84bd384ff89 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 25 Dec 2024 21:50:09 -0600 Subject: [PATCH 181/182] Basic Soft-Crit Implementation (#1370) # Description This PR adds a simple server configuration option for enabling basic "Soft-Crit", and not much else because oh my god this system is horribly complicated. When enabled, characters can crawl around very slowly while in crit, and really not much else. This more or less mirrors how crit affects character movement in SS13, where you can at least crawl to relative safety while bleeding to death. # Changelog :cl: - add: Added server config options for basic "Soft-Crit". When enabled, characters who are critically injured can still slowly crawl, but are otherwise still helpless and dying. --- Content.Shared/CCVar/CCVars.cs | 23 +++++++++++++++ .../Systems/MobStateSystem.Subscribers.cs | 28 +++++++++++++++++-- .../Systems/SharedMoverController.Input.cs | 7 +++-- .../Movement/Systems/SharedMoverController.cs | 7 +++-- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 05a0a7f1883..a02cbb6419f 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2820,5 +2820,28 @@ public static readonly CVarDef /// public static readonly CVarDef UseDynamicHostname = CVarDef.Create("game.use_dynamic_hostname", false, CVar.SERVERONLY); + + #region SoftCrit + + /// + /// Used for basic Soft-Crit implementation. Entities are allowed to crawl when in crit, as this CVar intercepts the mover controller check for incapacitation, + /// and prevents it from stopping movement if this CVar is set to true and the user is Crit but Not Dead. This is only for movement, + /// you still can't stand up while crit, and you're still more or less helpless. + /// + public static readonly CVarDef AllowMovementWhileCrit = + CVarDef.Create("mobstate.allow_movement_while_crit", true, CVar.REPLICATED); + + public static readonly CVarDef AllowTalkingWhileCrit = + CVarDef.Create("mobstate.allow_talking_while_crit", true, CVar.REPLICATED); + + /// + /// Currently does nothing because I would have to figure out WHERE I would even put this check, and the mover controller is fairly complicated. + /// The goal is to make it so that attempting to move while in 'soft crit' can potentially cause further injury, causing you to die faster. Ideally there would be special + /// actions that can be performed in soft crit, such as applying pressure to your own injuries to slow down the bleedout, or other varieties of "Will To Live". + /// + public static readonly CVarDef DamageWhileCritMove = + CVarDef.Create("mobstate.damage_while_crit_move", false, CVar.REPLICATED); + + #endregion } } diff --git a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs index 2088bd4161e..3728813406c 100644 --- a/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs +++ b/Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs @@ -1,5 +1,6 @@ using Content.Shared.Bed.Sleep; using Content.Shared.Buckle.Components; +using Content.Shared.CCVar; using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage.ForceSay; using Content.Shared.Emoting; @@ -16,17 +17,20 @@ using Content.Shared.Standing; using Content.Shared.Strip.Components; using Content.Shared.Throwing; +using Robust.Shared.Configuration; using Robust.Shared.Physics.Components; namespace Content.Shared.Mobs.Systems; public partial class MobStateSystem { + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + //General purpose event subscriptions. If you can avoid it register these events inside their own systems private void SubscribeEvents() { SubscribeLocalEvent(OnGettingStripped); - SubscribeLocalEvent(CheckAct); + SubscribeLocalEvent(OnDirectionAttempt); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); @@ -38,7 +42,7 @@ private void SubscribeEvents() SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); - SubscribeLocalEvent(CheckAct); + SubscribeLocalEvent(OnMoveAttempt); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(CheckAct); SubscribeLocalEvent(OnSleepAttempt); @@ -48,6 +52,23 @@ private void SubscribeEvents() SubscribeLocalEvent(OnUnbuckleAttempt); } + private void OnDirectionAttempt(Entity ent, ref ChangeDirectionAttemptEvent args) + { + if (ent.Comp.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowMovementWhileCrit)) + return; + + CheckAct(ent.Owner, ent.Comp, args); + } + + private void OnMoveAttempt(Entity ent, ref UpdateCanMoveEvent args) + { + if (ent.Comp.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowMovementWhileCrit)) + return; + + CheckAct(ent.Owner, ent.Comp, args); + } + + private void OnUnbuckleAttempt(Entity ent, ref UnbuckleAttemptEvent args) { // TODO is this necessary? @@ -145,6 +166,9 @@ private void OnSpeakAttempt(EntityUid uid, MobStateComponent component, SpeakAtt return; } + if (component.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowTalkingWhileCrit)) + return; + CheckAct(uid, component, args); } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index 1c097ce17bc..2ea60155570 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -305,8 +305,11 @@ private void HandleDirChange(EntityUid entity, Direction dir, ushort subTick, bo if (MoverQuery.TryGetComponent(entity, out var mover)) SetMoveInput(mover, MoveButtons.None); - if (!_mobState.IsIncapacitated(entity)) - HandleDirChange(relayMover.RelayEntity, dir, subTick, state); + if (_mobState.IsDead(entity) + || _mobState.IsCritical(entity) && !_configManager.GetCVar(CCVars.AllowMovementWhileCrit)) + return; + + HandleDirChange(relayMover.RelayEntity, dir, subTick, state); return; } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 43a63068cf2..46ee949a4e2 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -125,9 +125,10 @@ protected void HandleMobMovement( var canMove = mover.CanMove; if (RelayTargetQuery.TryGetComponent(uid, out var relayTarget)) { - if (_mobState.IsIncapacitated(relayTarget.Source) || - TryComp(relayTarget.Source, out _) || - !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover)) + if (_mobState.IsDead(relayTarget.Source) + || TryComp(relayTarget.Source, out _) + || !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover) + || _mobState.IsCritical(relayTarget.Source) && !_configManager.GetCVar(CCVars.AllowMovementWhileCrit)) { canMove = false; } From 9430b9046a9a40cc2f96bb3c66251aabbaf9e80a Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 26 Dec 2024 03:50:37 +0000 Subject: [PATCH 182/182] Automatic Changelog Update (#1370) --- Resources/Changelog/Changelog.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 95604a1e21c..1e832dea293 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8787,3 +8787,13 @@ Entries: id: 6591 time: '2024-12-22T19:57:10.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1334 +- author: VMSolidus + changes: + - type: Add + message: >- + Added server config options for basic "Soft-Crit". When enabled, + characters who are critically injured can still slowly crawl, but are + otherwise still helpless and dying. + id: 6592 + time: '2024-12-26T03:50:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1370